diff options
author | Lennart Poettering <lennart@poettering.net> | 2012-07-03 02:00:05 +0200 |
---|---|---|
committer | Lennart Poettering <lennart@poettering.net> | 2012-07-03 02:02:13 +0200 |
commit | b32d167503b0d98f6b612fda768f92f3aad0ad0c (patch) | |
tree | 6f5fe2bacdc026ab2d77a8bcc752c6dd9e143397 /src/timedate/timedated.c | |
parent | e88dcb8f774314ff4d56f8e33773af2f6bfc9d18 (diff) |
timedated: replace ntp-units file with an ntp-units.d drop-in dir
To be considered by timedated for NTP a package simply has to drop in
/usr/lib/systemd/ntp-units.d/foobar.list and write one or more unit
names into it. The first one listed is the one that is enabled.
Diffstat (limited to 'src/timedate/timedated.c')
-rw-r--r-- | src/timedate/timedated.c | 59 |
1 files changed, 37 insertions, 22 deletions
diff --git a/src/timedate/timedated.c b/src/timedate/timedated.c index 4be7c3a997..5387699bf3 100644 --- a/src/timedate/timedated.c +++ b/src/timedate/timedated.c @@ -31,6 +31,7 @@ #include "polkit.h" #include "def.h" #include "hwclock.h" +#include "conf-files.h" #define NULL_ADJTIME_UTC "0.0 0 0\n0\nUTC\n" #define NULL_ADJTIME_LOCAL "0.0 0 0\n0\nLOCAL\n" @@ -304,40 +305,54 @@ static int write_data_local_rtc(void) { } static char** get_ntp_services(void) { - char **r = NULL; - FILE *f; - - f = fopen(SYSTEMD_NTP_UNITS, "re"); - if (!f) + char **r = NULL, **files, **i; + int k; + + k = conf_files_list(&files, ".list", + "/etc/systemd/ntp-units.d", + "/run/systemd/ntp-units.d", + "/usr/local/lib/systemd/ntp-units.d", + "/usr/lib/systemd/ntp-units.d", + NULL); + if (k < 0) return NULL; - for (;;) { - char line[PATH_MAX], *l, **q; + STRV_FOREACH(i, files) { + FILE *f; - if (!fgets(line, sizeof(line), f)) { + f = fopen(*i, "re"); + if (!f) + continue; - if (ferror(f)) - log_error("Failed to read NTP units file: %m"); + for (;;) { + char line[PATH_MAX], *l, **q; - break; - } + if (!fgets(line, sizeof(line), f)) { - l = strstrip(line); - if (l[0] == 0 || l[0] == '#') - continue; + if (ferror(f)) + log_error("Failed to read NTP units file: %m"); + break; + } - q = strv_append(r, l); - if (!q) { - log_error("Out of memory"); - break; + l = strstrip(line); + if (l[0] == 0 || l[0] == '#') + continue; + + q = strv_append(r, l); + if (!q) { + log_error("Out of memory"); + break; + } + + strv_free(r); + r = q; } - strv_free(r); - r = q; + fclose(f); } - fclose(f); + strv_free(files); return r; } |