mirror of
https://github.com/systemd/systemd.git
synced 2024-11-08 11:27:32 +03:00
binfmt, modules-load, sysctl, tmpfiles: read /usr/local/lib and where appropriate /lib directories
This commit is contained in:
parent
db91c52703
commit
223a355816
@ -138,6 +138,7 @@ int main(int argc, char *argv[]) {
|
|||||||
r = conf_files_list(&files, ".conf",
|
r = conf_files_list(&files, ".conf",
|
||||||
"/run/binfmt.d",
|
"/run/binfmt.d",
|
||||||
"/etc/binfmt.d",
|
"/etc/binfmt.d",
|
||||||
|
"/usr/local/lib/binfmt.d",
|
||||||
"/usr/lib/binfmt.d",
|
"/usr/lib/binfmt.d",
|
||||||
NULL);
|
NULL);
|
||||||
|
|
||||||
|
@ -56,7 +56,9 @@ int main(int argc, char *argv[]) {
|
|||||||
if (conf_files_list(&files, ".conf",
|
if (conf_files_list(&files, ".conf",
|
||||||
"/run/modules-load.d",
|
"/run/modules-load.d",
|
||||||
"/etc/modules-load.d",
|
"/etc/modules-load.d",
|
||||||
|
"/usr/local/lib/modules-load.d",
|
||||||
"/usr/lib/modules-load.d",
|
"/usr/lib/modules-load.d",
|
||||||
|
"/lib/modules-load.d",
|
||||||
NULL) < 0) {
|
NULL) < 0) {
|
||||||
log_error("Failed to enumerate modules-load.d files: %s", strerror(-r));
|
log_error("Failed to enumerate modules-load.d files: %s", strerror(-r));
|
||||||
goto finish;
|
goto finish;
|
||||||
|
@ -143,7 +143,9 @@ int main(int argc, char *argv[]) {
|
|||||||
r = conf_files_list(&files, ".conf",
|
r = conf_files_list(&files, ".conf",
|
||||||
"/run/sysctl.d",
|
"/run/sysctl.d",
|
||||||
"/etc/sysctl.d",
|
"/etc/sysctl.d",
|
||||||
|
"/usr/local/sysctl.d",
|
||||||
"/usr/lib/sysctl.d",
|
"/usr/lib/sysctl.d",
|
||||||
|
"/lib/sysctl.d",
|
||||||
NULL);
|
NULL);
|
||||||
if (r < 0) {
|
if (r < 0) {
|
||||||
log_error("Failed to enumerate sysctl.d files: %s", strerror(-r));
|
log_error("Failed to enumerate sysctl.d files: %s", strerror(-r));
|
||||||
|
@ -966,6 +966,7 @@ int main(int argc, char *argv[]) {
|
|||||||
r = conf_files_list(&files, ".conf",
|
r = conf_files_list(&files, ".conf",
|
||||||
"/run/tmpfiles.d",
|
"/run/tmpfiles.d",
|
||||||
"/etc/tmpfiles.d",
|
"/etc/tmpfiles.d",
|
||||||
|
"/usr/local/lib/tmpfiles.d",
|
||||||
"/usr/lib/tmpfiles.d",
|
"/usr/lib/tmpfiles.d",
|
||||||
NULL);
|
NULL);
|
||||||
if (r < 0) {
|
if (r < 0) {
|
||||||
|
40
src/util.c
40
src/util.c
@ -4576,17 +4576,25 @@ static int files_add(Hashmap *h, const char *path, const char *suffix) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
for (de = readdir(dir); de; de = readdir(dir)) {
|
for (de = readdir(dir); de; de = readdir(dir)) {
|
||||||
char *f;
|
char *p, *f;
|
||||||
const char *base;
|
const char *base;
|
||||||
|
|
||||||
if (!file_is_conf(de, suffix))
|
if (!file_is_conf(de, suffix))
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
if (asprintf(&f, "%s/%s", path, de->d_name) < 0) {
|
if (asprintf(&p, "%s/%s", path, de->d_name) < 0) {
|
||||||
r = -ENOMEM;
|
r = -ENOMEM;
|
||||||
goto finish;
|
goto finish;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
f = canonicalize_file_name(p);
|
||||||
|
if (!f) {
|
||||||
|
log_error("Failed to canonicalize file name '%s': %m", p);
|
||||||
|
free(p);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
free(p);
|
||||||
|
|
||||||
log_debug("found: %s\n", f);
|
log_debug("found: %s\n", f);
|
||||||
base = f + strlen(path) + 1;
|
base = f + strlen(path) + 1;
|
||||||
if (hashmap_put(h, base, f) <= 0)
|
if (hashmap_put(h, base, f) <= 0)
|
||||||
@ -4607,27 +4615,42 @@ static int base_cmp(const void *a, const void *b) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
int conf_files_list(char ***strv, const char *suffix, const char *dir, ...) {
|
int conf_files_list(char ***strv, const char *suffix, const char *dir, ...) {
|
||||||
Hashmap *fh;
|
Hashmap *fh = NULL;
|
||||||
|
char **dirs = NULL;
|
||||||
char **files = NULL;
|
char **files = NULL;
|
||||||
|
char **p;
|
||||||
va_list ap;
|
va_list ap;
|
||||||
int r = 0;
|
int r = 0;
|
||||||
|
|
||||||
|
va_start(ap, dir);
|
||||||
|
dirs = strv_new_ap(dir, ap);
|
||||||
|
va_end(ap);
|
||||||
|
if (!dirs) {
|
||||||
|
r = -ENOMEM;
|
||||||
|
goto finish;
|
||||||
|
}
|
||||||
|
if (!strv_path_canonicalize(dirs)) {
|
||||||
|
r = -ENOMEM;
|
||||||
|
goto finish;
|
||||||
|
}
|
||||||
|
if (!strv_uniq(dirs)) {
|
||||||
|
r = -ENOMEM;
|
||||||
|
goto finish;
|
||||||
|
}
|
||||||
|
|
||||||
fh = hashmap_new(string_hash_func, string_compare_func);
|
fh = hashmap_new(string_hash_func, string_compare_func);
|
||||||
if (!fh) {
|
if (!fh) {
|
||||||
r = -ENOMEM;
|
r = -ENOMEM;
|
||||||
goto finish;
|
goto finish;
|
||||||
}
|
}
|
||||||
|
|
||||||
va_start(ap, dir);
|
STRV_FOREACH(p, dirs) {
|
||||||
while (dir) {
|
if (files_add(fh, *p, suffix) < 0) {
|
||||||
if (files_add(fh, dir, suffix) < 0) {
|
|
||||||
log_error("Failed to search for files.");
|
log_error("Failed to search for files.");
|
||||||
r = -EINVAL;
|
r = -EINVAL;
|
||||||
goto finish;
|
goto finish;
|
||||||
}
|
}
|
||||||
dir = va_arg(ap, const char *);
|
|
||||||
}
|
}
|
||||||
va_end(ap);
|
|
||||||
|
|
||||||
files = hashmap_get_strv(fh);
|
files = hashmap_get_strv(fh);
|
||||||
if (files == NULL) {
|
if (files == NULL) {
|
||||||
@ -4638,6 +4661,7 @@ int conf_files_list(char ***strv, const char *suffix, const char *dir, ...) {
|
|||||||
|
|
||||||
qsort(files, hashmap_size(fh), sizeof(char *), base_cmp);
|
qsort(files, hashmap_size(fh), sizeof(char *), base_cmp);
|
||||||
finish:
|
finish:
|
||||||
|
strv_free(dirs);
|
||||||
hashmap_free(fh);
|
hashmap_free(fh);
|
||||||
*strv = files;
|
*strv = files;
|
||||||
return r;
|
return r;
|
||||||
|
Loading…
Reference in New Issue
Block a user