diff options
Diffstat (limited to 'iptables/xtables-restore.c')
-rw-r--r-- | iptables/xtables-restore.c | 35 |
1 files changed, 4 insertions, 31 deletions
diff --git a/iptables/xtables-restore.c b/iptables/xtables-restore.c index 24bfce51..4652d631 100644 --- a/iptables/xtables-restore.c +++ b/iptables/xtables-restore.c @@ -230,47 +230,20 @@ void xtables_restore_parse(struct nft_handle *h, int a; char *pcnt = NULL; char *bcnt = NULL; - char *parsestart; + char *parsestart = buffer; /* reset the newargv */ newargc = 0; - if (buffer[0] == '[') { - /* we have counters in our input */ - char *ptr = strchr(buffer, ']'); - - if (!ptr) - xtables_error(PARAMETER_PROBLEM, - "Bad line %u: need ]\n", - line); - - pcnt = strtok(buffer+1, ":"); - if (!pcnt) - xtables_error(PARAMETER_PROBLEM, - "Bad line %u: need :\n", - line); - - bcnt = strtok(NULL, "]"); - if (!bcnt) - xtables_error(PARAMETER_PROBLEM, - "Bad line %u: need ]\n", - line); - - /* start command parsing after counter */ - parsestart = ptr + 1; - } else { - /* start command parsing at start of line */ - parsestart = buffer; - } - add_argv(xt_params->program_name, 0); add_argv("-t", 0); add_argv(curtable->name, 0); + tokenize_rule_counters(&parsestart, &pcnt, &bcnt, line); if (counters && pcnt && bcnt) { add_argv("--set-counters", 0); - add_argv((char *) pcnt, 0); - add_argv((char *) bcnt, 0); + add_argv(pcnt, 0); + add_argv(bcnt, 0); } add_param_to_argv(parsestart, line); |