diff options
author | Phil Sutter <phil@nwl.cc> | 2021-06-02 12:56:06 +0200 |
---|---|---|
committer | Phil Sutter <phil@nwl.cc> | 2021-06-07 14:50:27 +0200 |
commit | 9b85e1ab3dbf0d9344562c5c76114496e3ebaa3a (patch) | |
tree | 297ae64c83a98f3b8c1e4ab0b739df1110cbe067 /extensions | |
parent | ca840c20b7b754d36a1abe7e597fd730dea142d4 (diff) |
libxtables: Introduce xtables_strdup() and use it everywhere
This wraps strdup(), checking for errors.
Signed-off-by: Phil Sutter <phil@nwl.cc>
Diffstat (limited to 'extensions')
-rw-r--r-- | extensions/libebt_ip.c | 3 | ||||
-rw-r--r-- | extensions/libebt_ip6.c | 2 | ||||
-rw-r--r-- | extensions/libebt_stp.c | 3 | ||||
-rw-r--r-- | extensions/libip6t_DNAT.c | 4 | ||||
-rw-r--r-- | extensions/libip6t_SNAT.c | 4 | ||||
-rw-r--r-- | extensions/libip6t_dst.c | 8 | ||||
-rw-r--r-- | extensions/libip6t_hbh.c | 7 | ||||
-rw-r--r-- | extensions/libip6t_ipv6header.c | 2 | ||||
-rw-r--r-- | extensions/libip6t_mh.c | 2 | ||||
-rw-r--r-- | extensions/libip6t_rt.c | 7 | ||||
-rw-r--r-- | extensions/libipt_DNAT.c | 8 | ||||
-rw-r--r-- | extensions/libipt_SNAT.c | 4 | ||||
-rw-r--r-- | extensions/libxt_dccp.c | 2 | ||||
-rw-r--r-- | extensions/libxt_hashlimit.c | 5 | ||||
-rw-r--r-- | extensions/libxt_iprange.c | 4 | ||||
-rw-r--r-- | extensions/libxt_multiport.c | 6 | ||||
-rw-r--r-- | extensions/libxt_sctp.c | 4 | ||||
-rw-r--r-- | extensions/libxt_set.h | 4 | ||||
-rw-r--r-- | extensions/libxt_tcp.c | 4 |
19 files changed, 32 insertions, 51 deletions
diff --git a/extensions/libebt_ip.c b/extensions/libebt_ip.c index acb9bfcd..51649ffb 100644 --- a/extensions/libebt_ip.c +++ b/extensions/libebt_ip.c @@ -175,7 +175,8 @@ parse_port_range(const char *protocol, const char *portstring, uint16_t *ports) char *buffer; char *cp; - buffer = strdup(portstring); + buffer = xtables_strdup(portstring); + if ((cp = strchr(buffer, ':')) == NULL) ports[0] = ports[1] = xtables_parse_port(buffer, NULL); else { diff --git a/extensions/libebt_ip6.c b/extensions/libebt_ip6.c index 3cc39271..a686a285 100644 --- a/extensions/libebt_ip6.c +++ b/extensions/libebt_ip6.c @@ -93,7 +93,7 @@ parse_port_range(const char *protocol, const char *portstring, uint16_t *ports) char *buffer; char *cp; - buffer = strdup(portstring); + buffer = xtables_strdup(portstring); if ((cp = strchr(buffer, ':')) == NULL) ports[0] = ports[1] = xtables_parse_port(buffer, NULL); else { diff --git a/extensions/libebt_stp.c b/extensions/libebt_stp.c index 81ba572c..3e9e2447 100644 --- a/extensions/libebt_stp.c +++ b/extensions/libebt_stp.c @@ -90,7 +90,8 @@ static int parse_range(const char *portstring, void *lower, void *upper, uint32_t low_nr, upp_nr; int ret = 0; - buffer = strdup(portstring); + buffer = xtables_strdup(portstring); + if ((cp = strchr(buffer, ':')) == NULL) { low_nr = strtoul(buffer, &end, 10); if (*end || low_nr < min || low_nr > max) { diff --git a/extensions/libip6t_DNAT.c b/extensions/libip6t_DNAT.c index 89c5ceb1..f1ad8143 100644 --- a/extensions/libip6t_DNAT.c +++ b/extensions/libip6t_DNAT.c @@ -58,9 +58,7 @@ parse_to(const char *orig_arg, int portok, struct nf_nat_range2 *range, int rev) char *arg, *start, *end = NULL, *colon = NULL, *dash, *error; const struct in6_addr *ip; - arg = strdup(orig_arg); - if (arg == NULL) - xtables_error(RESOURCE_PROBLEM, "strdup"); + arg = xtables_strdup(orig_arg); start = strchr(arg, '['); if (start == NULL) { diff --git a/extensions/libip6t_SNAT.c b/extensions/libip6t_SNAT.c index 7d74b3d7..6d19614c 100644 --- a/extensions/libip6t_SNAT.c +++ b/extensions/libip6t_SNAT.c @@ -52,9 +52,7 @@ parse_to(const char *orig_arg, int portok, struct nf_nat_range *range) char *arg, *start, *end = NULL, *colon = NULL, *dash, *error; const struct in6_addr *ip; - arg = strdup(orig_arg); - if (arg == NULL) - xtables_error(RESOURCE_PROBLEM, "strdup"); + arg = xtables_strdup(orig_arg); start = strchr(arg, '['); if (start == NULL) { diff --git a/extensions/libip6t_dst.c b/extensions/libip6t_dst.c index fe7e3403..bf0e3e43 100644 --- a/extensions/libip6t_dst.c +++ b/extensions/libip6t_dst.c @@ -57,11 +57,9 @@ parse_options(const char *optsstr, uint16_t *opts) { char *buffer, *cp, *next, *range; unsigned int i; - - buffer = strdup(optsstr); - if (!buffer) - xtables_error(OTHER_PROBLEM, "strdup failed"); - + + buffer = xtables_strdup(optsstr); + for (cp = buffer, i = 0; cp && i < IP6T_OPTS_OPTSNR; cp = next, i++) { next = strchr(cp, ','); diff --git a/extensions/libip6t_hbh.c b/extensions/libip6t_hbh.c index 4cebecfd..74e87cda 100644 --- a/extensions/libip6t_hbh.c +++ b/extensions/libip6t_hbh.c @@ -57,10 +57,9 @@ parse_options(const char *optsstr, uint16_t *opts) { char *buffer, *cp, *next, *range; unsigned int i; - - buffer = strdup(optsstr); - if (!buffer) xtables_error(OTHER_PROBLEM, "strdup failed"); - + + buffer = xtables_strdup(optsstr); + for (cp=buffer, i=0; cp && i<IP6T_OPTS_OPTSNR; cp=next,i++) { next=strchr(cp, ','); diff --git a/extensions/libip6t_ipv6header.c b/extensions/libip6t_ipv6header.c index 6f03087b..9e345629 100644 --- a/extensions/libip6t_ipv6header.c +++ b/extensions/libip6t_ipv6header.c @@ -147,7 +147,7 @@ parse_header(const char *flags) { char *ptr; char *buffer; - buffer = strdup(flags); + buffer = xtables_strdup(flags); for (ptr = strtok(buffer, ","); ptr; ptr = strtok(NULL, ",")) ret |= add_proto_to_mask(name_to_proto(ptr)); diff --git a/extensions/libip6t_mh.c b/extensions/libip6t_mh.c index f4c0fd9f..64675405 100644 --- a/extensions/libip6t_mh.c +++ b/extensions/libip6t_mh.c @@ -107,7 +107,7 @@ static void parse_mh_types(const char *mhtype, uint8_t *types) char *buffer; char *cp; - buffer = strdup(mhtype); + buffer = xtables_strdup(mhtype); if ((cp = strchr(buffer, ':')) == NULL) types[0] = types[1] = name_to_type(buffer); else { diff --git a/extensions/libip6t_rt.c b/extensions/libip6t_rt.c index 3cb3b249..9708b5a0 100644 --- a/extensions/libip6t_rt.c +++ b/extensions/libip6t_rt.c @@ -73,10 +73,9 @@ parse_addresses(const char *addrstr, struct in6_addr *addrp) { char *buffer, *cp, *next; unsigned int i; - - buffer = strdup(addrstr); - if (!buffer) xtables_error(OTHER_PROBLEM, "strdup failed"); - + + buffer = xtables_strdup(addrstr); + for (cp=buffer, i=0; cp && i<IP6T_RT_HOPS; cp=next,i++) { next=strchr(cp, ','); diff --git a/extensions/libipt_DNAT.c b/extensions/libipt_DNAT.c index 4907a2e8..5b33fd23 100644 --- a/extensions/libipt_DNAT.c +++ b/extensions/libipt_DNAT.c @@ -79,9 +79,7 @@ parse_to(const char *orig_arg, int portok, struct ipt_natinfo *info) char *arg, *colon, *dash, *error; const struct in_addr *ip; - arg = strdup(orig_arg); - if (arg == NULL) - xtables_error(RESOURCE_PROBLEM, "strdup"); + arg = xtables_strdup(orig_arg); memset(&range, 0, sizeof(range)); colon = strchr(arg, ':'); @@ -302,9 +300,7 @@ parse_to_v2(const char *orig_arg, int portok, struct nf_nat_range2 *range) char *arg, *colon, *dash, *error; const struct in_addr *ip; - arg = strdup(orig_arg); - if (arg == NULL) - xtables_error(RESOURCE_PROBLEM, "strdup"); + arg = xtables_strdup(orig_arg); colon = strchr(arg, ':'); if (colon) { diff --git a/extensions/libipt_SNAT.c b/extensions/libipt_SNAT.c index e92d811c..c655439e 100644 --- a/extensions/libipt_SNAT.c +++ b/extensions/libipt_SNAT.c @@ -73,9 +73,7 @@ parse_to(const char *orig_arg, int portok, struct ipt_natinfo *info) char *arg, *colon, *dash, *error; const struct in_addr *ip; - arg = strdup(orig_arg); - if (arg == NULL) - xtables_error(RESOURCE_PROBLEM, "strdup"); + arg = xtables_strdup(orig_arg); memset(&range, 0, sizeof(range)); colon = strchr(arg, ':'); diff --git a/extensions/libxt_dccp.c b/extensions/libxt_dccp.c index aea3e20b..abd420fc 100644 --- a/extensions/libxt_dccp.c +++ b/extensions/libxt_dccp.c @@ -85,7 +85,7 @@ parse_dccp_types(const char *typestring) uint16_t typemask = 0; char *ptr, *buffer; - buffer = strdup(typestring); + buffer = xtables_strdup(typestring); for (ptr = strtok(buffer, ","); ptr; ptr = strtok(NULL, ",")) { unsigned int i; diff --git a/extensions/libxt_hashlimit.c b/extensions/libxt_hashlimit.c index 7f1d2a40..3f3c4301 100644 --- a/extensions/libxt_hashlimit.c +++ b/extensions/libxt_hashlimit.c @@ -508,10 +508,7 @@ static void hashlimit_mt6_init(struct xt_entry_match *match) static int parse_mode(uint32_t *mode, const char *option_arg) { char *tok; - char *arg = strdup(option_arg); - - if (!arg) - return -1; + char *arg = xtables_strdup(option_arg); for (tok = strtok(arg, ",|"); tok; diff --git a/extensions/libxt_iprange.c b/extensions/libxt_iprange.c index 8be24814..04ce7b36 100644 --- a/extensions/libxt_iprange.c +++ b/extensions/libxt_iprange.c @@ -73,11 +73,9 @@ iprange_parse_spec(const char *from, const char *to, union nf_inet_addr *range, static void iprange_parse_range(const char *oarg, union nf_inet_addr *range, uint8_t family, const char *optname) { - char *arg = strdup(oarg); + char *arg = xtables_strdup(oarg); char *dash; - if (arg == NULL) - xtables_error(RESOURCE_PROBLEM, "strdup"); dash = strchr(arg, '-'); if (dash == NULL) { iprange_parse_spec(arg, arg, range, family, optname); diff --git a/extensions/libxt_multiport.c b/extensions/libxt_multiport.c index 07ad4cfd..4a42fa38 100644 --- a/extensions/libxt_multiport.c +++ b/extensions/libxt_multiport.c @@ -87,8 +87,7 @@ parse_multi_ports(const char *portstring, uint16_t *ports, const char *proto) char *buffer, *cp, *next; unsigned int i; - buffer = strdup(portstring); - if (!buffer) xtables_error(OTHER_PROBLEM, "strdup failed"); + buffer = xtables_strdup(portstring); for (cp=buffer, i=0; cp && i<XT_MULTI_PORTS; cp=next,i++) { @@ -109,8 +108,7 @@ parse_multi_ports_v1(const char *portstring, char *buffer, *cp, *next, *range; unsigned int i; - buffer = strdup(portstring); - if (!buffer) xtables_error(OTHER_PROBLEM, "strdup failed"); + buffer = xtables_strdup(portstring); for (i=0; i<XT_MULTI_PORTS; i++) multiinfo->pflags[i] = 0; diff --git a/extensions/libxt_sctp.c b/extensions/libxt_sctp.c index 5d8ab85c..a4c5415f 100644 --- a/extensions/libxt_sctp.c +++ b/extensions/libxt_sctp.c @@ -69,7 +69,7 @@ parse_sctp_ports(const char *portstring, char *buffer; char *cp; - buffer = strdup(portstring); + buffer = xtables_strdup(portstring); DEBUGP("%s\n", portstring); if ((cp = strchr(buffer, ':')) == NULL) { ports[0] = ports[1] = xtables_parse_port(buffer, "sctp"); @@ -164,7 +164,7 @@ parse_sctp_chunk(struct xt_sctp_info *einfo, int found = 0; char *chunk_flags; - buffer = strdup(chunks); + buffer = xtables_strdup(chunks); DEBUGP("Buffer: %s\n", buffer); SCTP_CHUNKMAP_RESET(einfo->chunkmap); diff --git a/extensions/libxt_set.h b/extensions/libxt_set.h index 41dfbd30..ad895a75 100644 --- a/extensions/libxt_set.h +++ b/extensions/libxt_set.h @@ -141,7 +141,7 @@ get_set_byname(const char *setname, struct xt_set_info *info) static void parse_dirs_v0(const char *opt_arg, struct xt_set_info_v0 *info) { - char *saved = strdup(opt_arg); + char *saved = xtables_strdup(opt_arg); char *ptr, *tmp = saved; int i = 0; @@ -167,7 +167,7 @@ parse_dirs_v0(const char *opt_arg, struct xt_set_info_v0 *info) static void parse_dirs(const char *opt_arg, struct xt_set_info *info) { - char *saved = strdup(opt_arg); + char *saved = xtables_strdup(opt_arg); char *ptr, *tmp = saved; while (info->dim < IPSET_DIM_MAX && tmp != NULL) { diff --git a/extensions/libxt_tcp.c b/extensions/libxt_tcp.c index 58f3c0a0..383e4db5 100644 --- a/extensions/libxt_tcp.c +++ b/extensions/libxt_tcp.c @@ -43,7 +43,7 @@ parse_tcp_ports(const char *portstring, uint16_t *ports) char *buffer; char *cp; - buffer = strdup(portstring); + buffer = xtables_strdup(portstring); if ((cp = strchr(buffer, ':')) == NULL) ports[0] = ports[1] = xtables_parse_port(buffer, "tcp"); else { @@ -83,7 +83,7 @@ parse_tcp_flag(const char *flags) char *ptr; char *buffer; - buffer = strdup(flags); + buffer = xtables_strdup(flags); for (ptr = strtok(buffer, ","); ptr; ptr = strtok(NULL, ",")) { unsigned int i; |