]> arthur.barton.de Git - netdata.git/commitdiff
create /var/cache/netdata and /var/lib/netdata if they do not exist; fixes #1204
authorCosta Tsaousis (ktsaou) <costa@tsaousis.gr>
Thu, 3 Nov 2016 22:01:58 +0000 (00:01 +0200)
committerCosta Tsaousis (ktsaou) <costa@tsaousis.gr>
Thu, 3 Nov 2016 22:01:58 +0000 (00:01 +0200)
src/daemon.c
src/main.c

index 5bf6a1e0a0fffddcb69c669fce54ea9761c041c7..09b4147b9064d619093cfedf3621b68e24d14511 100644 (file)
@@ -58,6 +58,15 @@ static void chown_open_file(int fd, uid_t uid, gid_t gid) {
     }
 }
 
+void create_needed_dir(const char *dir, uid_t uid, gid_t gid)
+{
+    if(mkdir(dir, 0755) == -1 && errno != EEXIST)
+        error("Cannot create directory '%s'", dir);
+
+    if(chown(dir, uid, gid) == -1)
+        error("Cannot chown directory '%s' to %u:%u", dir, (unsigned int)uid, (unsigned int)gid);
+}
+
 int become_user(const char *username, int pid_fd)
 {
     struct passwd *pw = getpwnam(username);
@@ -69,6 +78,9 @@ int become_user(const char *username, int pid_fd)
     uid_t uid = pw->pw_uid;
     gid_t gid = pw->pw_gid;
 
+    create_needed_dir(CACHE_DIR, uid, gid);
+    create_needed_dir(VARLIB_DIR, uid, gid);
+
     int ngroups = (int)sysconf(_SC_NGROUPS_MAX);
     gid_t *supplementary_groups = NULL;
     if(ngroups) {
@@ -223,6 +235,10 @@ int become_daemon(int dont_fork, const char *user)
         }
         else debug(D_SYSTEM, "Successfully became user '%s'.", user);
     }
+    else {
+        create_needed_dir(CACHE_DIR, getuid(), getgid());
+        create_needed_dir(VARLIB_DIR, getuid(), getgid());
+    }
 
     if(pidfd != -1) {
         close(pidfd);
index 1a81993873f9092590cc2c38ba6b73f8182d5a4c..695c98e3e84ff323a446346c692d3d538fcb7145 100644 (file)
@@ -643,7 +643,7 @@ int main(int argc, char **argv)
 
     // fork, switch user, create pid file, set process priority
     if(become_daemon(dont_fork, user) == -1)
-        fatal("Cannot demonize myself.");
+        fatal("Cannot daemonize myself.");
 
     info("NetData started on pid %d", getpid());