net-snmp/net-snmp-5.4.1-long-iface-names.patch

52 lines
2.2 KiB
Diff

468045: Interface name too long: "ioctl 35123 returned -1"
Source: upstream, svn rev. 16797
Support longer interface names.
diff --git a/net-snmp/agent/mibgroup/ip-mib/data_access/ipaddress_linux.c b/net-snmp/agent/mibgroup/ip-mib/data_access/ipaddress_linux.c
index 51cde1b..72c1d2d 100644
--- a/net-snmp/agent/mibgroup/ip-mib/data_access/ipaddress_linux.c
+++ b/net-snmp/agent/mibgroup/ip-mib/data_access/ipaddress_linux.c
@@ -189,7 +189,8 @@ _load_v6(netsnmp_container *container, int idx_offset)
return -1;
#else
FILE *in;
- char line[80], addr[40], if_name[IFNAMSIZ];
+ char line[80], addr[40];
+ char if_name[IFNAMSIZ+1];/* +1 for '\0' because of the ugly sscanf below */
u_char *buf;
int if_index, pfx_len, scope, flags, rc = 0;
size_t in_len, out_len;
@@ -229,7 +230,7 @@ _load_v6(netsnmp_container *container, int idx_offset)
* F: flags (see include/linux/rtnetlink.h, net/ipv6/addrconf.c)
* I: interface
*/
- rc = sscanf(line, "%39s %02x %02x %02x %02x %8s\n",
+ rc = sscanf(line, "%39s %02x %02x %02x %02x %" SNMP_MACRO_VAL_TO_STR(IFNAMSIZ) "s\n",
addr, &if_index, &pfx_len, &scope, &flags, if_name);
if( 6 != rc ) {
snmp_log(LOG_ERR, PROCFILE " data format error (%d!=6), line ==|%s|\n",
diff --git a/net-snmp/include/net-snmp/library/tools.h b/net-snmp/include/net-snmp/library/tools.h
index 7822855..e57d1ac 100644
--- a/net-snmp/include/net-snmp/library/tools.h
+++ b/net-snmp/include/net-snmp/library/tools.h
@@ -88,6 +88,17 @@ extern "C" {
Computers the minimum of a and b. */
#define SNMP_MIN(a,b) ((a) > (b) ? (b) : (a))
+/** @def SNMP_MACRO_VAL_TO_STR(s)
+ * Expands to string with value of the s.
+ * If s is macro, the resulting string is value of the macro.
+ * Example:
+ * #define TEST 1234
+ * SNMP_MACRO_VAL_TO_STR(TEST) expands to "1234"
+ * SNMP_MACRO_VAL_TO_STR(TEST+1) expands to "1234+1"
+ */
+#define SNMP_MACRO_VAL_TO_STR(s) SNMP_MACRO_VAL_TO_STR_PRIV(s)
+#define SNMP_MACRO_VAL_TO_STR_PRIV(s) #s
+
#ifndef FALSE
#define FALSE 0
#endif