Author: hawk                         Date: Mon Sep 21 11:49:32 2009 GMT
Module: packages                      Tag: HEAD
---- Log message:
- fixes from upstream

---- Files affected:
packages/ulogd:
   ulogd-git_fixes.patch (NONE -> 1.1)  (NEW)

---- Diffs:

================================================================
Index: packages/ulogd/ulogd-git_fixes.patch
diff -u /dev/null packages/ulogd/ulogd-git_fixes.patch:1.1
--- /dev/null   Mon Sep 21 13:49:32 2009
+++ packages/ulogd/ulogd-git_fixes.patch        Mon Sep 21 13:49:26 2009
@@ -0,0 +1,846 @@
+diff -urN ulogd-2.0.0beta3.orig/doc/mysql-ulogd2-flat.sql 
ulogd-2.0.0beta3/doc/mysql-ulogd2-flat.sql
+--- ulogd-2.0.0beta3.orig/doc/mysql-ulogd2-flat.sql    2009-03-06 
18:54:04.000000000 +0100
++++ ulogd-2.0.0beta3/doc/mysql-ulogd2-flat.sql 2009-09-17 21:35:22.000000000 
+0200
+@@ -107,19 +107,19 @@
+ 
+ DROP VIEW IF EXISTS `view_tcp`;
+ CREATE SQL SECURITY INVOKER VIEW `view_tcp` AS
+-        SELECT * FROM ulog2 WHERE ulog2.oob_family = 6;
++        SELECT * FROM ulog2 WHERE ulog2.ip_protocol = 6;
+ 
+ DROP VIEW IF EXISTS `view_udp`;
+ CREATE SQL SECURITY INVOKER VIEW `view_udp` AS
+-        SELECT * FROM ulog2 WHERE ulog2.oob_family = 17;
++        SELECT * FROM ulog2 WHERE ulog2.ip_protocol = 17;
+ 
+ DROP VIEW IF EXISTS `view_icmp`;
+ CREATE SQL SECURITY INVOKER VIEW `view_icmp` AS
+-        SELECT * FROM ulog2 WHERE ulog2.oob_family = 1;
++        SELECT * FROM ulog2 WHERE ulog2.ip_protocol = 1;
+ 
+ DROP VIEW IF EXISTS `view_icmpv6`;
+ CREATE SQL SECURITY INVOKER VIEW `view_icmpv6` AS
+-        SELECT * FROM ulog2 WHERE ulog2.oob_family = 58;
++        SELECT * FROM ulog2 WHERE ulog2.ip_protocol = 58;
+ 
+ -- ulog view
+ DROP VIEW IF EXISTS `ulog`;
+@@ -222,11 +222,11 @@
+ 
+ DROP VIEW IF EXISTS `view_tcp_quad`;
+ CREATE SQL SECURITY INVOKER VIEW `view_tcp_quad` AS
+-      SELECT _id,BIN_TO_IPV6(ip_saddr_bin) AS 
ip_saddr_str,tcp_sport,BIN_TO_IPV6(ip_daddr_bin) AS ip_daddr_str,tcp_dport FROM 
ulog2 WHERE ulog2.oob_family = 6;
++      SELECT _id,BIN_TO_IPV6(ip_saddr_bin) AS 
ip_saddr_str,tcp_sport,BIN_TO_IPV6(ip_daddr_bin) AS ip_daddr_str,tcp_dport FROM 
ulog2 WHERE ulog2.ip_protocol = 6;
+ 
+ DROP VIEW IF EXISTS `view_udp_quad`;
+ CREATE SQL SECURITY INVOKER VIEW `view_udp_quad` AS
+-      SELECT _id,BIN_TO_IPV6(ip_saddr_bin) AS 
ip_saddr_str,udp_sport,BIN_TO_IPV6(ip_daddr_bin) AS ip_daddr_str,udp_dport FROM 
ulog2 WHERE ulog2.oob_family = 17;
++      SELECT _id,BIN_TO_IPV6(ip_saddr_bin) AS 
ip_saddr_str,udp_sport,BIN_TO_IPV6(ip_daddr_bin) AS ip_daddr_str,udp_dport FROM 
ulog2 WHERE ulog2.ip_protocol = 17;
+ 
+ 
+ 
+diff -urN ulogd-2.0.0beta3.orig/doc/pgsql-ulogd2-flat.sql 
ulogd-2.0.0beta3/doc/pgsql-ulogd2-flat.sql
+--- ulogd-2.0.0beta3.orig/doc/pgsql-ulogd2-flat.sql    2009-03-06 
18:54:04.000000000 +0100
++++ ulogd-2.0.0beta3/doc/pgsql-ulogd2-flat.sql 2009-09-17 21:35:22.000000000 
+0200
+@@ -108,16 +108,16 @@
+ --
+ 
+ CREATE OR REPLACE VIEW view_tcp AS
+-        SELECT * FROM ulog2 WHERE ulog2.oob_family = 6;
++        SELECT * FROM ulog2 WHERE ulog2.ip_protocol = 6;
+ 
+ CREATE OR REPLACE VIEW view_udp AS
+-        SELECT * FROM ulog2 WHERE ulog2.oob_family = 17;
++        SELECT * FROM ulog2 WHERE ulog2.ip_protocol = 17;
+ 
+ CREATE OR REPLACE VIEW view_icmp AS
+-        SELECT * FROM ulog2 WHERE ulog2.oob_family = 1;
++        SELECT * FROM ulog2 WHERE ulog2.ip_protocol = 1;
+ 
+ CREATE OR REPLACE VIEW view_icmpv6 AS
+-        SELECT * FROM ulog2 WHERE ulog2.oob_family = 58;
++        SELECT * FROM ulog2 WHERE ulog2.ip_protocol = 58;
+ 
+ -- complete view
+ CREATE OR REPLACE VIEW ulog AS
+@@ -179,10 +179,10 @@
+ 
+ -- shortcuts
+ CREATE OR REPLACE VIEW view_tcp_quad AS
+-        SELECT _id,ip_saddr_str,tcp_sport,ip_daddr_str,tcp_dport FROM ulog2 
WHERE ulog2.oob_family = 6;
++        SELECT _id,ip_saddr_str,tcp_sport,ip_daddr_str,tcp_dport FROM ulog2 
WHERE ulog2.ip_protocol = 6;
+ 
+ CREATE OR REPLACE VIEW view_udp_quad AS
+-        SELECT _id,ip_saddr_str,udp_sport,ip_daddr_str,udp_dport FROM ulog2 
WHERE ulog2.oob_family = 17;
++        SELECT _id,ip_saddr_str,udp_sport,ip_daddr_str,udp_dport FROM ulog2 
WHERE ulog2.ip_protocol = 17;
+ 
+ --
+ -- conntrack
+diff -urN ulogd-2.0.0beta3.orig/doc/ulogd.sgml ulogd-2.0.0beta3/doc/ulogd.sgml
+--- ulogd-2.0.0beta3.orig/doc/ulogd.sgml       2008-09-12 00:06:46.000000000 
+0200
++++ ulogd-2.0.0beta3/doc/ulogd.sgml    2009-09-17 21:35:22.000000000 +0200
+@@ -6,7 +6,7 @@
+ 
+ <title>ULOGD 2.x - the Netfilter Userspace Logging Daemon</title>
+ <author>Harald Welte &lt;[email protected]&gt, Eric Leblond 
&lt;[email protected]&gt</author>
+-<date>Revision 2008/09/03</date>
++<date>Revision 2009/04/18</date>
+ 
+ <abstract>
+ This is the documentation for <tt>ulogd-2.x</tt>, the second generation
+@@ -464,6 +464,14 @@
+ <tag>procedure</tag> 
+ Stored procedure that will be run with the argument specified in the
+ table variable.
++Behaviour of the procedure option can be twitted by using specific name.
++If procedure name is:
++<itemize>
++<item>"INSERT": A classic INSERT SQL query is done in the table pointed by the
++  "table" variable.</item>
++<item>start with "INSERT ": Configuration has to specify the start of the 
INSERT query that will be used. For example,
++a typical value is "INSERT INTO ulog2".</item>
++</itemize>
+ <tag>db</tag>
+ Name of the mysql database.
+ <tag>host</tag>
+diff -urN ulogd-2.0.0beta3.orig/filter/ulogd_filter_HWHDR.c 
ulogd-2.0.0beta3/filter/ulogd_filter_HWHDR.c
+--- ulogd-2.0.0beta3.orig/filter/ulogd_filter_HWHDR.c  2009-03-06 
18:54:04.000000000 +0100
++++ ulogd-2.0.0beta3/filter/ulogd_filter_HWHDR.c       2009-09-17 
21:35:22.000000000 +0200
+@@ -31,6 +31,8 @@
+ #include <linux/if_ether.h>
+ #include <ulogd/ulogd.h>
+ 
++#define HWADDR_LENGTH 128
++
+ enum input_keys {
+       KEY_RAW_TYPE,
+       KEY_OOB_PROTOCOL,
+@@ -44,8 +46,10 @@
+       KEY_MAC_TYPE,
+       KEY_MAC_PROTOCOL,
+       KEY_MAC_SADDR,
++      START_KEY = KEY_MAC_SADDR,
+       KEY_MAC_DADDR,
+       KEY_MAC_ADDR,
++      MAX_KEY = KEY_MAC_ADDR,
+ };
+ 
+ static struct ulogd_key mac2str_inp[] = {
+@@ -94,42 +98,38 @@
+       },
+       [KEY_MAC_SADDR] = {
+               .type = ULOGD_RET_STRING,
+-              .flags = ULOGD_RETF_FREE,
+               .name = "mac.saddr.str",
+       },
+       [KEY_MAC_DADDR] = {
+               .type = ULOGD_RET_STRING,
+-              .flags = ULOGD_RETF_FREE,
+               .name = "mac.daddr.str",
+       },
+       [KEY_MAC_ADDR] = {
+               .type = ULOGD_RET_STRING,
+-              .flags = ULOGD_RETF_FREE,
+               .name = "mac.str",
+       },
+ };
+ 
++static char hwmac_str[MAX_KEY - START_KEY][HWADDR_LENGTH];
++
+ static int parse_mac2str(struct ulogd_key *ret, unsigned char *mac,
+                        int okey, int len)
+ {
+-      char *mac_str;
+       char *buf_cur;
+       int i;
+ 
+-      if (len > 0)
+-              mac_str = calloc(len/sizeof(char)*3 + 1, sizeof(char));
+-      else
+-              mac_str = strdup("");
+-
+-      if (mac_str == NULL)
++      if (len/sizeof(char)*3 + 1 > HWADDR_LENGTH)
+               return ULOGD_IRET_ERR;
+ 
+-      buf_cur = mac_str;
++      if (len == 0)
++              hwmac_str[okey - START_KEY][0] = 0;
++
++      buf_cur = hwmac_str[okey - START_KEY];
+       for (i = 0; i < len; i++)
+               buf_cur += sprintf(buf_cur, "%02x%c", mac[i],
+                               i == len - 1 ? 0 : ':');
+ 
+-      okey_set_ptr(&ret[okey], mac_str);
++      okey_set_ptr(&ret[okey], hwmac_str[okey - START_KEY]);
+ 
+       return ULOGD_IRET_OK;
+ }
+diff -urN ulogd-2.0.0beta3.orig/filter/ulogd_filter_IFINDEX.c 
ulogd-2.0.0beta3/filter/ulogd_filter_IFINDEX.c
+--- ulogd-2.0.0beta3.orig/filter/ulogd_filter_IFINDEX.c        2009-03-06 
18:54:04.000000000 +0100
++++ ulogd-2.0.0beta3/filter/ulogd_filter_IFINDEX.c     2009-09-17 
21:35:22.000000000 +0200
+@@ -30,12 +30,14 @@
+ static struct ulogd_key ifindex_keys[] = {
+       { 
+               .type = ULOGD_RET_STRING,
+-              .flags = ULOGD_RETF_NONE | ULOGD_RETF_FREE,
++              .len = IFNAMSIZ,
++              .flags = ULOGD_RETF_NONE,
+               .name = "oob.in", 
+       },
+       { 
+               .type = ULOGD_RET_STRING,
+-              .flags = ULOGD_RETF_NONE | ULOGD_RETF_FREE,
++              .len = IFNAMSIZ,
++              .flags = ULOGD_RETF_NONE,
+               .name = "oob.out", 
+       },
+ };
+@@ -62,25 +64,18 @@
+ {
+       struct ulogd_key *ret = pi->output.keys;
+       struct ulogd_key *inp = pi->input.keys;
+-      void *ptr;
++      static char indev[IFNAMSIZ];
++      static char outdev[IFNAMSIZ];
+ 
+-      ptr = calloc(IFNAMSIZ, sizeof(char));
+-      if (!ptr)
+-              return ULOGD_IRET_ERR;
+-
+-      nlif_index2name(nlif_inst, ikey_get_u32(&inp[0]), ptr);
+-      if (((char *)ptr)[0] == '*')
+-              ((char *)(ptr))[0] = 0;
+-      okey_set_ptr(&ret[0], ptr);
+-
+-      ptr = calloc(IFNAMSIZ, sizeof(char));
+-      if (!ptr)
+-              return ULOGD_IRET_ERR;
+-
+-      nlif_index2name(nlif_inst, ikey_get_u32(&inp[1]), ptr);
+-      if (((char *)ptr)[0] == '*')
+-              ((char *)(ptr))[0] = 0; 
+-      okey_set_ptr(&ret[1], ptr);
++      nlif_index2name(nlif_inst, ikey_get_u32(&inp[0]), indev);
++      if (indev[0] == '*')
++              indev[0] = 0;
++      okey_set_ptr(&ret[0], indev);
++
++      nlif_index2name(nlif_inst, ikey_get_u32(&inp[1]), outdev);
++      if (outdev[0] == '*')
++              outdev[0] = 0;
++      okey_set_ptr(&ret[1], outdev);
+ 
+       return ULOGD_IRET_OK;
+ }
+diff -urN ulogd-2.0.0beta3.orig/filter/ulogd_filter_IP2BIN.c 
ulogd-2.0.0beta3/filter/ulogd_filter_IP2BIN.c
+--- ulogd-2.0.0beta3.orig/filter/ulogd_filter_IP2BIN.c 2009-03-06 
18:54:04.000000000 +0100
++++ ulogd-2.0.0beta3/filter/ulogd_filter_IP2BIN.c      2009-09-17 
21:35:22.000000000 +0200
+@@ -27,11 +27,13 @@
+ #include <string.h>
+ #include <arpa/inet.h>
+ #include <ulogd/ulogd.h>
++#include <netinet/if_ether.h>
+ 
+ #define IPADDR_LENGTH 128
+ 
+ enum input_keys {
+       KEY_OOB_FAMILY,
++      KEY_OOB_PROTOCOL,
+       KEY_IP_SADDR,
+       START_KEY = KEY_IP_SADDR,
+       KEY_IP_DADDR,
+@@ -83,37 +85,33 @@
+ static struct ulogd_key ip2bin_keys[] = {
+       {
+               .type = ULOGD_RET_RAWSTR,
+-              .flags = ULOGD_RETF_FREE,
+               .name = "ip.saddr.bin",
+       },
+       {
+               .type = ULOGD_RET_RAWSTR,
+-              .flags = ULOGD_RETF_FREE,
+               .name = "ip.daddr.bin",
+       },
+       {
+               .type = ULOGD_RET_RAWSTR,
+-              .flags = ULOGD_RETF_FREE,
+               .name = "orig.ip.saddr.bin",
+       },
+       {
+               .type = ULOGD_RET_RAWSTR,
+-              .flags = ULOGD_RETF_FREE,
+               .name = "orig.ip.daddr.bin",
+       },
+       {
+               .type = ULOGD_RET_RAWSTR,
+-              .flags = ULOGD_RETF_FREE,
+               .name = "reply.ip.saddr.bin",
+       },
+       {
+               .type = ULOGD_RET_RAWSTR,
+-              .flags = ULOGD_RETF_FREE,
+               .name = "reply.ip.daddr.bin",
+       },
+ 
+ };
+ 
++static char ipbin_array[MAX_KEY-START_KEY][IPADDR_LENGTH];
++
+ /**
+  * Convert IPv4 address (as 32-bit unsigned integer) to IPv6 address:
+  * add 96 bits prefix "::ffff:" to get IPv6 address "::ffff:a.b.c.d".
+@@ -126,16 +124,40 @@
+       ipv6->s6_addr32[3] = ipv4;
+ }
+ 
+-static char *ip2bin(struct ulogd_key* inp, int index, char family)
++static int ip2bin(struct ulogd_key* inp, int index, int oindex)
+ {
+-      char tmp[IPADDR_LENGTH];
++      char family = ikey_get_u8(&inp[KEY_OOB_FAMILY]);
++      char convfamily = family;
+       unsigned char *addr8;
+       struct in6_addr *addr;
+       struct in6_addr ip4_addr;
+       char *buffer;
+       int i, written;
+ 
+-      switch (family) {
++      if (family == AF_BRIDGE) {
++              if (!pp_is_valid(inp, KEY_OOB_PROTOCOL)) {
++                      ulogd_log(ULOGD_NOTICE,
++                                "No protocol inside AF_BRIDGE packet\n");
++                      return ULOGD_IRET_ERR;
++              }
++              switch (ikey_get_u16(&inp[KEY_OOB_PROTOCOL])) {
++              case ETH_P_IPV6:
++                      convfamily = AF_INET6;
++                      break;
++              case ETH_P_IP:
++                      convfamily = AF_INET;
++                      break;
++              case ETH_P_ARP:
++                      convfamily = AF_INET;
++                      break;
++              default:
++                      ulogd_log(ULOGD_NOTICE,
++                                "Unknown protocol inside AF_BRIDGE packet\n");
++                      return ULOGD_IRET_ERR;
++              }
++      }
++
++      switch (convfamily) {
+               case AF_INET6:
+                       addr = (struct in6_addr *)ikey_get_u128(&inp[index]);
+                       break;
+@@ -147,10 +169,10 @@
+               default:
+                       /* TODO handle error */
+                       ulogd_log(ULOGD_NOTICE, "Unknown protocol family\n");
+-                      return NULL;
++                      return ULOGD_IRET_ERR;
+       }
+ 
+-      buffer = tmp;
++      buffer = ipbin_array[oindex];
+       /* format IPv6 to BINARY(16) as "0x..." */
+       buffer[0] = '0';
+       buffer[1] = 'x';
+@@ -161,14 +183,14 @@
+                               addr8[0], addr8[1], addr8[2], addr8[3]);
+               if (written != 2 * 4) {
+                       buffer[0] = 0;
+-                      return NULL;
++                      return ULOGD_IRET_ERR;
+               }
+               buffer += written;
+               addr8 += 4;
+       }
+       buffer[0] = 0;
+ 
+-      return strdup(tmp);
++      return ULOGD_IRET_OK;
+ }
+ 
+ static int interp_ip2bin(struct ulogd_pluginstance *pi)
+@@ -176,12 +198,16 @@
+       struct ulogd_key *ret = pi->output.keys;
+       struct ulogd_key *inp = pi->input.keys;
+       int i;
+-      int oob_family = ikey_get_u8(&inp[KEY_OOB_FAMILY]);
++      int fret;
+ 
+       /* Iter on all addr fields */
+       for(i = START_KEY; i < MAX_KEY; i++) {
+               if (pp_is_valid(inp, i)) {
+-                      okey_set_ptr(&ret[i-1], ip2bin(inp, i, oob_family));
++                      fret = ip2bin(inp, i, i-START_KEY);
++                      if (fret != ULOGD_IRET_OK)
++                              return fret;
++                      okey_set_ptr(&ret[i-START_KEY],
++                                   ipbin_array[i-START_KEY]);
+               }
+       }
+ 
+diff -urN ulogd-2.0.0beta3.orig/filter/ulogd_filter_IP2STR.c 
ulogd-2.0.0beta3/filter/ulogd_filter_IP2STR.c
+--- ulogd-2.0.0beta3.orig/filter/ulogd_filter_IP2STR.c 2009-03-06 
18:54:04.000000000 +0100
++++ ulogd-2.0.0beta3/filter/ulogd_filter_IP2STR.c      2009-09-17 
21:35:22.000000000 +0200
+@@ -102,49 +102,42 @@
+ static struct ulogd_key ip2str_keys[] = {
+       {
+               .type = ULOGD_RET_STRING,
+-              .flags = ULOGD_RETF_FREE,
+               .name = "ip.saddr.str",
+       },
+       {
+               .type = ULOGD_RET_STRING,
+-              .flags = ULOGD_RETF_FREE,
+               .name = "ip.daddr.str",
+       },
+       {
+               .type = ULOGD_RET_STRING,
+-              .flags = ULOGD_RETF_FREE,
+               .name = "orig.ip.saddr.str",
+       },
+       {
+               .type = ULOGD_RET_STRING,
+-              .flags = ULOGD_RETF_FREE,
+               .name = "orig.ip.daddr.str",
+       },
+       {
+               .type = ULOGD_RET_STRING,
+-              .flags = ULOGD_RETF_FREE,
+               .name = "reply.ip.saddr.str",
+       },
+       {
+               .type = ULOGD_RET_STRING,
+-              .flags = ULOGD_RETF_FREE,
+               .name = "reply.ip.daddr.str",
+       },
+       {
+               .type = ULOGD_RET_STRING,
+-              .flags = ULOGD_RETF_FREE,
+               .name = "arp.saddr.str",
+       },
+       {
+               .type = ULOGD_RET_STRING,
+-              .flags = ULOGD_RETF_FREE,
+               .name = "arp.daddr.str",
+       },
+ };
+ 
+-static char *ip2str(struct ulogd_key *inp, int index)
++static char ipstr_array[MAX_KEY-START_KEY][IPADDR_LENGTH];
++
++static int ip2str(struct ulogd_key *inp, int index, int oindex)
+ {
+-      char tmp[IPADDR_LENGTH];
+       char family = ikey_get_u8(&inp[KEY_OOB_FAMILY]);
+       char convfamily = family;
+ 
+@@ -152,7 +145,7 @@
+               if (!pp_is_valid(inp, KEY_OOB_PROTOCOL)) {
+                       ulogd_log(ULOGD_NOTICE,
+                                 "No protocol inside AF_BRIDGE packet\n");
+-                      return NULL;
++                      return ULOGD_IRET_ERR;
+               }
+               switch (ikey_get_u16(&inp[KEY_OOB_PROTOCOL])) {
+               case ETH_P_IPV6:
+@@ -167,7 +160,7 @@
+               default:
+                       ulogd_log(ULOGD_NOTICE,
+                                 "Unknown protocol inside AF_BRIDGE packet\n");
+-                      return NULL;
++                      return ULOGD_IRET_ERR;
+               }
+       }
+ 
+@@ -176,18 +169,19 @@
+       case AF_INET6:
+               inet_ntop(AF_INET6,
+                         ikey_get_u128(&inp[index]),
+-                        tmp, sizeof(tmp));
++                        ipstr_array[oindex], sizeof(ipstr_array[oindex]));
+               break;
+       case AF_INET:
+               ip = ikey_get_u32(&inp[index]);
+-              inet_ntop(AF_INET, &ip, tmp, sizeof(tmp));
++              inet_ntop(AF_INET, &ip,
++                        ipstr_array[oindex], sizeof(ipstr_array[oindex]));
+               break;
+       default:
+               /* TODO error handling */
+               ulogd_log(ULOGD_NOTICE, "Unknown protocol family\n");
+-              return NULL;
++              return ULOGD_IRET_ERR;
+       }
+-      return strdup(tmp);
++      return ULOGD_IRET_OK;
+ }
+ 
+ static int interp_ip2str(struct ulogd_pluginstance *pi)
+@@ -195,11 +189,16 @@
+       struct ulogd_key *ret = pi->output.keys;
+       struct ulogd_key *inp = pi->input.keys;
+       int i;
++      int fret;
+ 
+       /* Iter on all addr fields */
+       for (i = START_KEY; i <= MAX_KEY; i++) {
+               if (pp_is_valid(inp, i)) {
+-                      okey_set_ptr(&ret[i-START_KEY], ip2str(inp, i));
++                      fret = ip2str(inp, i, i-START_KEY);
++                      if (fret != ULOGD_IRET_OK)
++                              return fret;
++                      okey_set_ptr(&ret[i-START_KEY],
++                                   ipstr_array[i-START_KEY]);
+               }
+       }
+ 
+diff -urN ulogd-2.0.0beta3.orig/include/ulogd/ulogd.h 
ulogd-2.0.0beta3/include/ulogd/ulogd.h
+--- ulogd-2.0.0beta3.orig/include/ulogd/ulogd.h        2009-03-06 
18:54:04.000000000 +0100
++++ ulogd-2.0.0beta3/include/ulogd/ulogd.h     2009-09-17 21:35:22.000000000 
+0200
+@@ -19,6 +19,7 @@
+ #include <signal.h>   /* need this because of extension-sighandler */
+ #include <sys/types.h>
+ #include <string.h>
++#include <config.h>
+ 
+ #define ARRAY_SIZE(x) (sizeof(x) / sizeof((x)[0]))
+ 
+diff -urN ulogd-2.0.0beta3.orig/input/flow/ulogd_inpflow_NFCT.c 
ulogd-2.0.0beta3/input/flow/ulogd_inpflow_NFCT.c
+--- ulogd-2.0.0beta3.orig/input/flow/ulogd_inpflow_NFCT.c      2009-03-06 
18:54:04.000000000 +0100
++++ ulogd-2.0.0beta3/input/flow/ulogd_inpflow_NFCT.c   2009-09-17 
21:35:22.000000000 +0200
+@@ -114,6 +114,12 @@
+                       .options = CONFIG_OPT_NONE,
+                       .u.value = 0,
+               },
++              {
++                      .key     = "netlink_resync_timeout",
++                      .type    = CONFIG_TYPE_INT,
++                      .options = CONFIG_OPT_NONE,
++                      .u.value = 60,
++              },
+       },
+ };
+ #define pollint_ce(x) (x->ces[0])
+@@ -123,6 +129,7 @@
+ #define eventmask_ce(x) (x->ces[4])
+ #define nlsockbufsize_ce(x) (x->ces[5])
+ #define nlsockbufmaxsize_ce(x) (x->ces[6])
++#define nlresynctimeout_ce(x) (x->ces[7])
+ 
+ enum nfct_keys {
+       NFCT_ORIG_IP_SADDR = 0,
+@@ -596,6 +603,9 @@
+       switch(type) {
+       case NFCT_T_NEW:
+               ts = hashtable_add(cpi->ct_active, &tmp);
++              if (ts == NULL)
++                      return NFCT_CB_CONTINUE;
++
+               gettimeofday(&ts->time[START], NULL);
+               return NFCT_CB_STOLEN;
+       case NFCT_T_UPDATE:
+@@ -604,6 +614,9 @@
+                       nfct_copy(ts->ct, ct, NFCT_CP_META);
+               else {
+                       ts = hashtable_add(cpi->ct_active, &tmp);
++                      if (ts == NULL)
++                              return NFCT_CB_CONTINUE;
++
+                       gettimeofday(&ts->time[START], NULL);
+                       return NFCT_CB_STOLEN;
+               }
+@@ -637,12 +650,18 @@
+ {
+       struct nfct_pluginstance *cpi =
+                       (struct nfct_pluginstance *)upi->private;
++      static int warned = 0;
+ 
+       if (size < nlsockbufmaxsize_ce(upi->config_kset).u.value) {
+               cpi->nlbufsiz = nfnl_rcvbufsiz(nfct_nfnlh(cpi->cth), size);
+               return 1;
+       }
+ 
++      /* we have already warned the user, do not keep spamming */
++      if (warned)
++              return 0;
++
++      warned = 1;
+       ulogd_log(ULOGD_NOTICE, "Maximum buffer size (%d) in NFCT has been "
+                               "reached. Please, consider rising "
+                               "`netlink_socket_buffer_size` and "
+@@ -657,14 +676,13 @@
+       struct ulogd_pluginstance *upi = container_of(param,
+                                                     struct ulogd_pluginstance,
+                                                     private);
++      static int warned = 0;
+ 
+       if (!(what & ULOGD_FD_READ))
+               return 0;
+ 
+       if (nfct_catch(cpi->cth) == -1) {
+               if (errno == ENOBUFS) {
+-                      int family = AF_UNSPEC;
+-
+                       if (nlsockbufmaxsize_ce(upi->config_kset).u.value) {
+                               int s = cpi->nlbufsiz * 2;
<<Diff was trimmed, longer than 597 lines>>
_______________________________________________
pld-cvs-commit mailing list
[email protected]
http://lists.pld-linux.org/mailman/listinfo/pld-cvs-commit

Reply via email to