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