Fix segfault when Name = $HOST but $HOST is not set.
authorGuus Sliepen <guus@tinc-vpn.org>
Fri, 27 Sep 2013 07:43:39 +0000 (09:43 +0200)
committerGuus Sliepen <guus@tinc-vpn.org>
Fri, 27 Sep 2013 07:43:39 +0000 (09:43 +0200)
src/net_setup.c

index 623ac38..e1d9f27 100644 (file)
@@ -295,17 +295,18 @@ char *get_name(void) {
 
        if(*name == '$') {
                char *envname = getenv(name + 1);
 
        if(*name == '$') {
                char *envname = getenv(name + 1);
+               char hostname[32] = "";
                if(!envname) {
                        if(strcmp(name + 1, "HOST")) {
                                fprintf(stderr, "Invalid Name: environment variable %s does not exist\n", name + 1);
                                return false;
                        }
                if(!envname) {
                        if(strcmp(name + 1, "HOST")) {
                                fprintf(stderr, "Invalid Name: environment variable %s does not exist\n", name + 1);
                                return false;
                        }
-                       char envname[32];
-                       if(gethostname(envname, 32)) {
+                       if(gethostname(hostname, sizeof hostname) || !*hostname) {
                                fprintf(stderr, "Could not get hostname: %s\n", strerror(errno));
                                return false;
                        }
                                fprintf(stderr, "Could not get hostname: %s\n", strerror(errno));
                                return false;
                        }
-                       envname[31] = 0;
+                       hostname[31] = 0;
+                       envname = hostname;
                }
                free(name);
                name = xstrdup(envname);
                }
                free(name);
                name = xstrdup(envname);