X-Git-Url: https://git.librecmc.org/?p=oweals%2Ftinc.git;a=blobdiff_plain;f=src%2Ftincd.c;h=d15d2ffaf5bfcd8b72a0973b40f0eb8c1037c08e;hp=7416d11bb0c25d1b9edbfa7722125a2d84a1078b;hb=e913f3f232e4809b7218d081ab9f94cef1c94ac3;hpb=8d64561dbc0542e7e1185591b8ecde3e56e1bfca diff --git a/src/tincd.c b/src/tincd.c index 7416d11..d15d2ff 100644 --- a/src/tincd.c +++ b/src/tincd.c @@ -162,6 +162,11 @@ static bool parse_options(int argc, char **argv) { break; case 'c': /* config file */ + if(confbase) { + fprintf(stderr, "Only one configuration directory can be given.\n"); + usage(true); + return false; + } confbase = xstrdup(optarg); break; @@ -229,6 +234,11 @@ static bool parse_options(int argc, char **argv) { case 'n': /* net name given */ /* netname "." is special: a "top-level name" */ + if(netname) { + fprintf(stderr, "Only one netname can be given.\n"); + usage(true); + return false; + } netname = strcmp(optarg, ".") != 0 ? xstrdup(optarg) : NULL; break; @@ -281,11 +291,22 @@ static bool parse_options(int argc, char **argv) { use_logfile = true; if(!optarg && optind < argc && *argv[optind] != '-') optarg = argv[optind++]; - if(optarg) + if(optarg) { + if(logfilename) { + fprintf(stderr, "Only one logfile can be given.\n"); + usage(true); + return false; + } logfilename = xstrdup(optarg); + } break; case 5: /* write PID to a file */ + if(pidfilename) { + fprintf(stderr, "Only one pidfile can be given.\n"); + usage(true); + return false; + } pidfilename = xstrdup(optarg); break; @@ -350,7 +371,6 @@ static void indicator(int a, int b, void *p) { static bool keygen(int bits) { RSA *rsa_key; FILE *f; - char *name = get_name(); char *pubname, *privname; fprintf(stderr, "Generating %d bits keys:\n", bits); @@ -378,10 +398,14 @@ static bool keygen(int bits) { PEM_write_RSAPrivateKey(f, rsa_key, NULL, NULL, 0, NULL, NULL); fclose(f); - if(name) + char *name = get_name(); + + if(name) { xasprintf(&pubname, "%s/hosts/%s", confbase, name); - else + free(name); + } else { xasprintf(&pubname, "%s/rsa_key.pub", confbase); + } f = ask_and_open(pubname, "public RSA key"); free(pubname); @@ -392,7 +416,6 @@ static bool keygen(int bits) { fputc('\n', f); PEM_write_RSAPublicKey(f, rsa_key); fclose(f); - free(name); return true; }