diff -urN iptables.old/extensions/libipt_multiport.c iptables.dev/extensions/libipt_multiport.c --- iptables.old/extensions/libipt_multiport.c 2005-02-19 20:19:17.000000000 +0100 +++ iptables.dev/extensions/libipt_multiport.c 2006-02-04 05:46:12.154127750 +0100 @@ -8,24 +8,6 @@ /* To ensure that iptables compiles with an old kernel */ #include "../include/linux/netfilter_ipv4/ipt_multiport.h" -/* Function which prints out usage message. */ -static void -help(void) -{ - printf( -"multiport v%s options:\n" -" --source-ports port[,port,port...]\n" -" --sports ...\n" -" match source port(s)\n" -" --destination-ports port[,port,port...]\n" -" --dports ...\n" -" match destination port(s)\n" -" --ports port[,port,port]\n" -" match both source and destination port(s)\n" -" NOTE: this kernel does not support port ranges in multiport.\n", -IPTABLES_VERSION); -} - static void help_v1(void) { @@ -75,26 +57,6 @@ "invalid port/service `%s' specified", port); } -static unsigned int -parse_multi_ports(const char *portstring, u_int16_t *ports, const char *proto) -{ - char *buffer, *cp, *next; - unsigned int i; - - buffer = strdup(portstring); - if (!buffer) exit_error(OTHER_PROBLEM, "strdup failed"); - - for (cp=buffer, i=0; cp && idata; - - switch (c) { - case '1': - check_inverse(argv[optind-1], &invert, &optind, 0); - proto = check_proto(entry); - multiinfo->count = parse_multi_ports(argv[optind-1], - multiinfo->ports, proto); - multiinfo->flags = IPT_MULTIPORT_SOURCE; - break; - - case '2': - check_inverse(argv[optind-1], &invert, &optind, 0); - proto = check_proto(entry); - multiinfo->count = parse_multi_ports(argv[optind-1], - multiinfo->ports, proto); - multiinfo->flags = IPT_MULTIPORT_DESTINATION; - break; - - case '3': - check_inverse(argv[optind-1], &invert, &optind, 0); - proto = check_proto(entry); - multiinfo->count = parse_multi_ports(argv[optind-1], - multiinfo->ports, proto); - multiinfo->flags = IPT_MULTIPORT_EITHER; - break; - - default: - return 0; - } - - if (invert) - exit_error(PARAMETER_PROBLEM, - "multiport does not support invert"); - - if (*flags) - exit_error(PARAMETER_PROBLEM, - "multiport can only have one option"); - *flags = 1; - return 1; -} - static int parse_v1(int c, char **argv, int invert, unsigned int *flags, const struct ipt_entry *entry, @@ -289,43 +199,6 @@ printf("%s", service); } -/* Prints out the matchinfo. */ -static void -print(const struct ipt_ip *ip, - const struct ipt_entry_match *match, - int numeric) -{ - const struct ipt_multiport *multiinfo - = (const struct ipt_multiport *)match->data; - unsigned int i; - - printf("multiport "); - - switch (multiinfo->flags) { - case IPT_MULTIPORT_SOURCE: - printf("sports "); - break; - - case IPT_MULTIPORT_DESTINATION: - printf("dports "); - break; - - case IPT_MULTIPORT_EITHER: - printf("ports "); - break; - - default: - printf("ERROR "); - break; - } - - for (i=0; i < multiinfo->count; i++) { - printf("%s", i ? "," : ""); - print_port(multiinfo->ports[i], ip->proto, numeric); - } - printf(" "); -} - static void print_v1(const struct ipt_ip *ip, const struct ipt_entry_match *match, @@ -369,34 +242,6 @@ printf(" "); } -/* Saves the union ipt_matchinfo in parsable form to stdout. */ -static void save(const struct ipt_ip *ip, const struct ipt_entry_match *match) -{ - const struct ipt_multiport *multiinfo - = (const struct ipt_multiport *)match->data; - unsigned int i; - - switch (multiinfo->flags) { - case IPT_MULTIPORT_SOURCE: - printf("--sports "); - break; - - case IPT_MULTIPORT_DESTINATION: - printf("--dports "); - break; - - case IPT_MULTIPORT_EITHER: - printf("--ports "); - break; - } - - for (i=0; i < multiinfo->count; i++) { - printf("%s", i ? "," : ""); - print_port(multiinfo->ports[i], ip->proto, 1); - } - printf(" "); -} - static void save_v1(const struct ipt_ip *ip, const struct ipt_entry_match *match) { @@ -432,19 +277,20 @@ printf(" "); } + static struct iptables_match multiport = { .next = NULL, .name = "multiport", - .revision = 0, .version = IPTABLES_VERSION, - .size = IPT_ALIGN(sizeof(struct ipt_multiport)), - .userspacesize = IPT_ALIGN(sizeof(struct ipt_multiport)), - .help = &help, + .revision = 0, + .size = IPT_ALIGN(sizeof(struct ipt_multiport_v1)), + .userspacesize = IPT_ALIGN(sizeof(struct ipt_multiport_v1)), + .help = &help_v1, .init = &init, - .parse = &parse, + .parse = &parse_v1, .final_check = &final_check, - .print = &print, - .save = &save, + .print = &print_v1, + .save = &save_v1, .extra_opts = opts };