[systemd-commits] .gitignore Makefile.am src/tempfiles.c src/tmpfiles.c

Lennart Poettering lennart at kemper.freedesktop.org
Tue Sep 28 13:12:48 PDT 2010


 .gitignore      |    2 
 Makefile.am     |   10 -
 src/tempfiles.c |  307 --------------------------------------------------------
 src/tmpfiles.c  |  307 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 4 files changed, 313 insertions(+), 313 deletions(-)

New commits:
commit bfaf42d22bbd72a286b519ea121dbf8e799b1fe5
Author: Lennart Poettering <lennart at poettering.net>
Date:   Tue Sep 28 22:11:27 2010 +0200

    tmpfiles: rename tempfiles to tmpfiles since this isn't windows

diff --git a/.gitignore b/.gitignore
index 4536356..9ba0758 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,4 +1,4 @@
-systemd-tempfiles
+systemd-tmpfiles
 systemd-readahead-collect
 systemd-readahead-replay
 systemd-reply-password
diff --git a/Makefile.am b/Makefile.am
index 980cb8f..44a2779 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -95,7 +95,7 @@ rootlibexec_PROGRAMS = \
 	systemd-reply-password \
 	systemd-readahead-collect \
 	systemd-readahead-replay \
-	systemd-tempfiles
+	systemd-tmpfiles
 
 noinst_PROGRAMS = \
 	test-engine \
@@ -627,13 +627,13 @@ systemd_modules_load_SOURCES = \
 systemd_modules_load_CFLAGS = \
 	$(AM_CFLAGS)
 
-systemd_tempfiles_LDADD = \
+systemd_tmpfiles_LDADD = \
 	libsystemd-basic.la
 
-systemd_tempfiles_SOURCES = \
-	src/tempfiles.c
+systemd_tmpfiles_SOURCES = \
+	src/tmpfiles.c
 
-systemd_tempfiles_CFLAGS = \
+systemd_tmpfiles_CFLAGS = \
 	$(AM_CFLAGS)
 
 systemd_modules_load_LDADD = \
