From 3c649fd63ecf9cfbb77df3c2e427e1ef87da6007 Mon Sep 17 00:00:00 2001 From: "/C=EU/ST=EU/CN=Pablo Neira Ayuso/emailAddress=pablo@netfilter.org" Date: Mon, 16 Apr 2007 17:15:22 +0000 Subject: revert some slipped through patches --- Makefile | 2 +- iptables-restore.c | 47 +++++++++++++++-------------------------------- 2 files changed, 16 insertions(+), 33 deletions(-) diff --git a/Makefile b/Makefile index e61fc6e..81e72d4 100644 --- a/Makefile +++ b/Makefile @@ -17,7 +17,7 @@ endif IPTABLES_VERSION:=1.3.7 OLD_IPTABLES_VERSION:=1.3.6 -PREFIX:=/usr +PREFIX:=/usr/local LIBDIR:=$(PREFIX)/lib BINDIR:=$(PREFIX)/sbin MANDIR:=$(PREFIX)/man diff --git a/iptables-restore.c b/iptables-restore.c index 9b8563a..89acd73 100644 --- a/iptables-restore.c +++ b/iptables-restore.c @@ -301,9 +301,8 @@ main(int argc, char *argv[]) char *parsestart; /* the parser */ - char *curchar; + char *param_start, *curchar; int quote_open; - int param_len; /* reset the newargv */ newargc = 0; @@ -350,11 +349,9 @@ main(int argc, char *argv[]) * longer a real hacker, but I can live with that */ quote_open = 0; - param_len = 0; + param_start = parsestart; for (curchar = parsestart; *curchar; curchar++) { - char param_buffer[1024]; - if (*curchar == '"') { /* quote_open cannot be true if there * was no previous character. Thus, @@ -363,27 +360,30 @@ main(int argc, char *argv[]) *(curchar-1) != '\\') { quote_open = 0; *curchar = ' '; - } else if (!quote_open) { + } else { quote_open = 1; - continue; + param_start++; } } if (*curchar == ' ' || *curchar == '\t' || * curchar == '\n') { + char param_buffer[1024]; + int param_len = curchar-param_start; - if (quote_open) { - param_buffer[param_len++] = - *curchar; + if (quote_open) continue; - } if (!param_len) { /* two spaces? */ + param_start++; continue; } - - param_buffer[param_len] = '\0'; + + /* end of one parameter */ + strncpy(param_buffer, param_start, + param_len); + *(param_buffer+param_len) = '\0'; /* check if table name specified */ if (!strncmp(param_buffer, "-t", 3) @@ -395,26 +395,9 @@ main(int argc, char *argv[]) } add_argv(param_buffer); - param_len = 0; + param_start += param_len + 1; } else { - /* Skip backslash that escapes quote: - * the standard input does not require - * escaping. However, the output - * generated by iptables-save - * introduces bashlash to keep - * consistent with iptables - */ - if (quote_open && - *curchar == '\\' && - *(curchar+1) == '"') - continue; - - /* regular character, copy to buffer */ - param_buffer[param_len++] = *curchar; - - if (param_len >= sizeof(param_buffer)) - exit_error(PARAMETER_PROBLEM, - "Parameter too long!"); + /* regular character, skip */ } } -- cgit v1.2.3