Author: cieciwa Date: Tue Aug 29 10:56:46 2006 GMT Module: SOURCES Tag: HEAD ---- Log message: - diff 1.3.5 and snap 20060829.
---- Files affected: SOURCES: iptables-20060829.patch (NONE -> 1.1) (NEW) ---- Diffs: ================================================================ Index: SOURCES/iptables-20060829.patch diff -u /dev/null SOURCES/iptables-20060829.patch:1.1 --- /dev/null Tue Aug 29 12:56:46 2006 +++ SOURCES/iptables-20060829.patch Tue Aug 29 12:56:41 2006 @@ -0,0 +1,2987 @@ +diff -Nur iptables-1.3.5/extensions/.connbytes-test iptables/extensions/.connbytes-test +--- iptables-1.3.5/extensions/.connbytes-test 2004-10-10 09:56:26.000000000 +0000 ++++ iptables/extensions/.connbytes-test 2006-08-28 10:40:02.000000000 +0000 +@@ -1,2 +1,2 @@ + #! /bin/sh +-[ -f $KERNEL_DIR/net/ipv4/netfilter/ipt_connbytes.c ] && echo connbytes ++[ -f $KERNEL_DIR/include/linux/netfilter_ipv4/ipt_connbytes.h ] && echo connbytes +diff -Nur iptables-1.3.5/extensions/.esp-test6 iptables/extensions/.esp-test6 +--- iptables-1.3.5/extensions/.esp-test6 2004-10-10 09:56:24.000000000 +0000 ++++ iptables/extensions/.esp-test6 2006-08-28 10:40:02.000000000 +0000 +@@ -1,2 +1,2 @@ + #!/bin/sh +-[ -f $KERNEL_DIR/net/ipv6/netfilter/ip6t_esp.c -a -f $KERNEL_DIR/include/linux/netfilter_ipv6/ip6t_esp.h ] && echo esp ++[ -f $KERNEL_DIR/include/linux/netfilter_ipv6/ip6t_esp.h ] && echo esp +diff -Nur iptables-1.3.5/extensions/libip6t_CONNSECMARK.c iptables/extensions/libip6t_CONNSECMARK.c +--- iptables-1.3.5/extensions/libip6t_CONNSECMARK.c 1970-01-01 00:00:00.000000000 +0000 ++++ iptables/extensions/libip6t_CONNSECMARK.c 2006-08-28 10:40:02.000000000 +0000 +@@ -0,0 +1,124 @@ ++/* ++ * Shared library add-on to ip6tables to add CONNSECMARK target support. ++ * ++ * Based on the MARK and CONNMARK targets. ++ * ++ * Copyright (C) 2006 Red Hat, Inc., James Morris <[EMAIL PROTECTED]> ++ */ ++#include <stdio.h> ++#include <string.h> ++#include <stdlib.h> ++#include <getopt.h> ++#include <ip6tables.h> ++#include <linux/netfilter/xt_CONNSECMARK.h> ++ ++#define PFX "CONNSECMARK target: " ++ ++static void help(void) ++{ ++ printf( ++"CONNSECMARK target v%s options:\n" ++" --save Copy security mark from packet to conntrack\n" ++" --restore Copy security mark from connection to packet\n" ++"\n", ++IPTABLES_VERSION); ++} ++ ++static struct option opts[] = { ++ { "save", 0, 0, '1' }, ++ { "restore", 0, 0, '2' }, ++ { 0 } ++}; ++ ++static int parse(int c, char **argv, int invert, unsigned int *flags, ++ const struct ip6t_entry *entry, struct ip6t_entry_target **target) ++{ ++ struct xt_connsecmark_target_info *info = ++ (struct xt_connsecmark_target_info*)(*target)->data; ++ ++ switch (c) { ++ case '1': ++ if (*flags & CONNSECMARK_SAVE) ++ exit_error(PARAMETER_PROBLEM, PFX ++ "Can't specify --save twice"); ++ info->mode = CONNSECMARK_SAVE; ++ *flags |= CONNSECMARK_SAVE; ++ break; ++ ++ case '2': ++ if (*flags & CONNSECMARK_RESTORE) ++ exit_error(PARAMETER_PROBLEM, PFX ++ "Can't specify --restore twice"); ++ info->mode = CONNSECMARK_RESTORE; ++ *flags |= CONNSECMARK_RESTORE; ++ break; ++ ++ default: ++ return 0; ++ } ++ ++ return 1; ++} ++ ++static void final_check(unsigned int flags) ++{ ++ if (!flags) ++ exit_error(PARAMETER_PROBLEM, PFX "parameter required"); ++ ++ if (flags == (CONNSECMARK_SAVE|CONNSECMARK_RESTORE)) ++ exit_error(PARAMETER_PROBLEM, PFX "only one flag of --save " ++ "or --restore is allowed"); ++} ++ ++static void print_connsecmark(struct xt_connsecmark_target_info *info) ++{ ++ switch (info->mode) { ++ case CONNSECMARK_SAVE: ++ printf("save "); ++ break; ++ ++ case CONNSECMARK_RESTORE: ++ printf("restore "); ++ break; ++ ++ default: ++ exit_error(OTHER_PROBLEM, PFX "invalid mode %hhu\n", info->mode); ++ } ++} ++ ++static void print(const struct ip6t_ip6 *ip, ++ const struct ip6t_entry_target *target, int numeric) ++{ ++ struct xt_connsecmark_target_info *info = ++ (struct xt_connsecmark_target_info*)(target)->data; ++ ++ printf("CONNSECMARK "); ++ print_connsecmark(info); ++} ++ ++static void save(const struct ip6t_ip6 *ip, const struct ip6t_entry_target *target) ++{ ++ struct xt_connsecmark_target_info *info = ++ (struct xt_connsecmark_target_info*)target->data; ++ ++ printf("--"); ++ print_connsecmark(info); ++} ++ ++static struct ip6tables_target connsecmark = { ++ .name = "CONNSECMARK", ++ .version = IPTABLES_VERSION, ++ .size = IP6T_ALIGN(sizeof(struct xt_connsecmark_target_info)), ++ .userspacesize = IP6T_ALIGN(sizeof(struct xt_connsecmark_target_info)), ++ .parse = &parse, ++ .help = &help, ++ .final_check = &final_check, ++ .print = &print, ++ .save = &save, ++ .extra_opts = opts ++}; ++ ++void _init(void) ++{ ++ register_target6(&connsecmark); ++} +diff -Nur iptables-1.3.5/extensions/libip6t_CONNSECMARK.man iptables/extensions/libip6t_CONNSECMARK.man +--- iptables-1.3.5/extensions/libip6t_CONNSECMARK.man 1970-01-01 00:00:00.000000000 +0000 ++++ iptables/extensions/libip6t_CONNSECMARK.man 2006-08-28 10:40:02.000000000 +0000 +@@ -0,0 +1,15 @@ ++This module copies security markings from packets to connections ++(if unlabeled), and from connections back to packets (also only ++if unlabeled). Typically used in conjunction with SECMARK, it is ++only valid in the ++.B mangle ++table. ++.TP ++.B --save ++If the packet has a security marking, copy it to the connection ++if the connection is not marked. ++.TP ++.B --restore ++If the packet does not have a security marking, and the connection ++does, copy the security marking from the connection to the packet. ++ +diff -Nur iptables-1.3.5/extensions/libip6t_esp.c iptables/extensions/libip6t_esp.c +--- iptables-1.3.5/extensions/libip6t_esp.c 2004-10-10 09:56:27.000000000 +0000 ++++ iptables/extensions/libip6t_esp.c 2006-08-28 10:40:02.000000000 +0000 +@@ -61,6 +61,9 @@ + + spis[0] = buffer[0] ? parse_esp_spi(buffer) : 0; + spis[1] = cp[0] ? parse_esp_spi(cp) : 0xFFFFFFFF; ++ if (spis[0] > spis[1]) ++ exit_error(PARAMETER_PROBLEM, ++ "Invalid ESP spi range: %s", spistring); + } + free(buffer); + } +diff -Nur iptables-1.3.5/extensions/libip6t_icmp6.c iptables/extensions/libip6t_icmp6.c +--- iptables-1.3.5/extensions/libip6t_icmp6.c 1970-01-01 00:00:00.000000000 +0000 ++++ iptables/extensions/libip6t_icmp6.c 2006-08-28 10:40:02.000000000 +0000 +@@ -0,0 +1,278 @@ ++/* Shared library add-on to iptables to add ICMP support. */ ++#include <stdio.h> ++#include <netdb.h> ++#include <string.h> ++#include <stdlib.h> ++#include <getopt.h> ++#include <ip6tables.h> ++#include <linux/netfilter_ipv6/ip6_tables.h> ++ ++struct icmpv6_names { ++ const char *name; ++ u_int8_t type; ++ u_int8_t code_min, code_max; ++}; ++ ++static const struct icmpv6_names icmpv6_codes[] = { ++ { "destination-unreachable", 1, 0, 0xFF }, ++ { "no-route", 1, 0, 0 }, ++ { "communication-prohibited", 1, 1, 1 }, ++ { "address-unreachable", 1, 3, 3 }, ++ { "port-unreachable", 1, 4, 4 }, ++ ++ { "packet-too-big", 2, 0, 0xFF }, ++ ++ { "time-exceeded", 3, 0, 0xFF }, ++ /* Alias */ { "ttl-exceeded", 3, 0, 0xFF }, ++ { "ttl-zero-during-transit", 3, 0, 0 }, ++ { "ttl-zero-during-reassembly", 3, 1, 1 }, ++ ++ { "parameter-problem", 4, 0, 0xFF }, ++ { "bad-header", 4, 0, 0 }, ++ { "unknown-header-type", 4, 1, 1 }, ++ { "unknown-option", 4, 2, 2 }, ++ ++ { "echo-request", 128, 0, 0xFF }, ++ /* Alias */ { "ping", 128, 0, 0xFF }, ++ ++ { "echo-reply", 129, 0, 0xFF }, ++ /* Alias */ { "pong", 129, 0, 0xFF }, ++ ++ { "router-solicitation", 133, 0, 0xFF }, ++ ++ { "router-advertisement", 134, 0, 0xFF }, ++ ++ { "neighbour-solicitation", 135, 0, 0xFF }, ++ /* Alias */ { "neighbor-solicitation", 135, 0, 0xFF }, ++ ++ { "neighbour-advertisement", 136, 0, 0xFF }, ++ /* Alias */ { "neighbor-advertisement", 136, 0, 0xFF }, ++ ++ { "redirect", 137, 0, 0xFF }, ++ ++}; ++ ++static void ++print_icmpv6types() ++{ ++ unsigned int i; ++ printf("Valid ICMPv6 Types:"); ++ ++ for (i = 0; i < sizeof(icmpv6_codes)/sizeof(struct icmpv6_names); i++) { ++ if (i && icmpv6_codes[i].type == icmpv6_codes[i-1].type) { ++ if (icmpv6_codes[i].code_min == icmpv6_codes[i-1].code_min ++ && (icmpv6_codes[i].code_max ++ == icmpv6_codes[i-1].code_max)) ++ printf(" (%s)", icmpv6_codes[i].name); ++ else ++ printf("\n %s", icmpv6_codes[i].name); ++ } ++ else ++ printf("\n%s", icmpv6_codes[i].name); ++ } ++ printf("\n"); ++} ++ ++/* Function which prints out usage message. */ ++static void ++help(void) ++{ ++ printf( ++"ICMPv6 v%s options:\n" ++" --icmpv6-type [!] typename match icmpv6 type\n" ++" (or numeric type or type/code)\n" ++"\n", IPTABLES_VERSION); ++ print_icmpv6types(); ++} ++ ++static struct option opts[] = { ++ { "icmpv6-type", 1, 0, '1' }, ++ {0} ++}; ++ ++static void ++parse_icmpv6(const char *icmpv6type, u_int8_t *type, u_int8_t code[]) ++{ ++ unsigned int limit = sizeof(icmpv6_codes)/sizeof(struct icmpv6_names); ++ unsigned int match = limit; ++ unsigned int i; ++ ++ for (i = 0; i < limit; i++) { ++ if (strncasecmp(icmpv6_codes[i].name, icmpv6type, strlen(icmpv6type)) ++ == 0) { ++ if (match != limit) ++ exit_error(PARAMETER_PROBLEM, ++ "Ambiguous ICMPv6 type `%s':" ++ " `%s' or `%s'?", ++ icmpv6type, ++ icmpv6_codes[match].name, ++ icmpv6_codes[i].name); ++ match = i; ++ } ++ } ++ ++ if (match != limit) { ++ *type = icmpv6_codes[match].type; ++ code[0] = icmpv6_codes[match].code_min; ++ code[1] = icmpv6_codes[match].code_max; ++ } else { ++ char *slash; ++ char buffer[strlen(icmpv6type) + 1]; ++ unsigned int number; ++ ++ strcpy(buffer, icmpv6type); ++ slash = strchr(buffer, '/'); ++ ++ if (slash) ++ *slash = '\0'; ++ ++ if (string_to_number(buffer, 0, 255, &number) == -1) ++ exit_error(PARAMETER_PROBLEM, ++ "Invalid ICMPv6 type `%s'\n", buffer); ++ *type = number; ++ if (slash) { ++ if (string_to_number(slash+1, 0, 255, &number) == -1) ++ exit_error(PARAMETER_PROBLEM, ++ "Invalid ICMPv6 code `%s'\n", ++ slash+1); ++ code[0] = code[1] = number; ++ } else { ++ code[0] = 0; ++ code[1] = 0xFF; ++ } ++ } ++} ++ ++/* Initialize the match. */ ++static void ++init(struct ip6t_entry_match *m, unsigned int *nfcache) ++{ ++ struct ip6t_icmp *icmpv6info = (struct ip6t_icmp *)m->data; ++ ++ icmpv6info->code[1] = 0xFF; ++} ++ ++/* Function which parses command options; returns true if it ++ ate an option */ ++static int ++parse(int c, char **argv, int invert, unsigned int *flags, ++ const struct ip6t_entry *entry, ++ unsigned int *nfcache, ++ struct ip6t_entry_match **match) ++{ ++ struct ip6t_icmp *icmpv6info = (struct ip6t_icmp *)(*match)->data; ++ ++ switch (c) { ++ case '1': ++ if (*flags == 1) ++ exit_error(PARAMETER_PROBLEM, ++ "icmpv6 match: only use --icmpv6-type once!"); ++ check_inverse(optarg, &invert, &optind, 0); ++ parse_icmpv6(argv[optind-1], &icmpv6info->type, ++ icmpv6info->code); ++ if (invert) ++ icmpv6info->invflags |= IP6T_ICMP_INV; ++ *flags = 1; ++ break; ++ ++ default: ++ return 0; ++ } ++ ++ return 1; ++} ++ ++static void print_icmpv6type(u_int8_t type, ++ u_int8_t code_min, u_int8_t code_max, ++ int invert, ++ int numeric) ++{ ++ if (!numeric) { ++ unsigned int i; ++ ++ for (i = 0; ++ i < sizeof(icmpv6_codes)/sizeof(struct icmpv6_names); ++ i++) { ++ if (icmpv6_codes[i].type == type ++ && icmpv6_codes[i].code_min == code_min ++ && icmpv6_codes[i].code_max == code_max) ++ break; ++ } ++ ++ if (i != sizeof(icmpv6_codes)/sizeof(struct icmpv6_names)) { ++ printf("%s%s ", ++ invert ? "!" : "", ++ icmpv6_codes[i].name); ++ return; ++ } ++ } ++ ++ if (invert) ++ printf("!"); ++ ++ printf("type %u", type); ++ if (code_min == 0 && code_max == 0xFF) ++ printf(" "); ++ else if (code_min == code_max) ++ printf(" code %u ", code_min); ++ else ++ printf(" codes %u-%u ", code_min, code_max); ++} ++ ++/* Prints out the union ipt_matchinfo. */ ++static void ++print(const struct ip6t_ip6 *ip, ++ const struct ip6t_entry_match *match, ++ int numeric) ++{ ++ const struct ip6t_icmp *icmpv6 = (struct ip6t_icmp *)match->data; ++ ++ printf("ipv6-icmp "); ++ print_icmpv6type(icmpv6->type, icmpv6->code[0], icmpv6->code[1], ++ icmpv6->invflags & IP6T_ICMP_INV, ++ numeric); ++ ++ if (icmpv6->invflags & ~IP6T_ICMP_INV) ++ printf("Unknown invflags: 0x%X ", ++ icmpv6->invflags & ~IP6T_ICMP_INV); ++} ++ ++/* Saves the match in parsable form to stdout. */ ++static void save(const struct ip6t_ip6 *ip, const struct ip6t_entry_match *match) ++{ ++ const struct ip6t_icmp *icmpv6 = (struct ip6t_icmp *)match->data; ++ ++ if (icmpv6->invflags & IP6T_ICMP_INV) ++ printf("! "); ++ ++ printf("--icmpv6-type %u", icmpv6->type); ++ if (icmpv6->code[0] != 0 || icmpv6->code[1] != 0xFF) ++ printf("/%u", icmpv6->code[0]); ++ printf(" "); ++} ++ ++static void final_check(unsigned int flags) ++{ ++ if (!flags) ++ exit_error(PARAMETER_PROBLEM, ++ "icmpv6 match: You must specify `--icmpv6-type'"); ++} ++ ++static struct ip6tables_match icmpv6 = { ++ .name = "icmp6", ++ .version = IPTABLES_VERSION, ++ .size = IP6T_ALIGN(sizeof(struct ip6t_icmp)), ++ .userspacesize = IP6T_ALIGN(sizeof(struct ip6t_icmp)), ++ .help = &help, ++ .init = &init, ++ .parse = &parse, ++ .final_check = &final_check, ++ .print = &print, ++ .save = &save, ++ .extra_opts = opts, ++}; ++ ++void _init(void) ++{ ++ register_match6(&icmpv6); ++} +diff -Nur iptables-1.3.5/extensions/libip6t_icmp6.man iptables/extensions/libip6t_icmp6.man +--- iptables-1.3.5/extensions/libip6t_icmp6.man 1970-01-01 00:00:00.000000000 +0000 ++++ iptables/extensions/libip6t_icmp6.man 2006-08-28 10:40:02.000000000 +0000 +@@ -0,0 +1,14 @@ ++This extension is loaded if `--protocol ipv6-icmp' or `--protocol icmpv6' is ++specified. It provides the following option: ++.TP ++.BR "--icmpv6-type " "[!] \fItype\fP[/\fIcode\fP]|\fItypename\fP" ++This allows specification of the ICMPv6 type, which can be a numeric ++ICMPv6 ++.IR type , ++.IR type ++and ++.IR code , ++or one of the ICMPv6 type names shown by the command ++.nf ++ ip6tables -p ipv6-icmp -h ++.fi +diff -Nur iptables-1.3.5/extensions/libip6t_icmpv6.c iptables/extensions/libip6t_icmpv6.c +--- iptables-1.3.5/extensions/libip6t_icmpv6.c 2005-02-19 19:19:17.000000000 +0000 ++++ iptables/extensions/libip6t_icmpv6.c 1970-01-01 00:00:00.000000000 +0000 +@@ -1,272 +0,0 @@ +-/* Shared library add-on to iptables to add ICMP support. */ +-#include <stdio.h> +-#include <netdb.h> +-#include <string.h> +-#include <stdlib.h> +-#include <getopt.h> +-#include <ip6tables.h> +-#include <linux/netfilter_ipv6/ip6_tables.h> +- +-struct icmpv6_names { +- const char *name; +- u_int8_t type; +- u_int8_t code_min, code_max; +-}; +- +-static const struct icmpv6_names icmpv6_codes[] = { +- { "destination-unreachable", 1, 0, 0xFF }, +- { "no-route", 1, 0, 0 }, +- { "communication-prohibited", 1, 1, 1 }, +- { "address-unreachable", 1, 3, 3 }, +- { "port-unreachable", 1, 4, 4 }, +- +- { "packet-too-big", 2, 0, 0xFF }, +- +- { "time-exceeded", 3, 0, 0xFF }, +- /* Alias */ { "ttl-exceeded", 3, 0, 0xFF }, +- { "ttl-zero-during-transit", 3, 0, 0 }, +- { "ttl-zero-during-reassembly", 3, 1, 1 }, +- +- { "parameter-problem", 4, 0, 0xFF }, +- { "bad-header", 4, 0, 0 }, +- { "unknown-header-type", 4, 1, 1 }, +- { "unknown-option", 4, 2, 2 }, +- +- { "echo-request", 128, 0, 0xFF }, +- /* Alias */ { "ping", 128, 0, 0xFF }, +- +- { "echo-reply", 129, 0, 0xFF }, +- /* Alias */ { "pong", 129, 0, 0xFF }, +- +- { "router-solicitation", 133, 0, 0xFF }, +- +- { "router-advertisement", 134, 0, 0xFF }, +- +- { "neighbour-solicitation", 135, 0, 0xFF }, +- /* Alias */ { "neighbor-solicitation", 135, 0, 0xFF }, +- +- { "neighbour-advertisement", 136, 0, 0xFF }, +- /* Alias */ { "neighbor-advertisement", 136, 0, 0xFF }, +- +- { "redirect", 137, 0, 0xFF }, +- +-}; +- +-static void +-print_icmpv6types() +-{ +- unsigned int i; +- printf("Valid ICMPv6 Types:"); +- +- for (i = 0; i < sizeof(icmpv6_codes)/sizeof(struct icmpv6_names); i++) { +- if (i && icmpv6_codes[i].type == icmpv6_codes[i-1].type) { +- if (icmpv6_codes[i].code_min == icmpv6_codes[i-1].code_min +- && (icmpv6_codes[i].code_max +- == icmpv6_codes[i-1].code_max)) +- printf(" (%s)", icmpv6_codes[i].name); +- else +- printf("\n %s", icmpv6_codes[i].name); +- } +- else +- printf("\n%s", icmpv6_codes[i].name); +- } +- printf("\n"); +-} +- +-/* Function which prints out usage message. */ +-static void +-help(void) +-{ +- printf( +-"ICMPv6 v%s options:\n" +-" --icmpv6-type [!] typename match icmpv6 type\n" +-" (or numeric type or type/code)\n" +-"\n", IPTABLES_VERSION); +- print_icmpv6types(); +-} +- +-static struct option opts[] = { +- { "icmpv6-type", 1, 0, '1' }, +- {0} +-}; +- +-static void +-parse_icmpv6(const char *icmpv6type, u_int8_t *type, u_int8_t code[]) +-{ +- unsigned int limit = sizeof(icmpv6_codes)/sizeof(struct icmpv6_names); +- unsigned int match = limit; +- unsigned int i; +- +- for (i = 0; i < limit; i++) { +- if (strncasecmp(icmpv6_codes[i].name, icmpv6type, strlen(icmpv6type)) +- == 0) { +- if (match != limit) +- exit_error(PARAMETER_PROBLEM, +- "Ambiguous ICMPv6 type `%s':" +- " `%s' or `%s'?", +- icmpv6type, +- icmpv6_codes[match].name, +- icmpv6_codes[i].name); +- match = i; +- } +- } +- <<Diff was trimmed, longer than 597 lines>> _______________________________________________ pld-cvs-commit mailing list pld-cvs-commit@lists.pld-linux.org http://lists.pld-linux.org/mailman/listinfo/pld-cvs-commit