diff --git a/src/tempfiles.c b/src/tempfiles.c
deleted file mode 100644
index 80e424f..0000000
--- a/src/tempfiles.c
+++ /dev/null
@@ -1,307 +0,0 @@
-/*-*- Mode: C; c-basic-offset: 8; indent-tabs-mode: nil -*-*/
-
-/***
-  This file is part of systemd.
-
-  Copyright 2010 Lennart Poettering
-
-  systemd is free software; you can redistribute it and/or modify it
-  under the terms of the GNU General Public License as published by
-  the Free Software Foundation; either version 2 of the License, or
-  (at your option) any later version.
-
-  systemd is distributed in the hope that it will be useful, but
-  WITHOUT ANY WARRANTY; without even the implied warranty of
-  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-  General Public License for more details.
-
-  You should have received a copy of the GNU General Public License
-  along with systemd; If not, see <http://www.gnu.org/licenses/>.
-***/
-
-#include <unistd.h>
-#include <fcntl.h>
-#include <errno.h>
-#include <string.h>
-#include <sys/stat.h>
-#include <limits.h>
-#include <dirent.h>
-#include <grp.h>
-#include <pwd.h>
-
-#include "log.h"
-#include "util.h"
-#include "strv.h"
-#include "label.h"
-
-/* This reads all files listed in /etc/tempfiles.d/?*.conf and creates
- * them in the file system. This is intended to be used to create
- * properly owned directories beneath /tmp, /var/tmp, /var/run and
- * /var/lock which are volatile and hence need to be recreated on
- * bootup. */
-
-static void process_line(const char *fname, unsigned line, const char *buffer, const char *prefix) {
-        char type;
-        char *path = NULL;
-        unsigned mode;
-        char *user = NULL, *group = NULL;
-        uid_t uid;
-        gid_t gid;
-        bool uid_set = false, gid_set = false;
-        int n, fd = -1;
-
-        assert(fname);
-        assert(line >= 1);
-        assert(buffer);
-
-        if ((n = sscanf(buffer,
-                        "%c "
-                        "%ms "
-                        "%o "
-                        "%ms "
-                        "%ms ",
-                        &type,
-                        &path,
-                        &mode,
-                        &user,
-                        &group)) < 2) {
-                log_error("[%s:%u] Syntax error.", fname, line);
-                goto finish;
-        }
-
-        if (type != 'f' && type != 'd') {
-                log_error("[%s:%u] Unknown file type '%c'.", fname, line, type);
-                goto finish;
-        }
-
-        if (prefix && !path_startswith(path, prefix))
-                goto finish;
-
-        if (user && !streq(user, "-")) {
-                unsigned long lu;
-                struct passwd *p;
-
-                if (streq(user, "root") || streq(user, "0"))
-                        uid = 0;
-                else if (safe_atolu(user, &lu) >= 0)
-                        uid = (uid_t) lu;
-                else if ((p = getpwnam(user)))
-                        uid = p->pw_uid;
-                else {
-                        log_error("[%s:%u] Unknown user '%s'.", fname, line, user);
-                        goto finish;
-                }
-
-                uid_set = true;
-        }
-
-        if (group && !streq(group, "-")) {
-                unsigned long lu;
-                struct group *g;
-
-                if (streq(group, "root") || streq(group, "0"))
-                        gid = 0;
-                else if (safe_atolu(group, &lu) >= 0)
-                        gid = (gid_t) lu;
-                else if ((g = getgrnam(group)))
-                        gid = g->gr_gid;
-                else {
-                        log_error("[%s:%u] Unknown group '%s'.", fname, line, group);
-                        goto finish;
-                }
-
-                gid_set = true;
-        }
-
-        if (n < 3)
-                mode = type == 'f' ? 0644 : 0755;
-
-        if (type == 'f') {
-                mode_t u;
-                struct stat st;
-
-                u = umask(0);
-                fd = open(path, O_CREAT|O_NDELAY|O_CLOEXEC|O_WRONLY|O_NOCTTY|O_NOFOLLOW, mode);
-                umask(u);
-
-                if (fd < 0) {
-                        log_error("Failed to create file %s: %m", path);
-                        goto finish;
-                }
-
-                if (fstat(fd, &st) < 0) {
-                        log_error("stat(%s) failed: %m", path);
-                        goto finish;
-                }
-
-                if (!S_ISREG(st.st_mode)) {
-                        log_error("%s is not a file.", path);
-                        goto finish;
-                }
-
-                if (fchmod(fd, mode) < 0) {
-                        log_error("chmod(%s) failed: %m", path);
-                        goto finish;
-                }
-
-                if (uid_set || gid_set) {
-
-                        if (fchown(fd,
-                                   uid_set ? uid : (uid_t) -1,
-                                   gid_set ? gid : (gid_t) -1) < 0) {
-                                log_error("chown(%s) failed: %m", path);
-                                goto finish;
-                        }
-                }
-
-        } else if (type == 'd') {
-                mode_t u;
-                int r;
-                struct stat st;
-
-                u = umask(0);
-                r = mkdir(path, mode);
-                umask(u);
-
-                if (r < 0 && errno != EEXIST) {
-                        log_error("Failed to create directory %s: %m", path);
-                        goto finish;
-                }
-
-                if (stat(path, &st) < 0) {
-                        log_error("stat(%s) failed: %m", path);
-                        goto finish;
-                }
-
-                if (!S_ISDIR(st.st_mode)) {
-                        log_error("%s is not a directory.", path);
-                        goto finish;
-                }
-
-                if (chmod(path, mode) < 0) {
-                        log_error("chmod(%s) failed: %m", path);
-                        goto finish;
-                }
-
-                if (uid_set || gid_set) {
-
-                        if (chown(path,
-                                   uid_set ? uid : (uid_t) -1,
-                                   gid_set ? gid : (gid_t) -1) < 0) {
-                                log_error("chown(%s) failed: %m", path);
-                                goto finish;
-                        }
-                }
-        }
-
-        label_fix(path);
-
-        log_debug("%s created successfully.", path);
-
-finish:
-        free(path);
-        free(user);
-        free(group);
-
-        if (fd >= 0)
-                close_nointr_nofail(fd);
-}
-
-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)
-                return 0;
-
-        return endswith(d->d_name, ".conf");
-}
-
-int main(int argc, char *argv[]) {
-        struct dirent **de = NULL;
-        int r = EXIT_FAILURE, n, i;
-        const char *prefix = NULL;
-
-        if (argc > 2) {
-                log_error("This program takes no more than one argument.");
-                return EXIT_FAILURE;
-        } else if (argc > 1)
-                prefix = argv[1];
-        else
-                prefix = "/";
-
-        log_set_target(LOG_TARGET_SYSLOG_OR_KMSG);
-        log_parse_environment();
-        log_open();
-
-        label_init();
-
-        if ((n = scandir("/etc/tempfiles.d/", &de, scandir_filter, alphasort)) < 0) {
-
-                if (errno == ENOENT)
-                        r = EXIT_SUCCESS;
-                else
-                        log_error("Failed to enumerate /etc/tempfiles.d/ files: %m");
-
-                goto finish;
-        }
-
-        r = EXIT_SUCCESS;
-
-        for (i = 0; i < n; i++) {
-                int k;
-                char *fn;
-                FILE *f;
-                unsigned j;
-
-                k = asprintf(&fn, "/etc/tempfiles.d/%s", de[i]->d_name);
-                free(de[i]);
-
-                if (k < 0) {
-                        log_error("Failed to allocate file name.");
-                        r = EXIT_FAILURE;
-                        continue;
-                }
-
-                f = fopen(fn, "re");
-                free(fn);
-
-                if (!f) {
-                        log_error("Failed to open %s: %m", fn);
-                        r = EXIT_FAILURE;
-                        continue;
-                }
-
-                j = 0;
-                for (;;) {
-                        char line[LINE_MAX], *l;
-
-                        if (!(fgets(line, sizeof(line), f)))
-                                break;
-
-                        j++;
-
-                        l = strstrip(line);
-                        if (*l == '#' || *l == 0)
-                                continue;
-
-                        process_line(de[i]->d_name, j, l, prefix);
-                }
-
-                if (ferror(f)) {
-                        r = EXIT_FAILURE;
-                        log_error("Failed to read from file: %m");
-                }
-
-                fclose(f);
-        }
-
-        free(de);
-
-finish:
-
-        return r;
-}
diff --git a/src/tmpfiles.c b/src/tmpfiles.c
new file mode 100644
index 0000000..80e424f
--- /dev/null
+++ b/src/tmpfiles.c
@@ -0,0 +1,307 @@
+/*-*- Mode: C; c-basic-offset: 8; indent-tabs-mode: nil -*-*/
+
+/***
+  This file is part of systemd.
+
+  Copyright 2010 Lennart Poettering
+
+  systemd is free software; you can redistribute it and/or modify it
+  under the terms of the GNU General Public License as published by
+  the Free Software Foundation; either version 2 of the License, or
+  (at your option) any later version.
+
+  systemd is distributed in the hope that it will be useful, but
+  WITHOUT ANY WARRANTY; without even the implied warranty of
+  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+  General Public License for more details.
+
+  You should have received a copy of the GNU General Public License
+  along with systemd; If not, see <http://www.gnu.org/licenses/>.
+***/
+
+#include <unistd.h>
+#include <fcntl.h>
+#include <errno.h>
+#include <string.h>
+#include <sys/stat.h>
+#include <limits.h>
+#include <dirent.h>
+#include <grp.h>
+#include <pwd.h>
+
+#include "log.h"
+#include "util.h"
+#include "strv.h"
+#include "label.h"
+
+/* This reads all files listed in /etc/tempfiles.d/?*.conf and creates
+ * them in the file system. This is intended to be used to create
+ * properly owned directories beneath /tmp, /var/tmp, /var/run and
+ * /var/lock which are volatile and hence need to be recreated on
+ * bootup. */
+
+static void process_line(const char *fname, unsigned line, const char *buffer, const char *prefix) {
+        char type;
+        char *path = NULL;
+        unsigned mode;
+        char *user = NULL, *group = NULL;
+        uid_t uid;
+        gid_t gid;
+        bool uid_set = false, gid_set = false;
+        int n, fd = -1;
+
+        assert(fname);
+        assert(line >= 1);
+        assert(buffer);
+
+        if ((n = sscanf(buffer,
+                        "%c "
+                        "%ms "
+                        "%o "
+                        "%ms "
+                        "%ms ",
+                        &type,
+                        &path,
+                        &mode,
+                        &user,
+                        &group)) < 2) {
+                log_error("[%s:%u] Syntax error.", fname, line);
+                goto finish;
+        }
+
+        if (type != 'f' && type != 'd') {
+                log_error("[%s:%u] Unknown file type '%c'.", fname, line, type);
+                goto finish;
+        }
+
+        if (prefix && !path_startswith(path, prefix))
+                goto finish;
+
+        if (user && !streq(user, "-")) {
+                unsigned long lu;
+                struct passwd *p;
+
+                if (streq(user, "root") || streq(user, "0"))
+                        uid = 0;
+                else if (safe_atolu(user, &lu) >= 0)
+                        uid = (uid_t) lu;
+                else if ((p = getpwnam(user)))
+                        uid = p->pw_uid;
+                else {
+                        log_error("[%s:%u] Unknown user '%s'.", fname, line, user);
+                        goto finish;
+                }
+
+                uid_set = true;
+        }
+
+        if (group && !streq(group, "-")) {
+                unsigned long lu;
+                struct group *g;
+
+                if (streq(group, "root") || streq(group, "0"))
+                        gid = 0;
+                else if (safe_atolu(group, &lu) >= 0)
+                        gid = (gid_t) lu;
+                else if ((g = getgrnam(group)))
+                        gid = g->gr_gid;
+                else {
+                        log_error("[%s:%u] Unknown group '%s'.", fname, line, group);
+                        goto finish;
+                }
+
+                gid_set = true;
+        }
+
+        if (n < 3)
+                mode = type == 'f' ? 0644 : 0755;
+
+        if (type == 'f') {
+                mode_t u;
+                struct stat st;
+
+                u = umask(0);
+                fd = open(path, O_CREAT|O_NDELAY|O_CLOEXEC|O_WRONLY|O_NOCTTY|O_NOFOLLOW, mode);
+                umask(u);
+
+                if (fd < 0) {
+                        log_error("Failed to create file %s: %m", path);
+                        goto finish;
+                }
+
+                if (fstat(fd, &st) < 0) {
+                        log_error("stat(%s) failed: %m", path);
+                        goto finish;
+                }
+
+                if (!S_ISREG(st.st_mode)) {
+                        log_error("%s is not a file.", path);
+                        goto finish;
+                }
+
+                if (fchmod(fd, mode) < 0) {
+                        log_error("chmod(%s) failed: %m", path);
+                        goto finish;
+                }
+
+                if (uid_set || gid_set) {
+
+                        if (fchown(fd,
+                                   uid_set ? uid : (uid_t) -1,
+                                   gid_set ? gid : (gid_t) -1) < 0) {
+                                log_error("chown(%s) failed: %m", path);
+                                goto finish;
+                        }
+                }
+
+        } else if (type == 'd') {
+                mode_t u;
+                int r;
+                struct stat st;
+
+                u = umask(0);
+                r = mkdir(path, mode);
+                umask(u);
+
+                if (r < 0 && errno != EEXIST) {
+                        log_error("Failed to create directory %s: %m", path);
+                        goto finish;
+                }
+
+                if (stat(path, &st) < 0) {
+                        log_error("stat(%s) failed: %m", path);
+                        goto finish;
+                }
+
+                if (!S_ISDIR(st.st_mode)) {
+                        log_error("%s is not a directory.", path);
+                        goto finish;
+                }
+
+                if (chmod(path, mode) < 0) {
+                        log_error("chmod(%s) failed: %m", path);
+                        goto finish;
+                }
+
+                if (uid_set || gid_set) {
+
+                        if (chown(path,
+                                   uid_set ? uid : (uid_t) -1,
+                                   gid_set ? gid : (gid_t) -1) < 0) {
+                                log_error("chown(%s) failed: %m", path);
+                                goto finish;
+                        }
+                }
+        }
+
+        label_fix(path);
+
+        log_debug("%s created successfully.", path);
+
+finish:
+        free(path);
+        free(user);
+        free(group);
+
+        if (fd >= 0)
+                close_nointr_nofail(fd);
+}
+
+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)
+                return 0;
+
+        return endswith(d->d_name, ".conf");
+}
+
+int main(int argc, char *argv[]) {
+        struct dirent **de = NULL;
+        int r = EXIT_FAILURE, n, i;
+        const char *prefix = NULL;
+
+        if (argc > 2) {
+                log_error("This program takes no more than one argument.");
+                return EXIT_FAILURE;
+        } else if (argc > 1)
+                prefix = argv[1];
+        else
+                prefix = "/";
+
+        log_set_target(LOG_TARGET_SYSLOG_OR_KMSG);
+        log_parse_environment();
+        log_open();
+
+        label_init();
+
+        if ((n = scandir("/etc/tempfiles.d/", &de, scandir_filter, alphasort)) < 0) {
+
+                if (errno == ENOENT)
+                        r = EXIT_SUCCESS;
+                else
+                        log_error("Failed to enumerate /etc/tempfiles.d/ files: %m");
+
+                goto finish;
+        }
+
+        r = EXIT_SUCCESS;
+
+        for (i = 0; i < n; i++) {
+                int k;
+                char *fn;
+                FILE *f;
+                unsigned j;
+
+                k = asprintf(&fn, "/etc/tempfiles.d/%s", de[i]->d_name);
+                free(de[i]);
+
+                if (k < 0) {
+                        log_error("Failed to allocate file name.");
+                        r = EXIT_FAILURE;
+                        continue;
+                }
+
+                f = fopen(fn, "re");
+                free(fn);
+
+                if (!f) {
+                        log_error("Failed to open %s: %m", fn);
+                        r = EXIT_FAILURE;
+                        continue;
+                }
+
+                j = 0;
+                for (;;) {
+                        char line[LINE_MAX], *l;
+
+                        if (!(fgets(line, sizeof(line), f)))
+                                break;
+
+                        j++;
+
+                        l = strstrip(line);
+                        if (*l == '#' || *l == 0)
+                                continue;
+
+                        process_line(de[i]->d_name, j, l, prefix);
+                }
+
+                if (ferror(f)) {
+                        r = EXIT_FAILURE;
+                        log_error("Failed to read from file: %m");
+                }
+
+                fclose(f);
+        }
+
+        free(de);
+
+finish:
+
+        return r;
+}


More information about the systemd-commits mailing list