diff --git a/src/invitation.c b/src/invitation.c index 6ccfc1f4..59bcf456 100644 --- a/src/invitation.c +++ b/src/invitation.c @@ -823,7 +823,7 @@ int cmd_join(int argc, char *argv[]) { } // Make sure confbase exists and is accessible. - if(strcmp(confdir, confbase) && mkdir(confdir, 0755) && errno != EEXIST) { + if(!confbase_given && mkdir(confdir, 0755) && errno != EEXIST) { fprintf(stderr, "Could not create directory %s: %s\n", confdir, strerror(errno)); return 1; } diff --git a/src/names.c b/src/names.c index a631ad97..37708f81 100644 --- a/src/names.c +++ b/src/names.c @@ -26,6 +26,7 @@ char *netname = NULL; char *confdir = NULL; /* base configuration directory */ char *confbase = NULL; /* base configuration directory for this instance of tinc */ +bool confbase_given; char *identname = NULL; /* program name for syslog */ char *unixsocketname = NULL; /* UNIX socket location */ char *logfilename = NULL; /* log file location */ @@ -41,6 +42,7 @@ void make_names(void) { char installdir[1024] = ""; DWORD len = sizeof installdir; #endif + confbase_given = confbase; if(netname && confbase) logger(DEBUG_ALWAYS, LOG_INFO, "Both netname and configuration directory given, using the latter..."); diff --git a/src/names.h b/src/names.h index 6f43a2c8..1163ff6e 100644 --- a/src/names.h +++ b/src/names.h @@ -23,6 +23,7 @@ extern char *confdir; extern char *confbase; +extern bool confbase_given; extern char *netname; extern char *identname; extern char *unixsocketname; diff --git a/src/tincctl.c b/src/tincctl.c index a6673901..a986af76 100644 --- a/src/tincctl.c +++ b/src/tincctl.c @@ -1739,7 +1739,7 @@ static int cmd_init(int argc, char *argv[]) { return 1; } - if(strcmp(confdir, confbase) && mkdir(confdir, 0755) && errno != EEXIST) { + if(!confbase_given && mkdir(confdir, 0755) && errno != EEXIST) { fprintf(stderr, "Could not create directory %s: %s\n", confdir, strerror(errno)); return 1; }