summaryrefslogtreecommitdiff
path: root/src/tmpfiles
diff options
context:
space:
mode:
authorZbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>2018-01-10 20:18:51 +0100
committerGitHub <noreply@github.com>2018-01-10 20:18:51 +0100
commita9883559e3d29246a40973461e57915f4ff4c8ea (patch)
treee6b12732fb88f65b896ad04d418744956de9f4fd /src/tmpfiles
parent5a2dadf1bbf4c7c0b04dddee98a3a6b2a053f868 (diff)
parente557b1a655561906343918fa30959b53d16c3fdd (diff)
downloadsystemd-a9883559e3d29246a40973461e57915f4ff4c8ea.tar.gz
Merge pull request #7846 from poettering/nobody-getenv
some assorted fixes and additions, in particular a way to turn off "nobody" synthesizing on a specific system
Diffstat (limited to 'src/tmpfiles')
-rw-r--r--src/tmpfiles/tmpfiles.c45
1 files changed, 30 insertions, 15 deletions
diff --git a/src/tmpfiles/tmpfiles.c b/src/tmpfiles/tmpfiles.c
index a7ce1a8049..d69073535c 100644
--- a/src/tmpfiles/tmpfiles.c
+++ b/src/tmpfiles/tmpfiles.c
@@ -375,35 +375,47 @@ static struct Item* find_glob(OrderedHashmap *h, const char *match) {
static void load_unix_sockets(void) {
_cleanup_fclose_ FILE *f = NULL;
- char line[LINE_MAX];
+ int r;
if (unix_sockets)
return;
- /* We maintain a cache of the sockets we found in
- * /proc/net/unix to speed things up a little. */
+ /* We maintain a cache of the sockets we found in /proc/net/unix to speed things up a little. */
unix_sockets = set_new(&string_hash_ops);
if (!unix_sockets)
return;
f = fopen("/proc/net/unix", "re");
- if (!f)
- return;
+ if (!f) {
+ log_full_errno(errno == ENOENT ? LOG_DEBUG : LOG_WARNING, errno,
+ "Failed to open /proc/net/unix, ignoring: %m");
+ goto fail;
+ }
/* Skip header */
- if (!fgets(line, sizeof(line), f))
+ r = read_line(f, LONG_LINE_MAX, NULL);
+ if (r < 0) {
+ log_warning_errno(r, "Failed to skip /proc/net/unix header line: %m");
+ goto fail;
+ }
+ if (r == 0) {
+ log_warning("Premature end of file reading /proc/net/unix.");
goto fail;
+ }
for (;;) {
+ _cleanup_free_ char *line = NULL;
char *p, *s;
- int k;
- if (!fgets(line, sizeof(line), f))
+ r = read_line(f, LONG_LINE_MAX, &line);
+ if (r < 0) {
+ log_warning_errno(r, "Failed to read /proc/net/unix line, ignoring: %m");
+ goto fail;
+ }
+ if (r == 0) /* EOF */
break;
- truncate_nl(line);
-
p = strchr(line, ':');
if (!p)
continue;
@@ -420,21 +432,24 @@ static void load_unix_sockets(void) {
continue;
s = strdup(p);
- if (!s)
+ if (!s) {
+ log_oom();
goto fail;
+ }
path_kill_slashes(s);
- k = set_consume(unix_sockets, s);
- if (k < 0 && k != -EEXIST)
+ r = set_consume(unix_sockets, s);
+ if (r < 0 && r != -EEXIST) {
+ log_warning_errno(r, "Failed to add AF_UNIX socket to set, ignoring: %m");
goto fail;
+ }
}
return;
fail:
- set_free_free(unix_sockets);
- unix_sockets = NULL;
+ unix_sockets = set_free_free(unix_sockets);
}
static bool unix_socket_alive(const char *fn) {