From 51a0dc51451897cc0290d5040e42616dda9bdc8a Mon Sep 17 00:00:00 2001 From: Guus Sliepen Date: Sun, 17 Apr 2016 18:11:04 +0200 Subject: [PATCH] Fix the "network" command in tinc shell. --- src/names.c | 8 ++++++++ src/tincctl.c | 25 ++++++++++++++----------- 2 files changed, 22 insertions(+), 11 deletions(-) diff --git a/src/names.c b/src/names.c index a640fe48..6c518f26 100644 --- a/src/names.c +++ b/src/names.c @@ -137,4 +137,12 @@ void free_names(void) { free(logfilename); free(confbase); free(confdir); + + identname = NULL; + netname = NULL; + unixsocketname = NULL; + pidfilename = NULL; + logfilename = NULL; + confbase = NULL; + confdir = NULL; } diff --git a/src/tincctl.c b/src/tincctl.c index 9687ba4b..4231cce3 100644 --- a/src/tincctl.c +++ b/src/tincctl.c @@ -2284,26 +2284,29 @@ static int cmd_exchange_all(int argc, char *argv[]) { } static int switch_network(char *name) { + if(strcmp(name, ".")) { + if(!check_netname(name, false)) { + fprintf(stderr, "Invalid character in netname!\n"); + return 1; + } + + if(!check_netname(name, true)) + fprintf(stderr, "Warning: unsafe character in netname!\n"); + } + if(fd >= 0) { close(fd); fd = -1; } - free(confbase); - confbase = NULL; - free(pidfilename); - pidfilename = NULL; - free(logfilename); - logfilename = NULL; - free(unixsocketname); - unixsocketname = NULL; + free_names(); + netname = strcmp(name, ".") ? xstrdup(name) : NULL; + make_names(false); + free(tinc_conf); free(hosts_dir); free(prompt); - free(netname); - netname = strcmp(name, ".") ? xstrdup(name) : NULL; - xasprintf(&tinc_conf, "%s" SLASH "tinc.conf", confbase); xasprintf(&hosts_dir, "%s" SLASH "hosts", confbase); xasprintf(&prompt, "%s> ", identname); -- 2.20.1