summaryrefslogtreecommitdiff
path: root/src/shared/util.c
diff options
context:
space:
mode:
authorMichal Schmidt <mschmidt@redhat.com>2012-10-30 14:29:38 +0100
committerMichal Schmidt <mschmidt@redhat.com>2012-10-30 15:41:15 +0100
commitf8b69d1dfc307562a353f6aa923b7c2b915aaddb (patch)
tree79a9776e85e7f9ad9ca944665cc428be480789f3 /src/shared/util.c
parent26acfdae44e3605788420432d28a7264214d1213 (diff)
shared, core: do not always accept numbers in string lookups
The behaviour of the common name##_from_string conversion is surprising. It accepts not only the strings from name##_table but also any number that falls within the range of the table. The order of items in most of our tables is an internal affair. It should not be visible to the user. I know of a case where the surprising numeric conversion leads to a crash. We will allow the direct numeric conversion only for the tables where the mapping of strings to numeric values has an external meaning. This holds for the following lookup tables: - netlink_family, ioprio_class, ip_tos, sched_policy - their numeric values are stable as they are defined by the Linux kernel interface. - log_level, log_facility_unshifted - the well-known syslog interface. We allow the user to use numeric values whose string names systemd does not know. For instance, the user may want to test a new kernel featuring a scheduling policy that did not exist when his systemd version was released. A slightly unpleasant effect of this is that the name##_to_string conversion cannot return pointers to constant strings anymore. The strings have to be allocated on demand and freed by the caller.
Diffstat (limited to 'src/shared/util.c')
-rw-r--r--src/shared/util.c10
1 files changed, 5 insertions, 5 deletions
diff --git a/src/shared/util.c b/src/shared/util.c
index 23832fe16a..402b7caa3f 100644
--- a/src/shared/util.c
+++ b/src/shared/util.c
@@ -5207,7 +5207,7 @@ static const char *const ioprio_class_table[] = {
[IOPRIO_CLASS_IDLE] = "idle"
};
-DEFINE_STRING_TABLE_LOOKUP(ioprio_class, int);
+DEFINE_STRING_TABLE_LOOKUP_WITH_FALLBACK(ioprio_class, int, INT_MAX);
static const char *const sigchld_code_table[] = {
[CLD_EXITED] = "exited",
@@ -5243,7 +5243,7 @@ static const char *const log_facility_unshifted_table[LOG_NFACILITIES] = {
[LOG_FAC(LOG_LOCAL7)] = "local7"
};
-DEFINE_STRING_TABLE_LOOKUP(log_facility_unshifted, int);
+DEFINE_STRING_TABLE_LOOKUP_WITH_FALLBACK(log_facility_unshifted, int, LOG_FAC(~0));
static const char *const log_level_table[] = {
[LOG_EMERG] = "emerg",
@@ -5256,7 +5256,7 @@ static const char *const log_level_table[] = {
[LOG_DEBUG] = "debug"
};
-DEFINE_STRING_TABLE_LOOKUP(log_level, int);
+DEFINE_STRING_TABLE_LOOKUP_WITH_FALLBACK(log_level, int, LOG_DEBUG);
static const char* const sched_policy_table[] = {
[SCHED_OTHER] = "other",
@@ -5266,7 +5266,7 @@ static const char* const sched_policy_table[] = {
[SCHED_RR] = "rr"
};
-DEFINE_STRING_TABLE_LOOKUP(sched_policy, int);
+DEFINE_STRING_TABLE_LOOKUP_WITH_FALLBACK(sched_policy, int, INT_MAX);
static const char* const rlimit_table[] = {
[RLIMIT_CPU] = "LimitCPU",
@@ -5296,7 +5296,7 @@ static const char* const ip_tos_table[] = {
[IPTOS_LOWCOST] = "low-cost",
};
-DEFINE_STRING_TABLE_LOOKUP(ip_tos, int);
+DEFINE_STRING_TABLE_LOOKUP_WITH_FALLBACK(ip_tos, int, 0xff);
static const char *const __signal_table[] = {
[SIGHUP] = "HUP",