From 791c3de84c49396b153feafef5af1edd9a0a5f39 Mon Sep 17 00:00:00 2001 From: Erik Ekman Date: Sat, 12 Jul 2008 11:41:01 +0000 Subject: [PATCH] reapplied maxims patches --- src/common.c | 17 +++++++++++++++++ src/common.h | 2 ++ src/iodine.c | 9 +++++++-- src/iodined.c | 25 ++++++++++++++++++------- 4 files changed, 44 insertions(+), 9 deletions(-) diff --git a/src/common.c b/src/common.c index 73cf24d..52f917f 100644 --- a/src/common.c +++ b/src/common.c @@ -111,3 +111,20 @@ read_password(char *buf, size_t len) strncpy(buf, pwd, len); buf[len-1] = '\0'; } + +int +check_topdomain(char *str) +{ + int i; + + if(str[0] == '.') /* special case */ + return 1; + + for( i = 0; i < strlen(str); i++) { + if( isalpha(str[i]) || isdigit(str[i]) || str[i] == '-' || str[i] == '.' ) + continue; + else + return 1; + } + return 0; +} diff --git a/src/common.h b/src/common.h index 811aa40..255ff24 100644 --- a/src/common.h +++ b/src/common.h @@ -54,4 +54,6 @@ void do_detach(); void read_password(char*, size_t); +int check_topdomain(char *); + #endif diff --git a/src/iodine.c b/src/iodine.c index dbf760c..1132e44 100644 --- a/src/iodine.c +++ b/src/iodine.c @@ -690,8 +690,13 @@ main(int argc, char **argv) set_nameserver(nameserv_addr); - if (strlen(topdomain) > 128 || topdomain[0] == '.') { - warnx("Use a topdomain max 128 chars long. Do not start it with a dot.\n"); + if(strlen(topdomain) <= 128) { + if(check_topdomain(topdomain)) { + warnx("Topdomain contains invalid characters.\n"); + usage(); + } + } else { + warnx("Use a topdomain max 128 chars long.\n"); usage(); } diff --git a/src/iodined.c b/src/iodined.c index 4adc82e..7f8cb77 100644 --- a/src/iodined.c +++ b/src/iodined.c @@ -490,10 +490,6 @@ main(int argc, char **argv) break; case 'p': port = atoi(optarg); - if (port) { - printf("ALERT! Other dns servers expect you to run on port 53.\n"); - printf("You must manually forward port 53 to port %d for things to work.\n", port); - } break; case 'P': strncpy(password, optarg, sizeof(password)); @@ -520,8 +516,13 @@ main(int argc, char **argv) usage(); topdomain = strdup(argv[1]); - if (strlen(topdomain) > 128 || topdomain[0] == '.') { - warnx("Use a topdomain max 128 chars long. Do not start it with a dot.\n"); + if(strlen(topdomain) <= 128) { + if(check_topdomain(topdomain)) { + warnx("Topdomain contains invalid characters.\n"); + usage(); + } + } else { + warnx("Use a topdomain max 128 chars long.\n"); usage(); } @@ -532,10 +533,20 @@ main(int argc, char **argv) } } - if (mtu == 0) { + if (mtu <= 0) { warnx("Bad MTU given.\n"); usage(); } + + if(port < 1 || port > 65535) { + warnx("Bad port number given.\n"); + usage(); + } + + if (port != 53) { + printf("ALERT! Other dns servers expect you to run on port 53.\n"); + printf("You must manually forward port 53 to port %d for things to work.\n", port); + } if (listen_ip == INADDR_NONE) { warnx("Bad IP address to listen on.\n");