[systemd-commits] Makefile.am man/binfmt.d.xml man/modules-load.d.xml man/sysctl.d.xml man/tmpfiles.d.xml src/tmpfiles.c

Kay Sievers kay at kemper.freedesktop.org
Mon Apr 25 12:41:06 PDT 2011


 Makefile.am            |    9 ++++----
 man/binfmt.d.xml       |    8 +++----
 man/modules-load.d.xml |    4 ++-
 man/sysctl.d.xml       |   12 +++++------
 man/tmpfiles.d.xml     |   33 +++++++++++++++++++++++--------
 src/tmpfiles.c         |   52 ++++++++++---------------------------------------
 6 files changed, 54 insertions(+), 64 deletions(-)

New commits:
commit 772f83719e3c2262d948a4c4e70fe9babc4c4610
Author: Kay Sievers <kay.sievers at vrfy.org>
Date:   Mon Apr 25 21:38:21 2011 +0200

    tmpfiles.d: switch to stacked config dirs in /lib, /etc, /run

diff --git a/Makefile.am b/Makefile.am
index b4644fa..d6182f1 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -31,7 +31,7 @@ bashcompletiondir=$(sysconfdir)/bash_completion.d
 # Our own, non-special dirs
 pkgsysconfdir=$(sysconfdir)/systemd
 userunitdir=$(prefix)/lib/systemd/user
-tmpfilesdir=$(sysconfdir)/tmpfiles.d
+tmpfilesdir=$(prefix)/lib/tmpfiles.d
 usergeneratordir=$(pkglibexecdir)/user-generators
 
 # And these are the special ones for /
@@ -1286,12 +1286,13 @@ CLEANFILES += \
 install-data-hook:
 	$(MKDIR_P) -m 0755 \
 		$(DESTDIR)$(tmpfilesdir) \
-		$(DESTDIR)$(sysconfdir)/modules-load.d \
+		$(DESTDIR)$(sysconfdir)/tmpfiles.d \
 		$(DESTDIR)$(prefix)/lib/modules-load.d \
-		$(DESTDIR)$(sysconfdir)/sysctl.d \
+		$(DESTDIR)$(sysconfdir)/modules-load.d \
 		$(DESTDIR)$(prefix)/lib/sysctl.d \
-		$(DESTDIR)$(sysconfdir)/binfmt.d \
+		$(DESTDIR)$(sysconfdir)/sysctl.d \
 		$(DESTDIR)$(prefix)/lib/binfmt.d \
+		$(DESTDIR)$(sysconfdir)/binfmt.d \
 		$(DESTDIR)$(systemshutdowndir) \
 		$(DESTDIR)$(systemgeneratordir) \
 		$(DESTDIR)$(usergeneratordir)
diff --git a/man/binfmt.d.xml b/man/binfmt.d.xml
index 5a8803f..966778d 100644
--- a/man/binfmt.d.xml
+++ b/man/binfmt.d.xml
@@ -57,9 +57,7 @@
 		<para><command>systemd</command> uses
 		files from the above directories to configure
 		additional binary formats to register during boot in
-		the kernel.  Each configuration file is named in the
-		style of
-		<filename>&lt;program&gt;.conf</filename>.</para>
+		the kernel.</para>
         </refsect1>
 
         <refsect1>
@@ -75,7 +73,9 @@
                 ignored. Note that this means you may not use ; and #
                 as delimiter in binary format rules.</para>
 
-                <para>Files in <filename>/etc/</filename> overwrite
+                <para>Each configuration file is named in the style of
+                <filename>&lt;program&gt;.conf</filename>.
+                Files in <filename>/etc/</filename> overwrite
                 files with the same name in <filename>/usr/lib/</filename>.
                 Files in <filename>/run</filename> overwrite files with
                 the same name in <filename>/etc/</filename> and
diff --git a/man/modules-load.d.xml b/man/modules-load.d.xml
index b2f15dc..b633663 100644
--- a/man/modules-load.d.xml
+++ b/man/modules-load.d.xml
@@ -74,7 +74,9 @@
 		newlines. Empty lines and lines whose first
 		non-whitespace character is # or ; are ignored.</para>
 
-                <para>Files in <filename>/etc/</filename> overwrite
+                <para>Each configuration file is named in the style of
+                <filename>&lt;program&gt;.conf</filename>.
+                Files in <filename>/etc/</filename> overwrite
                 files with the same name in <filename>/usr/lib/</filename>.
                 Files in <filename>/run</filename> overwrite files with
                 the same name in <filename>/etc/</filename> and
diff --git a/man/sysctl.d.xml b/man/sysctl.d.xml
index 51afbfa..240aa81 100644
--- a/man/sysctl.d.xml
+++ b/man/sysctl.d.xml
@@ -54,12 +54,10 @@
         <refsect1>
                 <title>Description</title>
 
-		<para><command>systemd</command> uses
-		<filename>/etc/sysctl.d/</filename> to configure
+		<para><command>systemd</command> uses configuration files
+		from the above directories to configure
 		<citerefentry><refentrytitle>sysctl</refentrytitle><manvolnum>8</manvolnum></citerefentry>
-		kernel parameters to load during boot. Each
-		configuration file is named in the style of
-		<filename>/etc/sysctl.d/&lt;program&gt;.conf</filename>.</para>
+		kernel parameters to load during boot.</para>
         </refsect1>
 
         <refsect1>
@@ -73,7 +71,9 @@
                 <para>Note that both / and . are accepted as
                 separators in sysctl variable names.</para>
 
