reduce parse_*_port duplication
PATCH 1/1 reduce parse_*_port duplication
The below patch (dependent upon my 'reduce service_to_port duplication' patch) centralizes the parse_*_port functions into parse_port.
Phil
extensions/libip6t_multiport.c +0 -13
@@ -50,19 +50,6 @@ } } -static u_int16_t -parse_port (const char *port,const char *proto) -{ -unsigned int portnum; - -if ((string_to_number (port,0 ,65535 , &portnum)) !=-1 || - (portnum =service_to_port (port, proto)) !=-1 ) -return (u_int16_t )portnum; - -exit_error (PARAMETER_PROBLEM , -"invalid port/service `%s' specified" , port); -} -static unsigned int parse_multi_ports (const char *portstring,u_int16_t *ports,const char *proto) {
extensions/libip6t_tcp.c +3 -16
@@ -38,19 +38,6 @@ {0} }; -static u_int16_t -parse_tcp_port (const char *port) -{ -unsigned int portnum; - -if (string_to_number (port,0 ,65535 , &portnum) !=-1 || - (portnum =service_to_port (port,"tcp" )) !=-1 ) -return (u_int16_t )portnum; - -exit_error (PARAMETER_PROBLEM , -"invalid TCP port/service `%s' specified" , port); -} -static void parse_tcp_ports (const char *portstring,u_int16_t *ports) {
@@ -59,13 +46,13 @@ buffer =strdup (portstring);if ((cp =strchr (buffer,':' )) ==NULL ) - ports[0 ] = ports[1 ] =parse_tcp_port (buffer); + ports[0 ] = ports[1 ] =parse_port (buffer,"tcp" );else { *cp ='\0' ; cp++; - ports[0 ] = buffer[0 ] ?parse_tcp_port (buffer) :0 ; - ports[1 ] = cp[0 ] ?parse_tcp_port (cp) :0xFFFF ; + ports[0 ] = buffer[0 ] ?parse_port (buffer,"tcp" ) :0 ; + ports[1 ] = cp[0 ] ?parse_port (cp,"tcp" ) :0xFFFF ;if (ports[0 ] > ports[1 ]) exit_error(PARAMETER_PROBLEM,
extensions/libip6t_udp.c +3 -16
@@ -30,19 +30,6 @@ {0} }; -static u_int16_t -parse_udp_port (const char *port) -{ -unsigned int portnum; - -if (string_to_number (port,0 ,65535 , &portnum) !=-1 || - (portnum =service_to_port (port,"udp" )) !=-1 ) -return (u_int16_t )portnum; - -exit_error (PARAMETER_PROBLEM , -"invalid UDP port/service `%s' specified" , port); - } -static void parse_udp_ports (const char *portstring,u_int16_t *ports) {
@@ -51,13 +38,13 @@ buffer =strdup (portstring);if ((cp =strchr (buffer,':' )) ==NULL ) - ports[0 ] = ports[1 ] =parse_udp_port (buffer); + ports[0 ] = ports[1 ] =parse_port (buffer,"udp" );else { *cp ='\0' ; cp++; - ports[0 ] = buffer[0 ] ?parse_udp_port (buffer) :0 ; - ports[1 ] = cp[0 ] ?parse_udp_port (cp) :0xFFFF ; + ports[0 ] = buffer[0 ] ?parse_port (buffer,"udp" ) :0 ; + ports[1 ] = cp[0 ] ?parse_port (cp,"udp" ) :0xFFFF ;if (ports[0 ] > ports[1 ]) exit_error(PARAMETER_PROBLEM,
extensions/libipt_dccp.c +3 -17
@@ -56,20 +56,6 @@ { .name = 0 } }; -static u_int16_t -parse_dccp_port (const char *port) -{ -unsigned int portnum; - -DEBUGP ("%s\n" , port); -if (string_to_number (port,0 ,65535 , &portnum) !=-1 || - (portnum =service_to_port (port,"dccp" )) !=-1 ) -return (u_int16_t )portnum; - -exit_error (PARAMETER_PROBLEM , -"invalid DCCP port/service `%s' specified" , port); -} -static void parse_dccp_ports (const char *portstring,u_int16_t *ports)
@@ -80,14 +66,14 @@ buffer =strdup (portstring);DEBUGP ("%s\n" , portstring);if ((cp =strchr (buffer,':' )) ==NULL ) { - ports[0 ] = ports[1 ] =parse_dccp_port (buffer); + ports[0 ] = ports[1 ] =parse_port (buffer,"dccp" ); }else { *cp ='\0' ; cp++; - ports[0 ] = buffer[0 ] ?parse_dccp_port (buffer) :0 ; - ports[1 ] = cp[0 ] ?parse_dccp_port (cp) :0xFFFF ; + ports[0 ] = buffer[0 ] ?parse_port (buffer,"dccp" ) :0 ; + ports[1 ] = cp[0 ] ?parse_port (cp,"dccp" ) :0xFFFF ;if (ports[0 ] > ports[1 ]) exit_error(PARAMETER_PROBLEM,
extensions/libipt_mport.c +0 -13
@@ -33,19 +33,6 @@ {0} }; -static u_int16_t -parse_port (const char *port,const char *proto) -{ -unsigned int portnum; - -if (string_to_number (port,0 ,65535 , &portnum) !=-1 || - (portnum =service_to_port (port, proto)) !=-1 ) -return (u_int16_t )portnum; - -exit_error (PARAMETER_PROBLEM , -"invalid port/service `%s' specified" , port); -} -static void parse_multi_ports (const char *portstring,struct ipt_mport *minfo,const char *proto)
extensions/libipt_multiport.c +0 -13
@@ -68,19 +68,6 @@ } } -static u_int16_t -parse_port (const char *port,const char *proto) -{ -unsigned int portnum; - -if (string_to_number (port,0 ,65535 , &portnum) !=-1 || - (portnum =service_to_port (port, proto)) !=-1 ) -return (u_int16_t )portnum; - -exit_error (PARAMETER_PROBLEM , -"invalid port/service `%s' specified" , port); -} -static unsigned int parse_multi_ports (const char *portstring,u_int16_t *ports,const char *proto) {
extensions/libipt_sctp.c +3 -17
@@ -79,20 +79,6 @@ { .name = 0 } }; -static u_int16_t -parse_sctp_port (const char *port) -{ -unsigned int portnum; - -DEBUGP ("%s\n" , port); -if (string_to_number (port,0 ,65535 , &portnum) !=-1 || - (portnum =service_to_port (port,"sctp" )) !=-1 ) -return (u_int16_t )portnum; - -exit_error (PARAMETER_PROBLEM , -"invalid SCTP port/service `%s' specified" , port); -} -static void parse_sctp_ports (const char *portstring,u_int16_t *ports)
@@ -103,14 +89,14 @@ buffer =strdup (portstring);DEBUGP ("%s\n" , portstring);if ((cp =strchr (buffer,':' )) ==NULL ) { - ports[0 ] = ports[1 ] =parse_sctp_port (buffer); + ports[0 ] = ports[1 ] =parse_port (buffer,"sctp" ); }else { *cp ='\0' ; cp++; - ports[0 ] = buffer[0 ] ?parse_sctp_port (buffer) :0 ; - ports[1 ] = cp[0 ] ?parse_sctp_port (cp) :0xFFFF ; + ports[0 ] = buffer[0 ] ?parse_port (buffer,"sctp" ) :0 ; + ports[1 ] = cp[0 ] ?parse_port (cp,"sctp" ) :0xFFFF ;if (ports[0 ] > ports[1 ]) exit_error(PARAMETER_PROBLEM,
extensions/libipt_tcp.c +3 -16
@@ -38,19 +38,6 @@ {0} }; -static u_int16_t -parse_tcp_port (const char *port) -{ -unsigned int portnum; - -if (string_to_number (port,0 ,65535 , &portnum) !=-1 || - (portnum =service_to_port (port,"tcp" )) !=-1 ) -return (u_int16_t )portnum; - -exit_error (PARAMETER_PROBLEM , -"invalid TCP port/service `%s' specified" , port); -} -static void parse_tcp_ports (const char *portstring,u_int16_t *ports) {
@@ -59,13 +46,13 @@ buffer =strdup (portstring);if ((cp =strchr (buffer,':' )) ==NULL ) - ports[0 ] = ports[1 ] =parse_tcp_port (buffer); + ports[0 ] = ports[1 ] =parse_port (buffer,"tcp" );else { *cp ='\0' ; cp++; - ports[0 ] = buffer[0 ] ?parse_tcp_port (buffer) :0 ; - ports[1 ] = cp[0 ] ?parse_tcp_port (cp) :0xFFFF ; + ports[0 ] = buffer[0 ] ?parse_port (buffer,"tcp" ) :0 ; + ports[1 ] = cp[0 ] ?parse_port (cp,"tcp" ) :0xFFFF ;if (ports[0 ] > ports[1 ]) exit_error(PARAMETER_PROBLEM,
extensions/libipt_udp.c +3 -16
@@ -30,19 +30,6 @@ {0} }; -static u_int16_t -parse_udp_port (const char *port) -{ -unsigned int portnum; - -if (string_to_number (port,0 ,65535 , &portnum) !=-1 || - (portnum =service_to_port (port,"udp" )) !=-1 ) -return (u_int16_t )portnum; - -exit_error (PARAMETER_PROBLEM , -"invalid UDP port/service `%s' specified" , port); - } -static void parse_udp_ports (const char *portstring,u_int16_t *ports) {
@@ -51,13 +38,13 @@ buffer =strdup (portstring);if ((cp =strchr (buffer,':' )) ==NULL ) - ports[0 ] = ports[1 ] =parse_udp_port (buffer); + ports[0 ] = ports[1 ] =parse_port (buffer,"udp" );else { *cp ='\0' ; cp++; - ports[0 ] = buffer[0 ] ?parse_udp_port (buffer) :0 ; - ports[1 ] = cp[0 ] ?parse_udp_port (cp) :0xFFFF ; + ports[0 ] = buffer[0 ] ?parse_port (buffer,"udp" ) :0 ; + ports[1 ] = cp[0 ] ?parse_port (cp,"udp" ) :0xFFFF ;if (ports[0 ] > ports[1 ]) exit_error(PARAMETER_PROBLEM,
include/ip6tables.h +1 -0
@@ -134,6 +134,7 @@extern void register_target6 (struct ip6tables_target *me);extern int service_to_port (const char *name,const char *proto); +extern u_int16_t parse_port (const char *port,const char *proto);extern int do_command6 (int argc,char *argv[],char **table,ip6tc_handle_t *handle);/* Keeping track of external matches and targets: linked lists. */
include/iptables.h +1 -0
@@ -152,6 +152,7 @@extern void register_target (struct iptables_target *me);extern int service_to_port (const char *name,const char *proto); +extern u_int16_t parse_port (const char *port,const char *proto);extern struct in_addr *dotted_to_addr (const char *dotted);extern char *addr_to_dotted (const struct in_addr *addrp);extern char *addr_to_anyname (const struct in_addr *addr);
ip6tables.c +13 -0
@@ -256,6 +256,19 @@return -1 ; } +u_int16_t +parse_port (const char *port,const char *proto) +{ +unsigned int portnum; + +if ((string_to_number (port,0 ,65535 , &portnum)) !=-1 || + (portnum =service_to_port (port, proto)) !=-1 ) +return (u_int16_t )portnum; + +exit_error (PARAMETER_PROBLEM , +"invalid port/service `%s' specified" , port); +} +static void in6addrcpy (struct in6_addr *dst,struct in6_addr *src) {
iptables.c +13 -0
@@ -260,6 +260,19 @@return -1 ; } +u_int16_t +parse_port (const char *port,const char *proto) +{ +unsigned int portnum; + +if ((string_to_number (port,0 ,65535 , &portnum)) !=-1 || + (portnum =service_to_port (port, proto)) !=-1 ) +return (u_int16_t )portnum; + +exit_error (PARAMETER_PROBLEM , +"invalid port/service `%s' specified" , port); +} +struct in_addr *dotted_to_addr (const char *dotted) {
Quoted 2 lines · Phil Oester
The below patch (dependent upon my 'reduce
service_to_portduplication' patch) centralizes the parse_*_port functions intoparse_port.
Also applied, thanks again :)