Fix check for LOCALSTATEDIR accessibility for the CLI.
[tinc] / src / names.c
index 6e52886..d8935ba 100644 (file)
@@ -36,7 +36,7 @@ char *program_name = NULL;
 /*
   Set all files and paths according to netname
 */
-void make_names(void) {
+void make_names(bool daemon) {
 #ifdef HAVE_MINGW
        HKEY key;
        char installdir[1024] = "";
@@ -85,7 +85,21 @@ void make_names(void) {
        if(!pidfilename)
                xasprintf(&pidfilename, "%s" SLASH "pid", confbase);
 #else
-       if(!access(LOCALSTATEDIR, R_OK | W_OK | X_OK)) {
+       bool fallback = false;
+       if(daemon) {
+               if(access(LOCALSTATEDIR, R_OK | W_OK | X_OK))
+                       fallback = true;
+       } else {
+               char fname[PATH_MAX];
+               snprintf(fname, sizeof fname, LOCALSTATEDIR SLASH "run" SLASH "%s.pid", identname);
+               if(access(fname, R_OK)) {
+                       snprintf(fname, sizeof fname, "%s" SLASH "pid", confbase);
+                       if(!access(fname, R_OK))
+                               fallback = true;
+               }
+       }
+
+       if(!fallback) {
                if(!logfilename)
                        xasprintf(&logfilename, LOCALSTATEDIR SLASH "log" SLASH "%s.log", identname);
 
@@ -96,7 +110,8 @@ void make_names(void) {
                        xasprintf(&logfilename, "%s" SLASH "log", confbase);
 
                if(!pidfilename) {
-                       logger(DEBUG_ALWAYS, LOG_WARNING, "Could not access " LOCALSTATEDIR SLASH " (%s), storing pid and socket files in %s" SLASH, strerror(errno), confbase);
+                       if(daemon)
+                               logger(DEBUG_ALWAYS, LOG_WARNING, "Could not access " LOCALSTATEDIR SLASH " (%s), storing pid and socket files in %s" SLASH, strerror(errno), confbase);
                        xasprintf(&pidfilename, "%s" SLASH "pid", confbase);
                }
        }