From: Lennart Poettering Date: Fri, 24 Apr 2015 17:55:16 +0000 (+0200) Subject: sysctl: don't propagate ENOENT sysctl options X-Git-Tag: v220~292 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=e50b33bebdfd9ab38f037fbdb38445c64d3aae98;p=thirdparty%2Fsystemd.git sysctl: don't propagate ENOENT sysctl options We shouldn't fail the sysctl service if an option is missing. Previously the warning about this was already downgraded to LOG_DEBUG, but we really shouldn't propagate such errors either. --- diff --git a/src/sysctl/sysctl.c b/src/sysctl/sysctl.c index 43c765f064a..fe277a20151 100644 --- a/src/sysctl/sysctl.c +++ b/src/sysctl/sysctl.c @@ -42,24 +42,23 @@ static char **arg_prefixes = NULL; static const char conf_file_dirs[] = CONF_DIRS_NULSTR("sysctl"); static int apply_all(Hashmap *sysctl_options) { - int r = 0; char *property, *value; Iterator i; - - assert(sysctl_options); + int r = 0; HASHMAP_FOREACH_KEY(value, property, sysctl_options, i) { int k; k = sysctl_write(property, value); if (k < 0) { - log_full(k == -ENOENT ? LOG_DEBUG : LOG_WARNING, - "Failed to write '%s' to '%s': %s", value, property, strerror(-k)); + log_full_errno(k == -ENOENT ? LOG_DEBUG : LOG_WARNING, k, + "Failed to write '%s' to '%s': %m", value, property); - if (r == 0) + if (r == 0 && k != -ENOENT) r = k; } } + return r; } @@ -208,13 +207,14 @@ static int parse_argv(int argc, char *argv[]) { * we need to keep compatibility. We now support any * sysctl name available. */ sysctl_normalize(optarg); + if (startswith(optarg, "/proc/sys")) p = strdup(optarg); else p = strappend("/proc/sys/", optarg); - if (!p) return log_oom(); + if (strv_consume(&arg_prefixes, p) < 0) return log_oom();