diff --git a/TODO b/TODO index 3f26e2ea5f..4ba66efec3 100644 --- a/TODO +++ b/TODO @@ -63,7 +63,7 @@ Features: * maybe add tiny dbus services similar to hostnamed for locale and wallclock/timezone? -* allow port = 0 in .socket units +* allow port=0 in .socket units * rename systemd-logger to systemd-stdio-syslog-bridge @@ -123,6 +123,8 @@ Features: about policy loading. Probably check for available selinux in /proc/filesystems, and check for active selinux with getcon_raw() == "kernel" +* move /selinux to /sys/fs/selinux + * Support --test based on current system state * systemctl enable as D-Bus call @@ -231,7 +233,7 @@ External: * make cryptsetup lower --iter-time -* patch kernel for xattr support in /dev, /proc/, /sys and /sys/fs/cgroup. +* patch kernel for xattr support in /dev, /proc/, /sys and /sys/fs/cgroup? * patch kernel for cpu feature modalias for autoloading aes/kvm/... http://git.kernel.org/?p=linux/kernel/git/ak/linux-misc-2.6.git;a=shortlog;h=refs/heads/cpuid-match diff --git a/src/binfmt.c b/src/binfmt.c index 619f6e4aa7..be1f1ff097 100644 --- a/src/binfmt.c +++ b/src/binfmt.c @@ -135,11 +135,16 @@ int main(int argc, char *argv[]) { /* Flush out all rules */ write_one_line_file("/proc/sys/fs/binfmt_misc/status", "-1"); - files = conf_files_list(".conf", - "/run/binfmt.d", - "/etc/binfmt.d", - "/usr/lib/binfmt.d", - NULL); + r = conf_files_list(&files, ".conf", + "/run/binfmt.d", + "/etc/binfmt.d", + "/usr/lib/binfmt.d", + NULL); + + if (r < 0) { + log_error("Failed to enumerate binfmt.d files: %s", strerror(-r)); + goto finish; + } STRV_FOREACH(f, files) { int k; @@ -151,5 +156,6 @@ int main(int argc, char *argv[]) { strv_free(files); } +finish: return r < 0 ? EXIT_FAILURE : EXIT_SUCCESS; } diff --git a/src/dbus.c b/src/dbus.c index 8ea768c5a7..187ed303b4 100644 --- a/src/dbus.c +++ b/src/dbus.c @@ -1322,7 +1322,7 @@ int bus_fdset_add_all(Manager *m, FDSet *fds) { * set to pass over to the newly executed systemd. They won't * be used there however, except that they are closed at the * very end of deserialization, those making it possible for - * clients to synchronously wait for systemd to reexec buy + * clients to synchronously wait for systemd to reexec by * simply waiting for disconnection */ SET_FOREACH(c, m->bus_connections_for_dispatch, i) { diff --git a/src/modules-load.c b/src/modules-load.c index fac4511816..7efd81f75b 100644 --- a/src/modules-load.c +++ b/src/modules-load.c @@ -53,13 +53,12 @@ int main(int argc, char *argv[]) { n_arguments = n_allocated = 3; - files = conf_files_list(".conf", - "/run/modules-load.d", - "/etc/modules-load.d", - "/usr/lib/modules-load.d", - NULL); - if (files == NULL) { - log_error("Failed to enumerate modules-load.d files: %m"); + if (conf_files_list(&files, ".conf", + "/run/modules-load.d", + "/etc/modules-load.d", + "/usr/lib/modules-load.d", + NULL) < 0) { + log_error("Failed to enumerate modules-load.d files: %s", strerror(-r)); goto finish; } diff --git a/src/sysctl.c b/src/sysctl.c index 1d42e9378b..814cfea592 100644 --- a/src/sysctl.c +++ b/src/sysctl.c @@ -138,13 +138,17 @@ int main(int argc, char *argv[]) { else { char **files, **f; - r = apply_file("/etc/sysctl.conf", true); + apply_file("/etc/sysctl.conf", true); - files = conf_files_list(".conf", - "/run/sysctl.d", - "/etc/sysctl.d", - "/usr/lib/sysctl.d", - NULL); + r = conf_files_list(&files, ".conf", + "/run/sysctl.d", + "/etc/sysctl.d", + "/usr/lib/sysctl.d", + NULL); + if (r < 0) { + log_error("Failed to enumerate sysctl.d files: %s", strerror(-r)); + goto finish; + } STRV_FOREACH(f, files) { int k; @@ -156,6 +160,6 @@ int main(int argc, char *argv[]) { strv_free(files); } - +finish: return r < 0 ? EXIT_FAILURE : EXIT_SUCCESS; } diff --git a/src/tmpfiles.c b/src/tmpfiles.c index 1574a199fb..f36a75f8f2 100644 --- a/src/tmpfiles.c +++ b/src/tmpfiles.c @@ -963,11 +963,16 @@ int main(int argc, char *argv[]) { } else { char **files, **f; - files = conf_files_list(".conf", - "/run/tmpfiles.d", - "/etc/tmpfiles.d", - "/usr/lib/tmpfiles.d", - NULL); + r = conf_files_list(&files, ".conf", + "/run/tmpfiles.d", + "/etc/tmpfiles.d", + "/usr/lib/tmpfiles.d", + NULL); + if (r < 0) { + r = EXIT_FAILURE; + log_error("Failed to enumerate tmpfiles.d files: %s", strerror(-r)); + goto finish; + } STRV_FOREACH(f, files) { if (read_config_file(*f, true) < 0) diff --git a/src/util.c b/src/util.c index 6037455f70..b337778d0e 100644 --- a/src/util.c +++ b/src/util.c @@ -4606,15 +4606,15 @@ static int base_cmp(const void *a, const void *b) { return strcmp(file_name_from_path(s1), file_name_from_path(s2)); } -char **conf_files_list(const char *suffix, const char *dir, ...) { +int conf_files_list(char ***strv, const char *suffix, const char *dir, ...) { Hashmap *fh; char **files = NULL; va_list ap; - int e = 0; + int r = 0; fh = hashmap_new(string_hash_func, string_compare_func); if (!fh) { - e = ENOMEM; + r = -ENOMEM; goto finish; } @@ -4622,7 +4622,7 @@ char **conf_files_list(const char *suffix, const char *dir, ...) { while (dir) { if (files_add(fh, dir, suffix) < 0) { log_error("Failed to search for files."); - e = EINVAL; + r = -EINVAL; goto finish; } dir = va_arg(ap, const char *); @@ -4632,13 +4632,13 @@ char **conf_files_list(const char *suffix, const char *dir, ...) { files = hashmap_get_strv(fh); if (files == NULL) { log_error("Failed to compose list of files."); - e = ENOMEM; + r = -ENOMEM; goto finish; } qsort(files, hashmap_size(fh), sizeof(char *), base_cmp); finish: hashmap_free(fh); - errno = e; - return files; + *strv = files; + return r; } diff --git a/src/util.h b/src/util.h index ff29474502..5f6325b9e4 100644 --- a/src/util.h +++ b/src/util.h @@ -442,5 +442,5 @@ int signal_from_string(const char *s); int signal_from_string_try_harder(const char *s); -char **conf_files_list(const char *suffix, const char *dir, ...); +int conf_files_list(char ***strv, const char *suffix, const char *dir, ...); #endif