summaryrefslogtreecommitdiff
path: root/src/timedate/timedated.c
diff options
context:
space:
mode:
authorLennart Poettering <lennart@poettering.net>2012-07-03 02:00:05 +0200
committerLennart Poettering <lennart@poettering.net>2012-07-03 02:02:13 +0200
commitb32d167503b0d98f6b612fda768f92f3aad0ad0c (patch)
tree6f5fe2bacdc026ab2d77a8bcc752c6dd9e143397 /src/timedate/timedated.c
parente88dcb8f774314ff4d56f8e33773af2f6bfc9d18 (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.c59
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;
}