diff --git a/osasnmpd/ibmOSAMibDefs.h b/osasnmpd/ibmOSAMibDefs.h index 10d21143..15e0f6ce 100644 --- a/osasnmpd/ibmOSAMibDefs.h +++ b/osasnmpd/ibmOSAMibDefs.h @@ -44,7 +44,20 @@ #define MAX_GET_DATA 4094 /* maximum GET response data length */ #define GET_AREA_LEN MAX_GET_DATA + 512 /* size for GET command area length */ #define TIME_BUF_SIZE 128 /* buffer size for date and time string */ -#define MAX_OID_STR_LEN MAX_OID_LEN * 5 /* max OID string size */ + +/* + * Define maximum SNMP OID string size. + * An OID can have up to 128 sub-ids and each sub-id can have up to 10 + * digits. When converted to string, this means 1 character for the + * period separator and 10 characters for the digits themselves. At + * the end of OID string, we need one more character for the null + * terminator. The unsigned long data type, which can have up to 20 + * digits is used to represent a sub-id. This means each sub-id + * string now needs 20+1 characters instead of 10+1 in-order to avoid + * compiler warnings. + */ +#define MAX_OID_STR_LEN (MAX_OID_LEN * 21) + 1 + /* definitions for 2.6 qeth */ #define QETH_SYSFILE "/sys/bus/ccwgroup/drivers/qeth/notifier_register" #define SIOC_QETH_ADP_SET_SNMP_CONTROL (SIOCDEVPRIVATE + 5) diff --git a/osasnmpd/ibmOSAMibUtil.c b/osasnmpd/ibmOSAMibUtil.c index efc0b1e4..f355d6d4 100644 --- a/osasnmpd/ibmOSAMibUtil.c +++ b/osasnmpd/ibmOSAMibUtil.c @@ -110,7 +110,7 @@ int str_to_oid_conv ( char* uc_oid, oid* ul_oid ) *********************************************************************/ int oid_to_str_conv (oid* ul_oid, size_t length, char* uc_oid ) { - #define MAX_CHARS 50 /* size of buffer */ + #define MAX_CHARS 22 /* size of buffer */ int i; short valid = TRUE; char buffer[MAX_CHARS]; /* buffer used for conversion */ @@ -125,9 +125,9 @@ int oid_to_str_conv (oid* ul_oid, size_t length, char* uc_oid ) { /* convert and append OID digit to return string */ if (i == 0) - sprintf( buffer, "%lu", ul_oid[i] ); + snprintf( buffer, sizeof(buffer), "%lu", ul_oid[i] ); else - sprintf( buffer, ".%lu", ul_oid[i] ); + snprintf( buffer, sizeof(buffer), ".%lu", ul_oid[i] ); strcat( uc_oid, buffer ); } /* end for */