X-Git-Url: https://www.tinc-vpn.org/git/browse?a=blobdiff_plain;f=src%2Ftincctl.c;h=946e7498e6fbf3d53e7490b60c3328c9f7409ace;hb=cfc9fee931c70554353ce6c4acc3407baac08745;hp=215d757c686f136f57d660ab3128ba6f8d848f9a;hpb=28b7a53b693f6b4e70218a926e68a36ece54cda1;p=tinc diff --git a/src/tincctl.c b/src/tincctl.c index 215d757c..946e7498 100644 --- a/src/tincctl.c +++ b/src/tincctl.c @@ -19,8 +19,6 @@ #include "system.h" -#include - #ifdef HAVE_READLINE #include "readline/readline.h" #include "readline/history.h" @@ -1244,7 +1242,6 @@ static int cmd_dump(int argc, char *argv[]) { int cipher, digest, maclength, compression, distance, socket, weight; short int pmtu, minmtu, maxmtu; unsigned int options; - uint32_t status_int; node_status_t status; long int last_state_change; int udp_ping_rtt; @@ -1252,15 +1249,13 @@ static int cmd_dump(int argc, char *argv[]) { switch(req) { case REQ_DUMP_NODES: { - int n = sscanf(line, "%*d %*d %4095s %4095s %4095s port %4095s %d %d %d %d %x %"PRIx32" %4095s %4095s %d %hd %hd %hd %ld %d %"PRIu64" %"PRIu64" %"PRIu64" %"PRIu64, node, id, host, port, &cipher, &digest, &maclength, &compression, &options, &status_int, nexthop, via, &distance, &pmtu, &minmtu, &maxmtu, &last_state_change, &udp_ping_rtt, &in_packets, &in_bytes, &out_packets, &out_bytes); + int n = sscanf(line, "%*d %*d %4095s %4095s %4095s port %4095s %d %d %d %d %x %"PRIx32" %4095s %4095s %d %hd %hd %hd %ld %d %"PRIu64" %"PRIu64" %"PRIu64" %"PRIu64, node, id, host, port, &cipher, &digest, &maclength, &compression, &options, &status.value, nexthop, via, &distance, &pmtu, &minmtu, &maxmtu, &last_state_change, &udp_ping_rtt, &in_packets, &in_bytes, &out_packets, &out_bytes); if(n != 22) { fprintf(stderr, "Unable to parse node dump from tincd: %s\n", line); return 1; } - memcpy(&status, &status_int, sizeof(status)); - if(do_graph) { const char *color = "black"; @@ -1283,7 +1278,7 @@ static int cmd_dump(int argc, char *argv[]) { } printf("%s id %s at %s port %s cipher %d digest %d maclength %d compression %d options %x status %04x nexthop %s via %s distance %d pmtu %d (min %d max %d) rx %"PRIu64" %"PRIu64" tx %"PRIu64" %"PRIu64, - node, id, host, port, cipher, digest, maclength, compression, options, status_int, nexthop, via, distance, pmtu, minmtu, maxmtu, in_packets, in_bytes, out_packets, out_bytes); + node, id, host, port, cipher, digest, maclength, compression, options, status.value, nexthop, via, distance, pmtu, minmtu, maxmtu, in_packets, in_bytes, out_packets, out_bytes); if(udp_ping_rtt != -1) { printf(" rtt %d.%03d", udp_ping_rtt / 1000, udp_ping_rtt % 1000); @@ -1329,14 +1324,14 @@ static int cmd_dump(int argc, char *argv[]) { break; case REQ_DUMP_CONNECTIONS: { - int n = sscanf(line, "%*d %*d %4095s %4095s port %4095s %x %d %x", node, host, port, &options, &socket, &status_int); + int n = sscanf(line, "%*d %*d %4095s %4095s port %4095s %x %d %x", node, host, port, &options, &socket, &status.value); if(n != 6) { fprintf(stderr, "Unable to parse connection dump from tincd.\n"); return 1; } - printf("%s at %s port %s options %x socket %d status %x\n", node, host, port, options, socket, status_int); + printf("%s at %s port %s options %x socket %d status %x\n", node, host, port, options, socket, status.value); } break; @@ -1897,7 +1892,11 @@ static int cmd_config(int argc, char *argv[]) { char filename[PATH_MAX]; if(node) { - snprintf(filename, sizeof(filename), "%s" SLASH "%s", hosts_dir, node); + if((size_t)snprintf(filename, sizeof(filename), "%s" SLASH "%s", hosts_dir, node) >= sizeof(filename)) { + fprintf(stderr, "Filename too long: %s" SLASH "%s\n", hosts_dir, node); + free(node); + return 1; + } if(node != line) { free(node);