From a32c699b6ea3a6d44406062e4b076071461ed2f2 Mon Sep 17 00:00:00 2001 From: gandalf Date: Wed, 26 May 2004 15:50:57 +0000 Subject: Fix 64bit kernel / 32bit userspace issue. --- extensions/libip6t_limit.c | 3 ++- extensions/libipt_conntrack.c | 34 +++++++++++++++++++++++++++++----- extensions/libipt_limit.c | 3 ++- 3 files changed, 33 insertions(+), 7 deletions(-) (limited to 'extensions') diff --git a/extensions/libip6t_limit.c b/extensions/libip6t_limit.c index 9516252..e141d01 100644 --- a/extensions/libip6t_limit.c +++ b/extensions/libip6t_limit.c @@ -11,7 +11,8 @@ #include #include #include -#include +/* For 64bit kernel / 32bit userspace */ +#include "../include/linux/netfilter_ipv6/ip6t_limit.h" #define IP6T_LIMIT_AVG "3/hour" #define IP6T_LIMIT_BURST 5 diff --git a/extensions/libipt_conntrack.c b/extensions/libipt_conntrack.c index 48c2f1d..49a2afb 100644 --- a/extensions/libipt_conntrack.c +++ b/extensions/libipt_conntrack.c @@ -11,7 +11,8 @@ #include #include #include -#include +/* For 64bit kernel / 32bit userspace */ +#include "../include/linux/netfilter_ipv4/ipt_conntrack.h" #ifndef IPT_CONNTRACK_STATE_UNTRACKED #define IPT_CONNTRACK_STATE_UNTRACKED (1 << (IP_CT_NUMBER + 3)) @@ -135,17 +136,29 @@ parse_statuses(const char *arg, struct ipt_conntrack_info *sinfo) exit_error(PARAMETER_PROBLEM, "Bad ctstatus `%s'", arg); } - +#ifdef KERNEL_64_USERSPACE_32 +static unsigned long long +parse_expire(const char *s) +{ + unsigned long long len; + + if (string_to_number_ll(s, 0, 0, &len) == -1) + exit_error(PARAMETER_PROBLEM, "expire value invalid: `%s'\n", s); + else + return len; +} +#else static unsigned long parse_expire(const char *s) { unsigned int len; - if (string_to_number(s, 0, 0xFFFFFFFF, &len) == -1) + if (string_to_number(s, 0, 0, &len) == -1) exit_error(PARAMETER_PROBLEM, "expire value invalid: `%s'\n", s); else return len; } +#endif /* If a single value is provided, min and max are both set to the value */ static void @@ -162,15 +175,19 @@ parse_expires(const char *s, struct ipt_conntrack_info *sinfo) cp++; sinfo->expires_min = buffer[0] ? parse_expire(buffer) : 0; - sinfo->expires_max = cp[0] ? parse_expire(cp) : 0xFFFFFFFF; + sinfo->expires_max = cp[0] ? parse_expire(cp) : -1; } free(buffer); if (sinfo->expires_min > sinfo->expires_max) exit_error(PARAMETER_PROBLEM, +#ifdef KERNEL_64_USERSPACE_32 + "expire min. range value `%llu' greater than max. " + "range value `%llu'", sinfo->expires_min, sinfo->expires_max); +#else "expire min. range value `%lu' greater than max. " "range value `%lu'", sinfo->expires_min, sinfo->expires_max); - +#endif } /* Function which parses command options; returns true if it @@ -485,10 +502,17 @@ matchinfo_print(const struct ipt_ip *ip, const struct ipt_entry_match *match, in if (sinfo->invflags & IPT_CONNTRACK_EXPIRES) printf("! "); +#ifdef KERNEL_64_USERSPACE_32 + if (sinfo->expires_max == sinfo->expires_min) + printf("%llu ", sinfo->expires_min); + else + printf("%llu:%llu ", sinfo->expires_min, sinfo->expires_max); +#else if (sinfo->expires_max == sinfo->expires_min) printf("%lu ", sinfo->expires_min); else printf("%lu:%lu ", sinfo->expires_min, sinfo->expires_max); +#endif } } diff --git a/extensions/libipt_limit.c b/extensions/libipt_limit.c index af381fa..4d52040 100644 --- a/extensions/libipt_limit.c +++ b/extensions/libipt_limit.c @@ -11,7 +11,8 @@ #include #include #include -#include +/* For 64bit kernel / 32bit userspace */ +#include "../include/linux/netfilter_ipv4/ipt_limit.h" #define IPT_LIMIT_AVG "3/hour" #define IPT_LIMIT_BURST 5 -- cgit v1.2.3