Merge branch 'master' into 1.1
[tinc] / src / tincd.c
index 85aee39..fc92f0b 100644 (file)
@@ -231,11 +231,16 @@ static bool parse_options(int argc, char **argv) {
 
        /* netname "." is special: a "top-level name" */
 
-       if(!strcmp(netname, ".")) {
+       if(netname && (!*netname || !strcmp(netname, "."))) {
                free(netname);
                netname = NULL;
        }
 
+       if(netname && (strpbrk(netname, "\\/") || *netname == '.')) {
+               fprintf(stderr, "Invalid character in netname!\n");
+               return false;
+       }
+
        return true;
 }
 
@@ -258,15 +263,15 @@ static void make_names(void) {
        if(!RegOpenKeyEx(HKEY_LOCAL_MACHINE, "SOFTWARE\\tinc", 0, KEY_READ, &key)) {
                if(!RegQueryValueEx(key, NULL, 0, 0, installdir, &len)) {
                        if(!logfilename)
-                               xasprintf(&logfilename, "%s/log/%s.log", identname);
+                               xasprintf(&logfilename, "%s" SLASH "log" SLASH "%s.log", identname);
                        if(!confbase) {
                                if(netname)
-                                       xasprintf(&confbase, "%s/%s", installdir, netname);
+                                       xasprintf(&confbase, "%s" SLASH "%s", installdir, netname);
                                else
                                        xasprintf(&confbase, "%s", installdir);
                        }
                        if(!pidfilename)
-                               xasprintf(&pidfilename, "%s/pid", confbase);
+                               xasprintf(&pidfilename, "%s" SLASH "pid", confbase);
                }
                RegCloseKey(key);
                if(*installdir)
@@ -275,19 +280,19 @@ static void make_names(void) {
 #endif
 
        if(!logfilename)
-               xasprintf(&logfilename, LOCALSTATEDIR "/log/%s.log", identname);
+               xasprintf(&logfilename, LOCALSTATEDIR SLASH "log" SLASH "%s.log", identname);
 
        if(!pidfilename)
-               xasprintf(&pidfilename, LOCALSTATEDIR "/run/%s.pid", identname);
+               xasprintf(&pidfilename, LOCALSTATEDIR SLASH "run" SLASH "%s.pid", identname);
 
        if(netname) {
                if(!confbase)
-                       xasprintf(&confbase, CONFDIR "/tinc/%s", netname);
+                       xasprintf(&confbase, CONFDIR SLASH "tinc" SLASH "%s", netname);
                else
                        logger(DEBUG_ALWAYS, LOG_INFO, "Both netname and configuration directory given, using the latter...");
        } else {
                if(!confbase)
-                       xasprintf(&confbase, CONFDIR "/tinc");
+                       xasprintf(&confbase, CONFDIR SLASH "tinc");
        }
 }
 
@@ -324,8 +329,11 @@ static bool drop_privs(void) {
                               "initgroups", strerror(errno));
                        return false;
                }
+#ifndef __ANDROID__
+// Not supported in android NDK
                endgrent();
                endpwent();
+#endif
        }
        if (do_chroot) {
                tzset();        /* for proper timestamps in logs */