about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--btpd/main.c16
1 files changed, 13 insertions, 3 deletions
diff --git a/btpd/main.c b/btpd/main.c
index 42df946..65b0662 100644
--- a/btpd/main.c
+++ b/btpd/main.c
@@ -31,11 +31,14 @@ setup_daemon(int daemonize, const char *dir, const char *log)
     if (log == NULL)
         log = "log";
 
-    if (dir == NULL)
+    if (dir == NULL) {
         if ((dir = find_btpd_dir()) == NULL)
             errx(1, "Cannot find the btpd directory");
-
-    btpd_dir = dir;
+        else if (dir[0] != '/')
+            errx(1, "got non absolute path '%s' from system environment.",
+                dir);
+        btpd_dir = dir;
+    }
 
     if (mkdir(dir, 0777) == -1 && errno != EEXIST)
         err(1, "Couldn't create home '%s'", dir);
@@ -52,6 +55,13 @@ setup_daemon(int daemonize, const char *dir, const char *log)
     if (flock(pidfd, LOCK_NB|LOCK_EX) == -1)
         errx(1, "Another instance of btpd is probably running in %s.", dir);
 
+    if (btpd_dir == NULL) {
+        char wd[PATH_MAX];
+        if (getcwd(wd, PATH_MAX) == NULL)
+            err(1, "couldn't get working directory");
+        btpd_dir = strdup(wd);
+    }
+
     if (daemonize) {
         if (daemon(1, 1) != 0)
             err(1, "Failed to daemonize");