]> git.ipfire.org Git - thirdparty/iptables.git/commitdiff
libxtables: prefix - parse and escaped output func
authorJan Engelhardt <jengelh@medozas.de>
Fri, 30 Jan 2009 03:32:50 +0000 (04:32 +0100)
committerJan Engelhardt <jengelh@medozas.de>
Fri, 30 Jan 2009 04:38:30 +0000 (05:38 +0100)
Signed-off-by: Jan Engelhardt <jengelh@medozas.de>
extensions/libip6t_policy.c
extensions/libipt_LOG.c
extensions/libipt_ULOG.c
extensions/libipt_policy.c
extensions/libxt_NFLOG.c
extensions/libxt_conntrack.c
extensions/libxt_helper.c
include/xtables.h.in
ip6tables.c
iptables.c
xtables.c

index 357cbea181f35413f1ba3d63a6dd9320a762c5e7..fa855c120488803e3f98e8ceae15d0800ba596ba 100644 (file)
@@ -214,7 +214,7 @@ static int policy_parse(int c, char **argv, int invert, unsigned int *flags,
                        exit_error(PARAMETER_PROBLEM,
                                   "policy match: double --tunnel-src option");
 
-               ip6parse_hostnetworkmask(argv[optind-1], &addr, &mask, &naddr);
+               xtables_ip6parse_any(argv[optind-1], &addr, &mask, &naddr);
                if (naddr > 1)
                        exit_error(PARAMETER_PROBLEM,
                                   "policy match: name resolves to multiple IPs");
@@ -229,7 +229,7 @@ static int policy_parse(int c, char **argv, int invert, unsigned int *flags,
                        exit_error(PARAMETER_PROBLEM,
                                   "policy match: double --tunnel-dst option");
 
-               ip6parse_hostnetworkmask(argv[optind-1], &addr, &mask, &naddr);
+               xtables_ip6parse_any(argv[optind-1], &addr, &mask, &naddr);
                if (naddr > 1)
                        exit_error(PARAMETER_PROBLEM,
                                   "policy match: name resolves to multiple IPs");
index aefb54a6deabe8f36c24e4a1705046df365e8867..23790a0d97a830bdf2d82f48f542e1dc1cbcbc95 100644 (file)
@@ -235,7 +235,7 @@ static void LOG_save(const void *ip, const struct xt_entry_target *target)
 
        if (strcmp(loginfo->prefix, "") != 0) {
                printf("--log-prefix ");
-               save_string(loginfo->prefix);
+               xtables_save_string(loginfo->prefix);
        }
 
        if (loginfo->level != LOG_DEFAULT_LEVEL)
index d73a3f65eb636f1433e0b439bba366ec9de08415..6e346d81618e68ee835272ac23478b17f4b09fad 100644 (file)
@@ -151,7 +151,7 @@ static void ULOG_save(const void *ip, const struct xt_entry_target *target)
 
        if (strcmp(loginfo->prefix, "") != 0) {
                fputs("--ulog-prefix ", stdout);
-               save_string(loginfo->prefix);
+               xtables_save_string(loginfo->prefix);
        }
 
        if (loginfo->nl_group != ULOG_DEFAULT_NLGROUP) {
index 6b044d875f6a163a474def3edf73068163ab9f31..c9ce850c2b4e8f7b9dffa40e78be55cbc1986840 100644 (file)
@@ -182,7 +182,7 @@ static int policy_parse(int c, char **argv, int invert, unsigned int *flags,
                        exit_error(PARAMETER_PROBLEM,
                                   "policy match: double --tunnel-src option");
 
-               ipparse_hostnetworkmask(argv[optind-1], &addr, &mask, &naddr);
+               xtables_ipparse_any(argv[optind-1], &addr, &mask, &naddr);
                if (naddr > 1)
                        exit_error(PARAMETER_PROBLEM,
                                   "policy match: name resolves to multiple IPs");
@@ -197,7 +197,7 @@ static int policy_parse(int c, char **argv, int invert, unsigned int *flags,
                        exit_error(PARAMETER_PROBLEM,
                                   "policy match: double --tunnel-dst option");
 
-               ipparse_hostnetworkmask(argv[optind-1], &addr, &mask, &naddr);
+               xtables_ipparse_any(argv[optind-1], &addr, &mask, &naddr);
                if (naddr > 1)
                        exit_error(PARAMETER_PROBLEM,
                                   "policy match: name resolves to multiple IPs");
index fe22e981b35ffc99f723331e0ddfa8340360ad56..bedfbe905137b889f0fc669006e3793f22fe5876 100644 (file)
@@ -113,7 +113,7 @@ static void nflog_print(const struct xt_nflog_info *info, char *prefix)
 {
        if (info->prefix[0] != '\0') {
                printf("%snflog-prefix ", prefix);
-               save_string(info->prefix);
+               xtables_save_string(info->prefix);
        }
        if (info->group)
                printf("%snflog-group %u ", prefix, info->group);
index ffa279cac3511f84a0ae07abf66377c445e95cff..958f842ff4f429f54eaff0eb9a862bc80be64d19 100644 (file)
@@ -333,7 +333,7 @@ static int conntrack_parse(int c, char **argv, int invert, unsigned int *flags,
                if (invert)
                        sinfo->invflags |= XT_CONNTRACK_ORIGSRC;
 
-               ipparse_hostnetworkmask(argv[optind-1], &addrs,
+               xtables_ipparse_any(argv[optind-1], &addrs,
                                        &sinfo->sipmsk[IP_CT_DIR_ORIGINAL],
                                        &naddrs);
                if(naddrs > 1)
@@ -353,7 +353,7 @@ static int conntrack_parse(int c, char **argv, int invert, unsigned int *flags,
                if (invert)
                        sinfo->invflags |= XT_CONNTRACK_ORIGDST;
 
-               ipparse_hostnetworkmask(argv[optind-1], &addrs,
+               xtables_ipparse_any(argv[optind-1], &addrs,
                                        &sinfo->dipmsk[IP_CT_DIR_ORIGINAL],
                                        &naddrs);
                if(naddrs > 1)
@@ -373,7 +373,7 @@ static int conntrack_parse(int c, char **argv, int invert, unsigned int *flags,
                if (invert)
                        sinfo->invflags |= XT_CONNTRACK_REPLSRC;
 
-               ipparse_hostnetworkmask(argv[optind-1], &addrs,
+               xtables_ipparse_any(argv[optind-1], &addrs,
                                        &sinfo->sipmsk[IP_CT_DIR_REPLY],
                                        &naddrs);
                if(naddrs > 1)
@@ -393,7 +393,7 @@ static int conntrack_parse(int c, char **argv, int invert, unsigned int *flags,
                if (invert)
                        sinfo->invflags |= XT_CONNTRACK_REPLDST;
 
-               ipparse_hostnetworkmask(argv[optind-1], &addrs,
+               xtables_ipparse_any(argv[optind-1], &addrs,
                                        &sinfo->dipmsk[IP_CT_DIR_REPLY],
                                        &naddrs);
                if(naddrs > 1)
@@ -551,7 +551,7 @@ conntrack_mt4_parse(int c, char **argv, int invert, unsigned int *flags,
 
        switch (c) {
        case '3': /* --ctorigsrc */
-               ipparse_hostnetworkmask(optarg, &addr, &info->origsrc_mask.in,
+               xtables_ipparse_any(optarg, &addr, &info->origsrc_mask.in,
                                        &naddrs);
                if (naddrs > 1)
                        exit_error(PARAMETER_PROBLEM,
@@ -564,7 +564,7 @@ conntrack_mt4_parse(int c, char **argv, int invert, unsigned int *flags,
                break;
 
        case '4': /* --ctorigdst */
-               ipparse_hostnetworkmask(optarg, &addr, &info->origdst_mask.in,
+               xtables_ipparse_any(optarg, &addr, &info->origdst_mask.in,
                                        &naddrs);
                if (naddrs > 1)
                        exit_error(PARAMETER_PROBLEM,
@@ -577,7 +577,7 @@ conntrack_mt4_parse(int c, char **argv, int invert, unsigned int *flags,
                break;
 
        case '5': /* --ctreplsrc */
-               ipparse_hostnetworkmask(optarg, &addr, &info->replsrc_mask.in,
+               xtables_ipparse_any(optarg, &addr, &info->replsrc_mask.in,
                                        &naddrs);
                if (naddrs > 1)
                        exit_error(PARAMETER_PROBLEM,
@@ -590,7 +590,7 @@ conntrack_mt4_parse(int c, char **argv, int invert, unsigned int *flags,
                break;
 
        case '6': /* --ctrepldst */
-               ipparse_hostnetworkmask(optarg, &addr, &info->repldst_mask.in,
+               xtables_ipparse_any(optarg, &addr, &info->repldst_mask.in,
                                        &naddrs);
                if (naddrs > 1)
                        exit_error(PARAMETER_PROBLEM,
@@ -621,7 +621,7 @@ conntrack_mt6_parse(int c, char **argv, int invert, unsigned int *flags,
 
        switch (c) {
        case '3': /* --ctorigsrc */
-               ip6parse_hostnetworkmask(optarg, &addr,
+               xtables_ip6parse_any(optarg, &addr,
                                         &info->origsrc_mask.in6, &naddrs);
                if (naddrs > 1)
                        exit_error(PARAMETER_PROBLEM,
@@ -634,7 +634,7 @@ conntrack_mt6_parse(int c, char **argv, int invert, unsigned int *flags,
                break;
 
        case '4': /* --ctorigdst */
-               ip6parse_hostnetworkmask(optarg, &addr,
+               xtables_ip6parse_any(optarg, &addr,
                                         &info->origdst_mask.in6, &naddrs);
                if (naddrs > 1)
                        exit_error(PARAMETER_PROBLEM,
@@ -647,7 +647,7 @@ conntrack_mt6_parse(int c, char **argv, int invert, unsigned int *flags,
                break;
 
        case '5': /* --ctreplsrc */
-               ip6parse_hostnetworkmask(optarg, &addr,
+               xtables_ip6parse_any(optarg, &addr,
                                         &info->replsrc_mask.in6, &naddrs);
                if (naddrs > 1)
                        exit_error(PARAMETER_PROBLEM,
@@ -660,7 +660,7 @@ conntrack_mt6_parse(int c, char **argv, int invert, unsigned int *flags,
                break;
 
        case '6': /* --ctrepldst */
-               ip6parse_hostnetworkmask(optarg, &addr,
+               xtables_ip6parse_any(optarg, &addr,
                                         &info->repldst_mask.in6, &naddrs);
                if (naddrs > 1)
                        exit_error(PARAMETER_PROBLEM,
index b60c9826b4d384d9777ccd72bea7f3da34bd76cf..23025cd4818f88250ba80341fae9c28282930cdc 100644 (file)
@@ -65,7 +65,7 @@ static void helper_save(const void *ip, const struct xt_entry_match *match)
        struct xt_helper_info *info = (struct xt_helper_info *)match->data;
 
        printf("%s--helper ",info->invert ? "! " : "");
-       save_string(info->name);
+       xtables_save_string(info->name);
 }
 
 static struct xtables_match helper_match = {
index abde4d8648cd92fd4ef18045683514cfda6966e8..c3c960b10f55aeb90b0b22f54d3ff9b521cf705d 100644 (file)
@@ -212,21 +212,21 @@ extern const char *xtables_ipaddr_to_anyname(const struct in_addr *);
 extern const char *xtables_ipmask_to_numeric(const struct in_addr *);
 extern struct in_addr *xtables_numeric_to_ipaddr(const char *);
 extern struct in_addr *xtables_numeric_to_ipmask(const char *);
-extern void ipparse_hostnetworkmask(const char *, struct in_addr **,
+extern void xtables_ipparse_any(const char *, struct in_addr **,
        struct in_addr *, unsigned int *);
 
 extern struct in6_addr *xtables_numeric_to_ip6addr(const char *);
 extern const char *xtables_ip6addr_to_numeric(const struct in6_addr *);
 extern const char *xtables_ip6addr_to_anyname(const struct in6_addr *);
 extern const char *xtables_ip6mask_to_numeric(const struct in6_addr *);
-extern void ip6parse_hostnetworkmask(const char *, struct in6_addr **,
+extern void xtables_ip6parse_any(const char *, struct in6_addr **,
        struct in6_addr *, unsigned int *);
 
 /**
  * Print the specified value to standard output, quoting dangerous
  * characters if required.
  */
-extern void save_string(const char *value);
+extern void xtables_save_string(const char *value);
 
 #ifdef NO_SHARED_LIBS
 #      ifdef _INIT
index fd7327631f45cc9cd0d563a1525664d967d19438..48a6bec4f987edfa37d49e0ccdd71604f0541f41 100644 (file)
@@ -1945,11 +1945,11 @@ int do_command6(int argc, char *argv[], char **table, struct ip6tc_handle **hand
        }
 
        if (shostnetworkmask)
-               ip6parse_hostnetworkmask(shostnetworkmask, &saddrs,
+               xtables_ip6parse_any(shostnetworkmask, &saddrs,
                                         &fw.ipv6.smsk, &nsaddrs);
 
        if (dhostnetworkmask)
-               ip6parse_hostnetworkmask(dhostnetworkmask, &daddrs,
+               xtables_ip6parse_any(dhostnetworkmask, &daddrs,
                                         &fw.ipv6.dmsk, &ndaddrs);
 
        if ((nsaddrs > 1 || ndaddrs > 1) &&
index aeb40d8a5bcdc72cb152a61327cb92372eb7c581..925464c067076f510784b4376754c65087229b14 100644 (file)
@@ -1974,11 +1974,11 @@ int do_command(int argc, char *argv[], char **table, struct iptc_handle **handle
        }
 
        if (shostnetworkmask)
-               ipparse_hostnetworkmask(shostnetworkmask, &saddrs,
+               xtables_ipparse_any(shostnetworkmask, &saddrs,
                                        &fw.ip.smsk, &nsaddrs);
 
        if (dhostnetworkmask)
-               ipparse_hostnetworkmask(dhostnetworkmask, &daddrs,
+               xtables_ipparse_any(dhostnetworkmask, &daddrs,
                                        &fw.ip.dmsk, &ndaddrs);
 
        if ((nsaddrs > 1 || ndaddrs > 1) &&
index a387ae0a2914bdd5de8216aa11e9b5a784e0b083..8a79c5b184aa1951a524f8d8e28fd945c4a24bd9 100644 (file)
--- a/xtables.c
+++ b/xtables.c
@@ -954,8 +954,15 @@ static struct in_addr *parse_ipmask(const char *mask)
        return &maskaddr;
 }
 
-void ipparse_hostnetworkmask(const char *name, struct in_addr **addrpp,
-                             struct in_addr *maskp, unsigned int *naddrs)
+/**
+ * xtables_ipparse_any - transform arbitrary name to in_addr
+ *
+ * Possible inputs (pseudo regex):
+ *     m{^($hostname|$networkname|$ipaddr)(/$mask)?}
+ * "1.2.3.4/5", "1.2.3.4", "hostname", "networkname"
+ */
+void xtables_ipparse_any(const char *name, struct in_addr **addrpp,
+                         struct in_addr *maskp, unsigned int *naddrs)
 {
        unsigned int i, j, k, n;
        struct in_addr *addrp;
@@ -1178,8 +1185,8 @@ static struct in6_addr *parse_ip6mask(char *mask)
        return &maskaddr;
 }
 
-void ip6parse_hostnetworkmask(const char *name, struct in6_addr **addrpp,
-                              struct in6_addr *maskp, unsigned int *naddrs)
+void xtables_ip6parse_any(const char *name, struct in6_addr **addrpp,
+                          struct in6_addr *maskp, unsigned int *naddrs)
 {
        struct in6_addr *addrp;
        unsigned int i, j, k, n;
@@ -1214,7 +1221,7 @@ void ip6parse_hostnetworkmask(const char *name, struct in6_addr **addrpp,
        }
 }
 
-void save_string(const char *value)
+void xtables_save_string(const char *value)
 {
        static const char no_quote_chars[] = "_-0123456789"
                "abcdefghijklmnopqrstuvwxyz"