diff options
author | Deti Fliegl <deti@fliegl.de> | 2005-11-03 18:43:14 +0000 |
---|---|---|
committer | Harald Welte <laforge@gnumonks.org> | 2005-11-03 18:43:14 +0000 |
commit | 361bac2f2c25ecabef125c6a8bb8dfc194bf73f1 (patch) | |
tree | a6c0f9b756c240965026bfb015d5e2978159c0a8 /extensions | |
parent | 8502747519e807ac3ed1f4147a5ce96d6c40e4a3 (diff) |
fix connmark, it's now only 32bits (Deti Fliegl <deti@fliegl.de)v1.3.4
We'ver screwed this up with the 2.6.14 release. It refuses any mask that
extends 32bits. We should have fixed this by adding a new target/match
revision, but now it's too late anyway :(
Diffstat (limited to 'extensions')
-rw-r--r-- | extensions/libipt_CONNMARK.c | 38 | ||||
-rw-r--r-- | extensions/libipt_connmark.c | 25 |
2 files changed, 10 insertions, 53 deletions
diff --git a/extensions/libipt_CONNMARK.c b/extensions/libipt_CONNMARK.c index bc739fca..2e17b3fa 100644 --- a/extensions/libipt_CONNMARK.c +++ b/extensions/libipt_CONNMARK.c @@ -72,25 +72,17 @@ parse(int c, char **argv, int invert, unsigned int *flags, struct ipt_connmark_target_info *markinfo = (struct ipt_connmark_target_info *)(*target)->data; -#ifdef KERNEL_64_USERSPACE_32 - markinfo->mask = ~0ULL; -#else - markinfo->mask = ~0UL; -#endif + markinfo->mask = 0xffffffffUL; switch (c) { char *end; case '1': markinfo->mode = IPT_CONNMARK_SET; -#ifdef KERNEL_64_USERSPACE_32 - markinfo->mark = strtoull(optarg, &end, 0); - if (*end == '/' && end[1] != '\0') - markinfo->mask = strtoull(end+1, &end, 0); -#else + markinfo->mark = strtoul(optarg, &end, 0); if (*end == '/' && end[1] != '\0') markinfo->mask = strtoul(end+1, &end, 0); -#endif + if (*end != '\0' || end == optarg) exit_error(PARAMETER_PROBLEM, "Bad MARK value `%s'", optarg); if (*flags) @@ -116,11 +108,8 @@ parse(int c, char **argv, int invert, unsigned int *flags, if (!*flags) exit_error(PARAMETER_PROBLEM, "CONNMARK target: Can't specify --mask without a operation"); -#ifdef KERNEL_64_USERSPACE_32 - markinfo->mask = strtoull(optarg, &end, 0); -#else markinfo->mask = strtoul(optarg, &end, 0); -#endif + if (*end != '\0' || end == optarg) exit_error(PARAMETER_PROBLEM, "Bad MASK value `%s'", optarg); break; @@ -139,22 +128,6 @@ final_check(unsigned int flags) "CONNMARK target: No operation specified"); } -#ifdef KERNEL_64_USERSPACE_32 -static void -print_mark(unsigned long long mark) -{ - printf("0x%llx", mark); -} - -static void -print_mask(const char *text, unsigned long long mask) -{ - if (mask != ~0ULL) - printf("%s0x%llx", text, mask); -} - -#else - static void print_mark(unsigned long mark) { @@ -164,10 +137,9 @@ print_mark(unsigned long mark) static void print_mask(const char *text, unsigned long mask) { - if (mask != ~0UL) + if (mask != 0xffffffffUL) printf("%s0x%lx", text, mask); } -#endif /* Prints out the target info. */ diff --git a/extensions/libipt_connmark.c b/extensions/libipt_connmark.c index 5bb24912..bc15f0d1 100644 --- a/extensions/libipt_connmark.c +++ b/extensions/libipt_connmark.c @@ -66,17 +66,13 @@ parse(int c, char **argv, int invert, unsigned int *flags, char *end; case '1': check_inverse(optarg, &invert, &optind, 0); -#ifdef KERNEL_64_USERSPACE_32 - markinfo->mark = strtoull(optarg, &end, 0); - markinfo->mask = ~0ULL; - if (*end == '/') - markinfo->mask = strtoull(end+1, &end, 0); -#else + markinfo->mark = strtoul(optarg, &end, 0); - markinfo->mask = ~0UL; + markinfo->mask = 0xffffffffUL; + if (*end == '/') markinfo->mask = strtoul(end+1, &end, 0); -#endif + if (*end != '\0' || end == optarg) exit_error(PARAMETER_PROBLEM, "Bad MARK value `%s'", optarg); if (invert) @@ -90,25 +86,14 @@ parse(int c, char **argv, int invert, unsigned int *flags, return 1; } -#ifdef KERNEL_64_USERSPACE_32 -static void -print_mark(unsigned long long mark, unsigned long long mask, int numeric) -{ - if(mask != ~0ULL) - printf("0x%llx/0x%llx ", mark, mask); - else - printf("0x%llx ", mark); -} -#else static void print_mark(unsigned long mark, unsigned long mask, int numeric) { - if(mask != ~0UL) + if(mask != 0xffffffffUL) printf("0x%lx/0x%lx ", mark, mask); else printf("0x%lx ", mark); } -#endif /* Final check; must have specified --mark. */ static void |