diff options
author | Lorenzo Colitti <lorenzo@google.com> | 2017-03-16 16:55:01 +0900 |
---|---|---|
committer | Pablo Neira Ayuso <pablo@netfilter.org> | 2017-03-17 14:20:46 +0100 |
commit | 6e2e169eb66b63d2991e1c7ada931e3cdb0ced32 (patch) | |
tree | 2d30c42e08c94f7681a88d316fdbba9a1ed24dbc /iptables/ip6tables.c | |
parent | 836846f0d747e1be8e37d2d43b215a68b30ea1a9 (diff) |
iptables: remove duplicated argument parsing code
1. Factor out repeated code to a new xs_has_arg function.
2. Add a new parse_wait_time option to parse the value of -w.
3. Make parse_wait_interval take argc and argv so its callers
can be simpler.
Signed-off-by: Lorenzo Colitti <lorenzo@google.com>
Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
Diffstat (limited to 'iptables/ip6tables.c')
-rw-r--r-- | iptables/ip6tables.c | 62 |
1 files changed, 16 insertions, 46 deletions
diff --git a/iptables/ip6tables.c b/iptables/ip6tables.c index 0bd415de..4d77721b 100644 --- a/iptables/ip6tables.c +++ b/iptables/ip6tables.c @@ -1400,8 +1400,7 @@ int do_command6(int argc, char *argv[], char **table, add_command(&command, CMD_DELETE, CMD_NONE, cs.invert); chain = optarg; - if (optind < argc && argv[optind][0] != '-' - && argv[optind][0] != '!') { + if (xs_has_arg(argc, argv)) { rulenum = parse_rulenumber(argv[optind++]); command = CMD_DELETE_NUM; } @@ -1411,8 +1410,7 @@ int do_command6(int argc, char *argv[], char **table, add_command(&command, CMD_REPLACE, CMD_NONE, cs.invert); chain = optarg; - if (optind < argc && argv[optind][0] != '-' - && argv[optind][0] != '!') + if (xs_has_arg(argc, argv)) rulenum = parse_rulenumber(argv[optind++]); else xtables_error(PARAMETER_PROBLEM, @@ -1424,8 +1422,7 @@ int do_command6(int argc, char *argv[], char **table, add_command(&command, CMD_INSERT, CMD_NONE, cs.invert); chain = optarg; - if (optind < argc && argv[optind][0] != '-' - && argv[optind][0] != '!') + if (xs_has_arg(argc, argv)) rulenum = parse_rulenumber(argv[optind++]); else rulenum = 1; break; @@ -1434,11 +1431,9 @@ int do_command6(int argc, char *argv[], char **table, add_command(&command, CMD_LIST, CMD_ZERO | CMD_ZERO_NUM, cs.invert); if (optarg) chain = optarg; - else if (optind < argc && argv[optind][0] != '-' - && argv[optind][0] != '!') + else if (xs_has_arg(argc, argv)) chain = argv[optind++]; - if (optind < argc && argv[optind][0] != '-' - && argv[optind][0] != '!') + if (xs_has_arg(argc, argv)) rulenum = parse_rulenumber(argv[optind++]); break; @@ -1446,11 +1441,9 @@ int do_command6(int argc, char *argv[], char **table, add_command(&command, CMD_LIST_RULES, CMD_ZERO | CMD_ZERO_NUM, cs.invert); if (optarg) chain = optarg; - else if (optind < argc && argv[optind][0] != '-' - && argv[optind][0] != '!') + else if (xs_has_arg(argc, argv)) chain = argv[optind++]; - if (optind < argc && argv[optind][0] != '-' - && argv[optind][0] != '!') + if (xs_has_arg(argc, argv)) rulenum = parse_rulenumber(argv[optind++]); break; @@ -1458,8 +1451,7 @@ int do_command6(int argc, char *argv[], char **table, add_command(&command, CMD_FLUSH, CMD_NONE, cs.invert); if (optarg) chain = optarg; - else if (optind < argc && argv[optind][0] != '-' - && argv[optind][0] != '!') + else if (xs_has_arg(argc, argv)) chain = argv[optind++]; break; @@ -1467,11 +1459,9 @@ int do_command6(int argc, char *argv[], char **table, add_command(&command, CMD_ZERO, CMD_LIST|CMD_LIST_RULES, cs.invert); if (optarg) chain = optarg; - else if (optind < argc && argv[optind][0] != '-' - && argv[optind][0] != '!') + else if (xs_has_arg(argc, argv)) chain = argv[optind++]; - if (optind < argc && argv[optind][0] != '-' - && argv[optind][0] != '!') { + if (xs_has_arg(argc, argv)) { rulenum = parse_rulenumber(argv[optind++]); command = CMD_ZERO_NUM; } @@ -1488,8 +1478,7 @@ int do_command6(int argc, char *argv[], char **table, add_command(&command, CMD_DELETE_CHAIN, CMD_NONE, cs.invert); if (optarg) chain = optarg; - else if (optind < argc && argv[optind][0] != '-' - && argv[optind][0] != '!') + else if (xs_has_arg(argc, argv)) chain = argv[optind++]; break; @@ -1497,8 +1486,7 @@ int do_command6(int argc, char *argv[], char **table, add_command(&command, CMD_RENAME_CHAIN, CMD_NONE, cs.invert); chain = optarg; - if (optind < argc && argv[optind][0] != '-' - && argv[optind][0] != '!') + if (xs_has_arg(argc, argv)) newname = argv[optind++]; else xtables_error(PARAMETER_PROBLEM, @@ -1511,8 +1499,7 @@ int do_command6(int argc, char *argv[], char **table, add_command(&command, CMD_SET_POLICY, CMD_NONE, cs.invert); chain = optarg; - if (optind < argc && argv[optind][0] != '-' - && argv[optind][0] != '!') + if (xs_has_arg(argc, argv)) policy = argv[optind++]; else xtables_error(PARAMETER_PROBLEM, @@ -1622,16 +1609,7 @@ int do_command6(int argc, char *argv[], char **table, "You cannot use `-w' from " "ip6tables-restore"); } - wait = -1; - if (optarg) { - if (sscanf(optarg, "%i", &wait) != 1) - xtables_error(PARAMETER_PROBLEM, - "wait seconds not numeric"); - } else if (optind < argc && argv[optind][0] != '-' - && argv[optind][0] != '!') - if (sscanf(argv[optind++], "%i", &wait) != 1) - xtables_error(PARAMETER_PROBLEM, - "wait seconds not numeric"); + wait = parse_wait_time(argc, argv); break; case 'W': @@ -1640,14 +1618,7 @@ int do_command6(int argc, char *argv[], char **table, "You cannot use `-W' from " "ip6tables-restore"); } - if (optarg) - parse_wait_interval(optarg, &wait_interval); - else if (optind < argc && - argv[optind][0] != '-' && - argv[optind][0] != '!') - parse_wait_interval(argv[optind++], - &wait_interval); - + parse_wait_interval(argc, argv, &wait_interval); wait_interval_set = true; break; @@ -1697,8 +1668,7 @@ int do_command6(int argc, char *argv[], char **table, bcnt = strchr(pcnt + 1, ','); if (bcnt) bcnt++; - if (!bcnt && optind < argc && argv[optind][0] != '-' - && argv[optind][0] != '!') + if (!bcnt && xs_has_arg(argc, argv)) bcnt = argv[optind++]; if (!bcnt) xtables_error(PARAMETER_PROBLEM, |