Use stack-allocated strings for temporary filenames.
authorGuus Sliepen <guus@tinc-vpn.org>
Fri, 6 Oct 2017 19:39:24 +0000 (21:39 +0200)
committerGuus Sliepen <guus@tinc-vpn.org>
Fri, 6 Oct 2017 19:39:24 +0000 (21:39 +0200)
src/conf.c
src/tincd.c

index 997a05e..2e13e45 100644 (file)
@@ -487,6 +487,7 @@ FILE *ask_and_open(const char *filename, const char *what) {
        FILE *r;
        char *directory;
        char line[PATH_MAX];
        FILE *r;
        char *directory;
        char line[PATH_MAX];
+       char abspath[PATH_MAX];
        const char *fn;
 
        /* Check stdin and stdout */
        const char *fn;
 
        /* Check stdin and stdout */
@@ -520,12 +521,10 @@ FILE *ask_and_open(const char *filename, const char *what) {
        if(fn[0] != '/') {
 #endif
                /* The directory is a relative path or a filename. */
        if(fn[0] != '/') {
 #endif
                /* The directory is a relative path or a filename. */
-               char *p;
-
                directory = get_current_dir_name();
                directory = get_current_dir_name();
-               xasprintf(&p, "%s/%s", directory, fn);
+               snprintf(abspath, sizeof abspath, "%s/%s", directory, fn);
                free(directory);
                free(directory);
-               fn = p;
+               fn = abspath;
        }
 
        umask(0077);                            /* Disallow everything for group and other */
        }
 
        umask(0077);                            /* Disallow everything for group and other */
index 22fb726..84ce0d4 100644 (file)
@@ -390,7 +390,7 @@ static bool keygen(int bits) {
        BIGNUM *e = NULL;
        RSA *rsa_key;
        FILE *f;
        BIGNUM *e = NULL;
        RSA *rsa_key;
        FILE *f;
-       char *pubname, *privname;
+       char filename[PATH_MAX];
        BN_GENCB *cb;
        int result;
 
        BN_GENCB *cb;
        int result;
 
@@ -417,9 +417,8 @@ static bool keygen(int bits) {
        } else
                fprintf(stderr, "Done.\n");
 
        } else
                fprintf(stderr, "Done.\n");
 
-       xasprintf(&privname, "%s/rsa_key.priv", confbase);
-       f = ask_and_open(privname, "private RSA key");
-       free(privname);
+       snprintf(filename, sizeof filename, "%s/rsa_key.priv", confbase);
+       f = ask_and_open(filename, "private RSA key");
 
        if(!f)
                return false;
 
        if(!f)
                return false;
@@ -436,14 +435,13 @@ static bool keygen(int bits) {
        char *name = get_name();
 
        if(name) {
        char *name = get_name();
 
        if(name) {
-               xasprintf(&pubname, "%s/hosts/%s", confbase, name);
+               snprintf(filename, sizeof filename, "%s/hosts/%s", confbase, name);
                free(name);
        } else {
                free(name);
        } else {
-               xasprintf(&pubname, "%s/rsa_key.pub", confbase);
+               snprintf(filename, sizeof filename, "%s/rsa_key.pub", confbase);
        }
 
        }
 
-       f = ask_and_open(pubname, "public RSA key");
-       free(pubname);
+       f = ask_and_open(filename, "public RSA key");
 
        if(!f)
                return false;
 
        if(!f)
                return false;