ipaccess-proxy: more robust option parsing and checking

With this patch, ipaccess-proxy makes more robust option checking:

$ ./ipaccess-proxy -l 1.1.1.1 -b 2.2.2.2 -e
ERROR: missing mandatory argument for `-e' option

And we return to shell to enforce the user to try again with the
appropriate invocation.

Before this patch, the default getopt_long() error handling was
enabled which displayed this message:

./ipaccess-proxy: option requires an argument -- 'e'

and ipaccess-proxy continued working.

This is generic enough to cover other option that require mandatory
arguments like `--bsc' and `--listen'.
This commit is contained in:
Pablo Neira Ayuso 2011-04-11 16:33:03 +02:00 committed by Harald Welte
parent 23b1b808f1
commit 25ffe54118
1 changed files with 15 additions and 0 deletions

View File

@ -1133,6 +1133,9 @@ static void handle_options(int argc, char** argv)
{
int options_mask = 0;
/* disable explicit missing arguments error output from getopt_long */
opterr = 0;
while (1) {
int option_index = 0, c;
static struct option long_options[] = {
@ -1176,6 +1179,18 @@ static void handle_options(int argc, char** argv)
case 'e':
log_set_log_level(stderr_target, atoi(optarg));
break;
case '?':
if (optopt) {
printf("ERROR: missing mandatory argument "
"for `%s' option\n", argv[optind-1]);
} else {
printf("ERROR: unknown option `%s'\n",
argv[optind-1]);
}
print_usage();
print_help();
exit(EXIT_FAILURE);
break;
default:
/* ignore */
break;