svn commit: r301664 - in stable/9/contrib/bsnmp: snmp_mibII snmpd

Garrett Cooper ngie at FreeBSD.org
Wed Jun 8 17:50:53 UTC 2016


Author: ngie
Date: Wed Jun  8 17:50:51 2016
New Revision: 301664
URL: https://svnweb.freebsd.org/changeset/base/301664

Log:
  MFstable/10 r301663:
  
  MFC r294507,r294567,r299466:
  
  r294507 (by harti):
  
  Fill the ifAlias leaf of the ifXTable with the interface description
  if there is one available and it fits into the maximum size (64 characters).
  
  r294567 (by bz):
  
  Change the variable to a #define in order to make gcc happy which
  otherwise will complain about "variably modified 'alias' at file scope".
  Unbreaks the build on gcc platforms.
  
  r299466 (by cem):
  
  bsnmpd: Fix size of trapsink::comm to match other community arrays
  
  This fixes a number of possible strcpy() buffer overruns between the various
  community strings in trap.c.
  
  CIDs:		1006820, 1006821, 1006822

Modified:
  stable/9/contrib/bsnmp/snmp_mibII/mibII.c
  stable/9/contrib/bsnmp/snmp_mibII/mibII.h
  stable/9/contrib/bsnmp/snmp_mibII/mibII_interfaces.c
  stable/9/contrib/bsnmp/snmpd/snmpd.h
Directory Properties:
  stable/9/   (props changed)
  stable/9/contrib/   (props changed)
  stable/9/contrib/bsnmp/   (props changed)
  stable/9/contrib/bsnmp/snmp_mibII/   (props changed)

Modified: stable/9/contrib/bsnmp/snmp_mibII/mibII.c
==============================================================================
--- stable/9/contrib/bsnmp/snmp_mibII/mibII.c	Wed Jun  8 17:49:03 2016	(r301663)
+++ stable/9/contrib/bsnmp/snmp_mibII/mibII.c	Wed Jun  8 17:50:51 2016	(r301664)
@@ -443,6 +443,7 @@ mib_fetch_ifmib(struct mibif *ifp)
 	size_t len;
 	void *newmib;
 	struct ifmibdata oldmib = ifp->mib;
+	struct ifreq irr;
 
 	if (fetch_generic_mib(ifp, &oldmib) == -1)
 		return (-1);
@@ -514,6 +515,18 @@ mib_fetch_ifmib(struct mibif *ifp)
 	}
 
   out:
+	strncpy(irr.ifr_name, ifp->name, sizeof(irr.ifr_name));
+	irr.ifr_buffer.buffer = MIBIF_PRIV(ifp)->alias;
+	irr.ifr_buffer.length = sizeof(MIBIF_PRIV(ifp)->alias);
+	if (ioctl(mib_netsock, SIOCGIFDESCR, &irr) == -1) {
+		MIBIF_PRIV(ifp)->alias[0] = 0;
+		if (errno != ENOMSG)
+			syslog(LOG_WARNING, "SIOCGIFDESCR (%s): %m", ifp->name);
+	} else if (irr.ifr_buffer.buffer == NULL) {
+		MIBIF_PRIV(ifp)->alias[0] = 0;
+		syslog(LOG_WARNING, "SIOCGIFDESCR (%s): too long (%zu)",
+		    ifp->name, irr.ifr_buffer.length);
+	}
 	ifp->mibtick = get_ticks();
 	return (0);
 }

Modified: stable/9/contrib/bsnmp/snmp_mibII/mibII.h
==============================================================================
--- stable/9/contrib/bsnmp/snmp_mibII/mibII.h	Wed Jun  8 17:49:03 2016	(r301663)
+++ stable/9/contrib/bsnmp/snmp_mibII/mibII.h	Wed Jun  8 17:50:51 2016	(r301664)
@@ -56,6 +56,9 @@
 #include "snmp_mibII.h"
 #include "mibII_tree.h"
 
+/* maximum size of the interface alias */
+#define	MIBIF_ALIAS_SIZE	(64 + 1)
+
 /*
  * Interface list and flags.
  */
@@ -76,6 +79,9 @@ struct mibif_private {
 	uint64_t	hc_opackets;
 	uint64_t	hc_imcasts;
 	uint64_t	hc_ipackets;
+
+	/* this should be made public */
+	char		alias[MIBIF_ALIAS_SIZE];
 };
 #define	MIBIF_PRIV(IFP) ((struct mibif_private *)((IFP)->private))
 

Modified: stable/9/contrib/bsnmp/snmp_mibII/mibII_interfaces.c
==============================================================================
--- stable/9/contrib/bsnmp/snmp_mibII/mibII_interfaces.c	Wed Jun  8 17:49:03 2016	(r301663)
+++ stable/9/contrib/bsnmp/snmp_mibII/mibII_interfaces.c	Wed Jun  8 17:50:51 2016	(r301664)
@@ -528,7 +528,7 @@ op_ifxtable(struct snmp_context *ctx, st
 		break;
 
 	  case LEAF_ifAlias:
-		ret = string_get(value, "", -1);
+		ret = string_get(value, MIBIF_PRIV(ifp)->alias, -1);
 		break;
 
 	  case LEAF_ifCounterDiscontinuityTime:

Modified: stable/9/contrib/bsnmp/snmpd/snmpd.h
==============================================================================
--- stable/9/contrib/bsnmp/snmpd/snmpd.h	Wed Jun  8 17:49:03 2016	(r301663)
+++ stable/9/contrib/bsnmp/snmpd/snmpd.h	Wed Jun  8 17:50:51 2016	(r301664)
@@ -307,7 +307,7 @@ struct trapsink {
 	struct asn_oid	index;
 	u_int		status;
 	int		socket;
-	u_char		comm[SNMP_COMMUNITY_MAXLEN];
+	u_char		comm[SNMP_COMMUNITY_MAXLEN + 1];
 	int		version;
 };
 enum {


More information about the svn-src-stable-9 mailing list