-                <para>Files in <filename>/etc/</filename> overwrite
+                <para>Each configuration file is named in the style of
+                <filename>&lt;program&gt;.conf</filename>.
+                Files in <filename>/etc/</filename> overwrite
                 files with the same name in <filename>/usr/lib/</filename>.
                 Files in <filename>/run</filename> overwrite files with
                 the same name in <filename>/etc/</filename> and
diff --git a/man/tmpfiles.d.xml b/man/tmpfiles.d.xml
index 8568fcd..abc74ef 100644
--- a/man/tmpfiles.d.xml
+++ b/man/tmpfiles.d.xml
@@ -47,26 +47,41 @@
         </refnamediv>
 
         <refsynopsisdiv>
+                <para><filename>/usr/lib/tmpfiles.d/*.conf</filename></para>
                 <para><filename>/etc/tmpfiles.d/*.conf</filename></para>
+                <para><filename>/run/tmpfiles.d/*.conf</filename></para>
         </refsynopsisdiv>
 
         <refsect1>
                 <title>Description</title>
 
 		<para><command>systemd-tmpfiles</command> uses the
-		configuration files in
-		<filename>/etc/tmpfiles.d/</filename> to describe the
+		configuration files from the above directories to describe the
 		creation, cleaning and removal of volatile and
 		temporary files and directories which usually reside
 		in directories such as <filename>/run</filename>
-		or <filename>/tmp</filename>. Each configuration file
-		is named in the style of
-		<filename>/etc/tmpfiles.d/&lt;program&gt;.conf</filename>.</para>
+		or <filename>/tmp</filename>.</para>
         </refsect1>
 
         <refsect1>
 		<title>Configuration Format</title>
 
+                <para>Each configuration file is named in the style of
+                <filename>&lt;program&gt;.conf</filename>.
+                Files in <filename>/etc/</filename> overwrite
+                files with the same name in <filename>/usr/lib/</filename>.
+                Files in <filename>/run</filename> overwrite files with
+                the same name in <filename>/etc/</filename> and
+                <filename>/usr/lib/</filename>. Packages should install their
+                configuration files in <filename>/usr/lib/</filename>, files
+                in <filename>/etc/</filename> are reserved for the local
+                administration, which possibly decides to overwrite the
+                configurations installed from packages. All files are sorted
+                by filename in alphabetical order, regardless in which of the
+                directories they reside, to ensure that a specific
+                configuration file takes precedence over another file with
+                an alphabetically later name.</para>
+
 		<para>The configuration format is one line per path
 		containing action, mode, ownership and age
 		fields:</para>
@@ -181,10 +196,12 @@ d    /run/user 0755 root root 10d</programlisting>
                                 <term><varname>us</varname></term></varlistentry>
                         </variablelist>
 
-                        <para>If multiple integers and units are specified the time values are summed up.</para>
-
-                        <para>The age field only applies to lines starting with d, D and x. If omitted or set to - no automatic clean-up is done.</para>
+                        <para>If multiple integers and units are specified the time
+                        values are summed up.</para>
 
+                        <para>The age field only applies to lines starting with
+                        d, D and x. If omitted or set to - no automatic clean-up
+                        is done.</para>
                 </refsect2>
 
         </refsect1>
diff --git a/src/tmpfiles.c b/src/tmpfiles.c
index 2526d1e..1574a19 100644
--- a/src/tmpfiles.c
+++ b/src/tmpfiles.c
@@ -804,20 +804,6 @@ finish:
         return r;
 }
 
-static int scandir_filter(const struct dirent *d) {
-        assert(d);
-
-        if (ignore_file(d->d_name))
-                return 0;
-
-        if (d->d_type != DT_REG &&
-            d->d_type != DT_LNK &&
-            d->d_type != DT_UNKNOWN)
-                return 0;
-
-        return endswith(d->d_name, ".conf");
-}
-
 static int help(void) {
 
         printf("%s [OPTIONS...] [CONFIGURATION FILE...]\n\n"
@@ -912,6 +898,7 @@ static int read_config_file(const char *fn, bool ignore_enoent) {
                 return -errno;
         }
 
+        log_debug("apply: %s\n", fn);
         for (;;) {
                 char line[LINE_MAX], *l;
                 int k;
@@ -974,40 +961,23 @@ int main(int argc, char *argv[]) {
                                 r = EXIT_FAILURE;
 
         } else {
-                int n, j;
-                struct dirent **de = NULL;
+                char **files, **f;
 
-                if ((n = scandir("/etc/tmpfiles.d/", &de, scandir_filter, alphasort)) < 0) {
+                files = conf_files_list(".conf",
+                                        "/run/tmpfiles.d",
+                                        "/etc/tmpfiles.d",
+                                        "/usr/lib/tmpfiles.d",
+                                        NULL);
 
-                        if (errno != ENOENT) {
-                                log_error("Failed to enumerate /etc/tmpfiles.d/ files: %m");
+                STRV_FOREACH(f, files) {
+                        if (read_config_file(*f, true) < 0)
                                 r = EXIT_FAILURE;
-                        }
-
-                        goto finish;
                 }
 
-                for (j = 0; j < n; j++) {
-                        int k;
-                        char *fn;
-
-                        k = asprintf(&fn, "/etc/tmpfiles.d/%s", de[j]->d_name);
-                        free(de[j]);
-
-                        if (k < 0) {
-                                log_error("Failed to allocate file name.");
-                                r = EXIT_FAILURE;
-                                continue;
-                        }
+                strv_free(files);
+        }
 
-                        if (read_config_file(fn, true) < 0)
-                                r = EXIT_FAILURE;
 
-                        free(fn);
-                }
-
-                free(de);
-        }
 
         HASHMAP_FOREACH(i, globs, iterator)
                 if (process_item(i) < 0)



More information about the systemd-commits mailing list