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;
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;
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;
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);
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);
fputc('\n', f);
PEM_write_RSAPublicKey(f, rsa_key);
fclose(f);
- free(name);
return true;
}