@cryptotaxi247 / netdata-1 / commits / 804ab2e26

create /var/cache/netdata and /var/lib/netdata if they do not exist; fixes #1204

Costa Tsaousis (ktsaou) committed Nov 4, 2016 at 00:01 UTC 804ab2e261cb4df49167e7a79b83cbd07b8bed71
2 files changed +17 -1
src/daemon.c
+16
@@ -58,6 +58,15 @@ static void chown_open_file(int fd, uid_t uid, gid_t gid) {
58 }
59 }
60
61 +void create_needed_dir(const char *dir, uid_t uid, gid_t gid)
62 +{
63 + if(mkdir(dir, 0755) == -1 && errno != EEXIST)
64 + error("Cannot create directory '%s'", dir);
65 +
66 + if(chown(dir, uid, gid) == -1)
67 + error("Cannot chown directory '%s' to %u:%u", dir, (unsigned int)uid, (unsigned int)gid);
68 +}
69 +
70 int become_user(const char *username, int pid_fd)
71 {
72 struct passwd *pw = getpwnam(username);
@@ -69,6 +78,9 @@ int become_user(const char *username, int pid_fd)
78 uid_t uid = pw->pw_uid;
79 gid_t gid = pw->pw_gid;
80
81 + create_needed_dir(CACHE_DIR, uid, gid);
82 + create_needed_dir(VARLIB_DIR, uid, gid);
83 +
84 int ngroups = (int)sysconf(_SC_NGROUPS_MAX);
85 gid_t *supplementary_groups = NULL;
86 if(ngroups) {
@@ -223,6 +235,10 @@ int become_daemon(int dont_fork, const char *user)
235 }
236 else debug(D_SYSTEM, "Successfully became user '%s'.", user);
237 }
238 + else {
239 + create_needed_dir(CACHE_DIR, getuid(), getgid());
240 + create_needed_dir(VARLIB_DIR, getuid(), getgid());
241 + }
242
243 if(pidfd != -1) {
244 close(pidfd);
src/main.c
+1 -1
@@ -643,7 +643,7 @@ int main(int argc, char **argv)
643
644 // fork, switch user, create pid file, set process priority
645 if(become_daemon(dont_fork, user) == -1)
646 - fatal("Cannot demonize myself.");
646 + fatal("Cannot daemonize myself.");
647
648 info("NetData started on pid %d", getpid());
649