| 1 | --- a/extensions/libxt_multiport.c |
| 2 | +++ b/extensions/libxt_multiport.c |
| 3 | @@ -14,21 +14,6 @@ |
| 4 | #include <linux/netfilter/xt_multiport.h> |
| 5 | |
| 6 | /* Function which prints out usage message. */ |
| 7 | -static void multiport_help(void) |
| 8 | -{ |
| 9 | - printf( |
| 10 | -"multiport match options:\n" |
| 11 | -" --source-ports port[,port,port...]\n" |
| 12 | -" --sports ...\n" |
| 13 | -" match source port(s)\n" |
| 14 | -" --destination-ports port[,port,port...]\n" |
| 15 | -" --dports ...\n" |
| 16 | -" match destination port(s)\n" |
| 17 | -" --ports port[,port,port]\n" |
| 18 | -" match both source and destination port(s)\n" |
| 19 | -" NOTE: this kernel does not support port ranges in multiport.\n"); |
| 20 | -} |
| 21 | - |
| 22 | static void multiport_help_v1(void) |
| 23 | { |
| 24 | printf( |
| 25 | @@ -71,26 +56,6 @@ proto_to_name(u_int8_t proto) |
| 26 | } |
| 27 | } |
| 28 | |
| 29 | -static unsigned int |
| 30 | -parse_multi_ports(const char *portstring, u_int16_t *ports, const char *proto) |
| 31 | -{ |
| 32 | - char *buffer, *cp, *next; |
| 33 | - unsigned int i; |
| 34 | - |
| 35 | - buffer = strdup(portstring); |
| 36 | - if (!buffer) xtables_error(OTHER_PROBLEM, "strdup failed"); |
| 37 | - |
| 38 | - for (cp=buffer, i=0; cp && i<XT_MULTI_PORTS; cp=next,i++) |
| 39 | - { |
| 40 | - next=strchr(cp, ','); |
| 41 | - if (next) *next++='\0'; |
| 42 | - ports[i] = xtables_parse_port(cp, proto); |
| 43 | - } |
| 44 | - if (cp) xtables_error(PARAMETER_PROBLEM, "too many ports specified"); |
| 45 | - free(buffer); |
| 46 | - return i; |
| 47 | -} |
| 48 | - |
| 49 | static void |
| 50 | parse_multi_ports_v1(const char *portstring, |
| 51 | struct xt_multiport_v1 *multiinfo, |
| 52 | @@ -154,73 +119,6 @@ check_proto(u_int16_t pnum, u_int8_t inv |
| 53 | /* Function which parses command options; returns true if it |
| 54 | ate an option */ |
| 55 | static int |
| 56 | -__multiport_parse(int c, char **argv, int invert, unsigned int *flags, |
| 57 | - struct xt_entry_match **match, u_int16_t pnum, |
| 58 | - u_int8_t invflags) |
| 59 | -{ |
| 60 | - const char *proto; |
| 61 | - struct xt_multiport *multiinfo |
| 62 | - = (struct xt_multiport *)(*match)->data; |
| 63 | - |
| 64 | - switch (c) { |
| 65 | - case '1': |
| 66 | - xtables_check_inverse(optarg, &invert, &optind, 0, argv); |
| 67 | - proto = check_proto(pnum, invflags); |
| 68 | - multiinfo->count = parse_multi_ports(optarg, |
| 69 | - multiinfo->ports, proto); |
| 70 | - multiinfo->flags = XT_MULTIPORT_SOURCE; |
| 71 | - break; |
| 72 | - |
| 73 | - case '2': |
| 74 | - xtables_check_inverse(optarg, &invert, &optind, 0, argv); |
| 75 | - proto = check_proto(pnum, invflags); |
| 76 | - multiinfo->count = parse_multi_ports(optarg, |
| 77 | - multiinfo->ports, proto); |
| 78 | - multiinfo->flags = XT_MULTIPORT_DESTINATION; |
| 79 | - break; |
| 80 | - |
| 81 | - case '3': |
| 82 | - xtables_check_inverse(optarg, &invert, &optind, 0, argv); |
| 83 | - proto = check_proto(pnum, invflags); |
| 84 | - multiinfo->count = parse_multi_ports(optarg, |
| 85 | - multiinfo->ports, proto); |
| 86 | - multiinfo->flags = XT_MULTIPORT_EITHER; |
| 87 | - break; |
| 88 | - |
| 89 | - default: |
| 90 | - return 0; |
| 91 | - } |
| 92 | - |
| 93 | - if (invert) |
| 94 | - xtables_error(PARAMETER_PROBLEM, |
| 95 | - "multiport does not support invert"); |
| 96 | - |
| 97 | - if (*flags) |
| 98 | - xtables_error(PARAMETER_PROBLEM, |
| 99 | - "multiport can only have one option"); |
| 100 | - *flags = 1; |
| 101 | - return 1; |
| 102 | -} |
| 103 | - |
| 104 | -static int |
| 105 | -multiport_parse(int c, char **argv, int invert, unsigned int *flags, |
| 106 | - const void *e, struct xt_entry_match **match) |
| 107 | -{ |
| 108 | - const struct ipt_entry *entry = e; |
| 109 | - return __multiport_parse(c, argv, invert, flags, match, |
| 110 | - entry->ip.proto, entry->ip.invflags); |
| 111 | -} |
| 112 | - |
| 113 | -static int |
| 114 | -multiport_parse6(int c, char **argv, int invert, unsigned int *flags, |
| 115 | - const void *e, struct xt_entry_match **match) |
| 116 | -{ |
| 117 | - const struct ip6t_entry *entry = e; |
| 118 | - return __multiport_parse(c, argv, invert, flags, match, |
| 119 | - entry->ipv6.proto, entry->ipv6.invflags); |
| 120 | -} |
| 121 | - |
| 122 | -static int |
| 123 | __multiport_parse_v1(int c, char **argv, int invert, unsigned int *flags, |
| 124 | struct xt_entry_match **match, u_int16_t pnum, |
| 125 | u_int8_t invflags) |
| 126 | @@ -313,55 +211,6 @@ print_port(u_int16_t port, u_int8_t prot |
| 127 | } |
| 128 | |
| 129 | /* Prints out the matchinfo. */ |
| 130 | -static void |
| 131 | -__multiport_print(const struct xt_entry_match *match, int numeric, |
| 132 | - u_int16_t proto) |
| 133 | -{ |
| 134 | - const struct xt_multiport *multiinfo |
| 135 | - = (const struct xt_multiport *)match->data; |
| 136 | - unsigned int i; |
| 137 | - |
| 138 | - printf("multiport "); |
| 139 | - |
| 140 | - switch (multiinfo->flags) { |
| 141 | - case XT_MULTIPORT_SOURCE: |
| 142 | - printf("sports "); |
| 143 | - break; |
| 144 | - |
| 145 | - case XT_MULTIPORT_DESTINATION: |
| 146 | - printf("dports "); |
| 147 | - break; |
| 148 | - |
| 149 | - case XT_MULTIPORT_EITHER: |
| 150 | - printf("ports "); |
| 151 | - break; |
| 152 | - |
| 153 | - default: |
| 154 | - printf("ERROR "); |
| 155 | - break; |
| 156 | - } |
| 157 | - |
| 158 | - for (i=0; i < multiinfo->count; i++) { |
| 159 | - printf("%s", i ? "," : ""); |
| 160 | - print_port(multiinfo->ports[i], proto, numeric); |
| 161 | - } |
| 162 | - printf(" "); |
| 163 | -} |
| 164 | - |
| 165 | -static void multiport_print(const void *ip_void, |
| 166 | - const struct xt_entry_match *match, int numeric) |
| 167 | -{ |
| 168 | - const struct ipt_ip *ip = ip_void; |
| 169 | - __multiport_print(match, numeric, ip->proto); |
| 170 | -} |
| 171 | - |
| 172 | -static void multiport_print6(const void *ip_void, |
| 173 | - const struct xt_entry_match *match, int numeric) |
| 174 | -{ |
| 175 | - const struct ip6t_ip6 *ip = ip_void; |
| 176 | - __multiport_print(match, numeric, ip->proto); |
| 177 | -} |
| 178 | - |
| 179 | static void __multiport_print_v1(const struct xt_entry_match *match, |
| 180 | int numeric, u_int16_t proto) |
| 181 | { |
| 182 | @@ -418,48 +267,6 @@ static void multiport_print6_v1(const vo |
| 183 | } |
| 184 | |
| 185 | /* Saves the union ipt_matchinfo in parsable form to stdout. */ |
| 186 | -static void __multiport_save(const struct xt_entry_match *match, |
| 187 | - u_int16_t proto) |
| 188 | -{ |
| 189 | - const struct xt_multiport *multiinfo |
| 190 | - = (const struct xt_multiport *)match->data; |
| 191 | - unsigned int i; |
| 192 | - |
| 193 | - switch (multiinfo->flags) { |
| 194 | - case XT_MULTIPORT_SOURCE: |
| 195 | - printf("--sports "); |
| 196 | - break; |
| 197 | - |
| 198 | - case XT_MULTIPORT_DESTINATION: |
| 199 | - printf("--dports "); |
| 200 | - break; |
| 201 | - |
| 202 | - case XT_MULTIPORT_EITHER: |
| 203 | - printf("--ports "); |
| 204 | - break; |
| 205 | - } |
| 206 | - |
| 207 | - for (i=0; i < multiinfo->count; i++) { |
| 208 | - printf("%s", i ? "," : ""); |
| 209 | - print_port(multiinfo->ports[i], proto, 1); |
| 210 | - } |
| 211 | - printf(" "); |
| 212 | -} |
| 213 | - |
| 214 | -static void multiport_save(const void *ip_void, |
| 215 | - const struct xt_entry_match *match) |
| 216 | -{ |
| 217 | - const struct ipt_ip *ip = ip_void; |
| 218 | - __multiport_save(match, ip->proto); |
| 219 | -} |
| 220 | - |
| 221 | -static void multiport_save6(const void *ip_void, |
| 222 | - const struct xt_entry_match *match) |
| 223 | -{ |
| 224 | - const struct ip6t_ip6 *ip = ip_void; |
| 225 | - __multiport_save(match, ip->proto); |
| 226 | -} |
| 227 | - |
| 228 | static void __multiport_save_v1(const struct xt_entry_match *match, |
| 229 | u_int16_t proto) |
| 230 | { |
| 231 | @@ -513,34 +320,6 @@ static struct xtables_match multiport_mt |
| 232 | { |
| 233 | .family = NFPROTO_IPV4, |
| 234 | .name = "multiport", |
| 235 | - .revision = 0, |
| 236 | - .version = XTABLES_VERSION, |
| 237 | - .size = XT_ALIGN(sizeof(struct xt_multiport)), |
| 238 | - .userspacesize = XT_ALIGN(sizeof(struct xt_multiport)), |
| 239 | - .help = multiport_help, |
| 240 | - .parse = multiport_parse, |
| 241 | - .final_check = multiport_check, |
| 242 | - .print = multiport_print, |
| 243 | - .save = multiport_save, |
| 244 | - .extra_opts = multiport_opts, |
| 245 | - }, |
| 246 | - { |
| 247 | - .family = NFPROTO_IPV6, |
| 248 | - .name = "multiport", |
| 249 | - .revision = 0, |
| 250 | - .version = XTABLES_VERSION, |
| 251 | - .size = XT_ALIGN(sizeof(struct xt_multiport)), |
| 252 | - .userspacesize = XT_ALIGN(sizeof(struct xt_multiport)), |
| 253 | - .help = multiport_help, |
| 254 | - .parse = multiport_parse6, |
| 255 | - .final_check = multiport_check, |
| 256 | - .print = multiport_print6, |
| 257 | - .save = multiport_save6, |
| 258 | - .extra_opts = multiport_opts, |
| 259 | - }, |
| 260 | - { |
| 261 | - .family = NFPROTO_IPV4, |
| 262 | - .name = "multiport", |
| 263 | .version = XTABLES_VERSION, |
| 264 | .revision = 1, |
| 265 | .size = XT_ALIGN(sizeof(struct xt_multiport_v1)), |
| 266 | |