SOURCES: net-snmp-duplicate-ip.patch - use official patch, the same that la...
arekm
arekm at pld-linux.org
Sun Aug 24 15:12:31 CEST 2008
Author: arekm Date: Sun Aug 24 13:12:31 2008 GMT
Module: SOURCES Tag: HEAD
---- Log message:
- use official patch, the same that landed on AC-branch but wasn't put on HEAD :-(
---- Files affected:
SOURCES:
net-snmp-duplicate-ip.patch (1.1 -> 1.2)
---- Diffs:
================================================================
Index: SOURCES/net-snmp-duplicate-ip.patch
diff -u SOURCES/net-snmp-duplicate-ip.patch:1.1 SOURCES/net-snmp-duplicate-ip.patch:1.2
--- SOURCES/net-snmp-duplicate-ip.patch:1.1 Wed Apr 23 23:21:14 2008
+++ SOURCES/net-snmp-duplicate-ip.patch Sun Aug 24 15:12:25 2008
@@ -1,267 +1,115 @@
-Index: snmplib/container_binary_array.c
-===================================================================
---- snmplib/container_binary_array.c (revision 16471)
-+++ snmplib/container_binary_array.c (working copy)
-@@ -579,6 +579,11 @@
- return va;
- }
-
-+static int _ba_options(netsnmp_container *c, int set, u_int flags)
+borrowed from:
+
+ http://net-snmp.svn.sourceforge.net/viewvc/net-snmp?view=rev&revision=16804
+
+--- branches/V5-4-patches/net-snmp/snmplib/container.c 2008/02/13 23:11:48 16803
++++ branches/V5-4-patches/net-snmp/snmplib/container.c 2008/02/13 23:37:48 16804
+@@ -268,25 +268,35 @@
+ * These functions should EXACTLY match the inline version in
+ * container.h. If you change one, change them both.
+ */
+-int CONTAINER_INSERT(netsnmp_container *x, const void *k)
+-{
+- int rc2, rc = 0;
+-
+- /** start at first container */
+- while(x->prev)
+- x = x->prev;
+- for(; x; x = x->next) {
+- if ((NULL != x->insert_filter) &&
+- (x->insert_filter(x,k) == 1))
+- continue;
+- rc2 = x->insert(x,k);
+- if (rc2) {
++int CONTAINER_INSERT_HELPER(netsnmp_container* x, const void* k)
+{
-+ return netsnmp_binary_array_options_set(c, set, flags);
-+}
-+
- netsnmp_container *
- netsnmp_container_get_binary_array(void)
- {
-@@ -604,6 +609,7 @@
- c->get_iterator = _ba_iterator_get;
- c->for_each = _ba_for_each;
- c->clear = _ba_clear;
-+ c->options = _ba_options;
-
- return c;
- }
-Index: snmplib/container.c
-===================================================================
---- snmplib/container.c (revision 16471)
-+++ snmplib/container.c (working copy)
-@@ -268,19 +268,64 @@
- int CONTAINER_INSERT(netsnmp_container *x, const void *k)
- {
- int rc2, rc = 0;
-+ netsnmp_container *start;
-+ int silent = 0;
-
- /** start at first container */
- while(x->prev)
- x = x->prev;
-+ start = x;
-+
-+ if (start->next != NULL) {
-+ /* Check if the key would create duplicity in any index.
-+ * This is not needed if there is only one index - x->insert
-+ * will check it instead. */
-+ for(; x; x = x->next) {
-+ int key_allow_duplicates = 0;
-+ CONTAINER_CHECK_OPTION(x, CONTAINER_KEY_ALLOW_DUPLICATES, key_allow_duplicates);
-+ if (key_allow_duplicates < 0)
-+ key_allow_duplicates = 0; /* cannot read the flag -> use default value */
-+
-+ if (key_allow_duplicates)
-+ continue; /* no need to check this index - duplicates are allowed */
-+
-+ if ((NULL != x->insert_filter) &&
-+ (x->insert_filter(x,k) == 1))
-+ continue; /* no need to check this index - index is filtered out */
-+
-+ rc2 = x->find(x,k);
-+ if (rc2) {
-+ /* key is already in the index -> forbid the insert */
-+ CONTAINER_CHECK_OPTION(start, CONTAINER_SILENT, silent);
-+ if (silent < 0)
-+ silent = 0; /* cannot read the flag -> use default value */
-+
-+ if (!silent) {
-+ snmp_log(LOG_ERR,"error on subcontainer '%s' insert would create duplicity (%d)\n",
-+ x->container_name ? x->container_name : "", rc2);
-+ }
-+ return -1;
-+ }
-+ }
-+ }
-+
-+ x = start;
- for(; x; x = x->next) {
- if ((NULL != x->insert_filter) &&
- (x->insert_filter(x,k) == 1))
- continue;
- rc2 = x->insert(x,k);
- if (rc2) {
-- snmp_log(LOG_ERR,"error on subcontainer '%s' insert (%d)\n",
++ while(x && x->insert_filter && x->insert_filter(x,k) == 1)
++ x = x->next;
++ if(x) {
++ int rc = x->insert(x,k);
++ if(rc)
+ snmp_log(LOG_ERR,"error on subcontainer '%s' insert (%d)\n",
- x->container_name ? x->container_name : "", rc2);
-+ /* insert failed */
-+ CONTAINER_CHECK_OPTION(start, CONTAINER_SILENT, silent);
-+ if (silent < 0)
-+ silent = 0; /* cannot read the flag -> use default value */
-+
-+ if (!silent) {
-+ snmp_log(LOG_ERR,"error on subcontainer '%s' insert (%d)\n",
-+ x->container_name ? x->container_name : "", rc2);
-+ }
- rc = rc2;
+- rc = rc2;
++ x->container_name ? x->container_name : "", rc);
++ else {
++ rc = CONTAINER_INSERT_HELPER(x->next, k);
++ if(rc)
++ x->remove(x,k);
}
++ return rc;
}
- return rc;
-Index: include/net-snmp/library/container.h
-===================================================================
---- include/net-snmp/library/container.h (revision 16471)
-+++ include/net-snmp/library/container.h (working copy)
-@@ -284,6 +284,8 @@
- */
- #define CONTAINER_KEY_ALLOW_DUPLICATES 0x00000001
- #define CONTAINER_KEY_UNSORTED 0x00000002
-+/* do not print anything to log on CONTAINER_INSERT error */
-+#define CONTAINER_SILENT 0x00000004
+- return rc;
++ return 0;
++}
++
++/*------------------------------------------------------------------
++ * These functions should EXACTLY match the inline version in
++ * container.h. If you change one, change them both.
++ */
++int CONTAINER_INSERT(netsnmp_container* x, const void* k)
++{
++ /** start at first container */
++ while(x->prev)
++ x = x->prev;
++ return CONTAINER_INSERT_HELPER(x, k);
+ }
- #define CONTAINER_SET_OPTIONS(x,o,rc) do { \
- if (NULL==(x)->options) \
-@@ -354,23 +356,68 @@
- int CONTAINER_INSERT(netsnmp_container *x, const void *k)
+ /*------------------------------------------------------------------
+--- branches/V5-4-patches/net-snmp/include/net-snmp/library/container.h 2008/02/13 23:11:48 16803
++++ branches/V5-4-patches/net-snmp/include/net-snmp/library/container.h 2008/02/13 23:37:48 16804
+@@ -351,27 +351,38 @@
+ * container.c. If you change one, change them both.
+ */
+ NETSNMP_STATIC_INLINE /* gcc docs recommend static w/inline */
+- int CONTAINER_INSERT(netsnmp_container *x, const void *k)
++ int CONTAINER_INSERT_HELPER(netsnmp_container* x, const void* k)
{
- int rc2, rc = 0;
-+ netsnmp_container *start;
-+ int silent = 0;
-
- /** start at first container */
- while(x->prev)
- x = x->prev;
-+ start = x;
-+
-+ if (start->next != NULL) {
-+ /* Check if the key would create duplicity in any index.
-+ * This is not needed if there is only one index - x->insert
-+ * will check it instead. */
-+ for(; x; x = x->next) {
-+ int key_allow_duplicates = 0;
-+ CONTAINER_CHECK_OPTION(x, CONTAINER_KEY_ALLOW_DUPLICATES, key_allow_duplicates);
-+ if (key_allow_duplicates < 0)
-+ key_allow_duplicates = 0; /* cannot read the flag -> use default value */
-+
-+ if (key_allow_duplicates)
-+ continue; /* no need to check this index - duplicates are allowed */
-+
-+ if ((NULL != x->insert_filter) &&
-+ (x->insert_filter(x,k) == 1))
-+ continue; /* no need to check this index - index is filtered out */
-+
-+ rc2 = x->find(x,k);
-+ if (rc2) {
-+ /* key is already in the index -> forbid the insert */
-+ CONTAINER_CHECK_OPTION(start, CONTAINER_SILENT, silent);
-+ if (silent < 0)
-+ silent = 0; /* cannot read the flag -> use default value */
-+
-+ if (!silent) {
-+ snmp_log(LOG_ERR,"error on subcontainer '%s' insert would create duplicity (%d)\n",
-+ x->container_name ? x->container_name : "", rc2);
-+ }
-+ return -1;
-+ }
-+ }
-+ }
-+
-+ x = start;
- for(; x; x = x->next) {
- if ((NULL != x->insert_filter) &&
- (x->insert_filter(x,k) == 1))
- continue;
- rc2 = x->insert(x,k);
- if (rc2) {
-- snmp_log(LOG_ERR,"error on subcontainer '%s' insert (%d)\n",
+- int rc2, rc = 0;
+-
+- /** start at first container */
+- while(x->prev)
+- x = x->prev;
+- for(; x; x = x->next) {
+- if ((NULL != x->insert_filter) &&
+- (x->insert_filter(x,k) == 1))
+- continue;
+- rc2 = x->insert(x,k);
+- if (rc2) {
++ while(x && x->insert_filter && x->insert_filter(x,k) == 1)
++ x = x->next;
++ if(x) {
++ int rc = x->insert(x,k);
++ if(rc)
+ snmp_log(LOG_ERR,"error on subcontainer '%s' insert (%d)\n",
- x->container_name ? x->container_name : "", rc2);
-+ /* insert failed */
-+ CONTAINER_CHECK_OPTION(start, CONTAINER_SILENT, silent);
-+ if (silent < 0)
-+ silent = 0; /* cannot read the flag -> use default value */
-+
-+ if (!silent) {
-+ snmp_log(LOG_ERR,"error on subcontainer '%s' insert (%d)\n",
-+ x->container_name ? x->container_name : "", rc2);
-+ }
- rc = rc2;
+- rc = rc2;
++ x->container_name ? x->container_name : "", rc);
++ else {
++ rc = CONTAINER_INSERT_HELPER(x->next, k);
++ if(rc)
++ x->remove(x,k);
}
++ return rc;
}
- return rc;
-- }
-+ }
-
- /*------------------------------------------------------------------
- * These functions should EXACTLY match the function version in
-Index: agent/mibgroup/ip-mib/data_access/ipaddress_ioctl.c
-===================================================================
---- agent/mibgroup/ip-mib/data_access/ipaddress_ioctl.c 2008-04-23 11:27:45.000000000 +0300
-+++ agent/mibgroup/ip-mib/data_access/ipaddress_ioctl.c 2008-04-23 11:37:29.000000000 +0300
-@@ -272,11 +272,14 @@
- /*
- * add entry to container
- */
-- if (CONTAINER_INSERT(container, entry) < 0)
-- {
-- DEBUGMSGTL(("access:ipaddress:container","error with ipaddress_entry: insert into container failed.\n"));
-- netsnmp_access_ipaddress_entry_free(entry);
-- continue;
-+
-+ rc = CONTAINER_INSERT(container, entry);
-+ if (rc < 0) {
-+ static int logged = 0;
-+ if (!logged) {
-+ snmp_log(LOG_NOTICE, "Duplicate IPv4 address detected, some interfaces may not be visible in IP-MIB\n");
-+ logged = 1;
-+ }
- }
- }
-
-Index: agent/mibgroup/ip-mib/data_access/ipaddress_common.c
-===================================================================
---- agent/mibgroup/ip-mib/data_access/ipaddress_common.c (revision 16471)
-+++ agent/mibgroup/ip-mib/data_access/ipaddress_common.c (working copy)
-@@ -54,6 +54,7 @@
- netsnmp_access_ipaddress_container_init(u_int flags)
- {
- netsnmp_container *container1;
-+ int rc;
-
- DEBUGMSGTL(("access:ipaddress:container", "init\n"));
-
-@@ -67,6 +68,12 @@
- return NULL;
+- return rc;
++ return 0;
}
- container1->container_name = strdup("ia_index");
-+ CONTAINER_SET_OPTIONS(container1, CONTAINER_SILENT, rc);
-+ if (rc < 0) {
-+ snmp_log(LOG_ERR, "ipaddress container: cannot set CONTAINER_SILENT flag\n");
-+ CONTAINER_FREE(container1);
-+ return NULL;
+-
++
++ /*------------------------------------------------------------------
++ * These functions should EXACTLY match the function version in
++ * container.c. If you change one, change them both.
++ */
++ NETSNMP_STATIC_INLINE /* gcc docs recommend static w/inline */
++ int CONTAINER_INSERT(netsnmp_container* x, const void* k)
++ {
++ /** start at first container */
++ while(x->prev)
++ x = x->prev;
++ return CONTAINER_INSERT_HELPER(x, k);
+ }
-
- if (flags & NETSNMP_ACCESS_IPADDRESS_INIT_ADDL_IDX_BY_ADDR) {
- netsnmp_container *container2 =
-@@ -79,6 +86,14 @@
-
- container2->compare = _access_ipaddress_entry_compare_addr;
- container2->container_name = strdup("ia_addr");
+
-+ CONTAINER_SET_OPTIONS(container2, CONTAINER_SILENT, rc);
-+ if (rc < 0) {
-+ snmp_log(LOG_ERR, "ipaddress secondary container: cannot set CONTAINER_SILENT flag\n");
-+ CONTAINER_FREE(container1);
-+ CONTAINER_FREE(container2);
-+ return NULL;
-+ }
-
- netsnmp_container_add_index(container1, container2);
- }
-Index: agent/mibgroup/ip-mib/data_access/ipaddress_linux.c
-===================================================================
---- agent/mibgroup/ip-mib/data_access/ipaddress_linux.c (revision 16471)
-+++ agent/mibgroup/ip-mib/data_access/ipaddress_linux.c (working copy)
-@@ -340,7 +340,16 @@
- /*
- * add entry to container
- */
-- CONTAINER_INSERT(container, entry);
-+ rc = CONTAINER_INSERT(container, entry);
-+ if (rc < 0) {
-+ static int logged = 0;
-+ if (!logged) {
-+ snmp_log(LOG_NOTICE, "Duplicate IPv6 address detected, some interfaces may not be visible in IP-MIB\n");
-+ logged = 1;
-+ }
-+ netsnmp_access_ipaddress_entry_free(entry);
-+ }
-+
- }
-
- fclose(in);
-
+ /*------------------------------------------------------------------
+ * These functions should EXACTLY match the function version in
+ * container.c. If you change one, change them both.
================================================================
---- CVS-web:
http://cvs.pld-linux.org/cgi-bin/cvsweb.cgi/SOURCES/net-snmp-duplicate-ip.patch?r1=1.1&r2=1.2&f=u
More information about the pld-cvs-commit
mailing list