#ifndef lint
static const char rcsid[] =
- "@(#) $Header: /tcpdump/master/tcpdump/print-snmp.c,v 1.45 2001-01-24 21:50:58 fenner Exp $ (LBL)";
+ "@(#) $Header: /tcpdump/master/tcpdump/print-snmp.c,v 1.49 2001-06-15 21:06:59 fenner Exp $ (LBL)";
#endif
#ifdef HAVE_CONFIG_H
elem->form = form;
elem->class = class;
elem->id = id;
- if (vflag > 1)
- printf("|%.2x", *p);
p++; len--; hdr = 1;
/* extended tag field */
if (id == ASN_ID_EXT) {
- for (id = 0; *p & ASN_BIT8 && len > 0; len--, hdr++, p++) {
- if (vflag > 1)
- printf("|%.2x", *p);
+ for (id = 0; *p & ASN_BIT8 && len > 0; len--, hdr++, p++)
id = (id << 7) | (*p & ~ASN_BIT8);
- }
if (len == 0 && *p & ASN_BIT8) {
ifNotTruncated fputs("[Xtagfield?]", stdout);
return -1;
return -1;
}
elem->asnlen = *p;
- if (vflag > 1)
- printf("|%.2x", *p);
p++; len--; hdr++;
if (elem->asnlen & ASN_BIT8) {
int noct = elem->asnlen % ASN_BIT8;
ifNotTruncated printf("[asnlen? %d<%d]", len, noct);
return -1;
}
- for (; noct-- > 0; len--, hdr++) {
- if (vflag > 1)
- printf("|%.2x", *p);
+ for (; noct-- > 0; len--, hdr++)
elem->asnlen = (elem->asnlen << ASN_SHIFT8) | *p++;
- }
}
if (len < elem->asnlen) {
if (!truncated) {
d = elem->data.uns64.high * 4294967296.0; /* 2^32 */
if (elem->data.uns64.high <= 0x1fffff) {
d += elem->data.uns64.low;
-#if 0 /*is looks illegal, but what is the intention???*/
+#if 0 /*is looks illegal, but what is the intention?*/
printf("%.f", d);
#else
printf("%f", d);
break;
}
d += (elem->data.uns64.low & 0xfffff000);
-#if 0 /*is looks illegal, but what is the intention???*/
+#if 0 /*is looks illegal, but what is the intention?*/
snprintf(first, sizeof(first), "%.f", d);
#else
snprintf(first, sizeof(first), "%f", d);
};
static void smi_decode_oid(struct be *elem, unsigned int *oid,
- unsigned int *oidlen)
+ unsigned int oidsize, unsigned int *oidlen)
{
u_char *p = (u_char *)elem->data.raw;
u_int32_t asnlen = elem->asnlen;
*/
if (first < 0) {
first = 0;
- oid[(*oidlen)++] = o/OIDMUX;
+ if (*oidlen < oidsize) {
+ oid[(*oidlen)++] = o/OIDMUX;
+ }
o %= OIDMUX;
}
- oid[(*oidlen)++] = o;
+ if (*oidlen < oidsize) {
+ oid[(*oidlen)++] = o;
+ }
o = 0;
}
}
SmiNode *smiNode = NULL;
int i;
- smi_decode_oid(elem, oid, &oidlen);
+ smi_decode_oid(elem, oid, sizeof(oid)/sizeof(unsigned int), &oidlen);
smiNode = smiGetNodeByOID(oidlen, oid);
if (! smiNode) {
asn1_print(elem);
}
if (! smi_check_range(smiType, elem)) {
- fputs("[wrongLength]", stdout);
+ fputs("[outOfRange]", stdout);
}
/* resolve bits to named bits */
if (smiType->basetype == SMI_BASETYPE_BITS) {
/* print bit labels */
} else {
- smi_decode_oid(elem, oid, &oidlen);
+ smi_decode_oid(elem, oid,
+ sizeof(oid)/sizeof(unsigned int),
+ &oidlen);
smiNode = smiGetNodeByOID(oidlen, oid);
if (smiNode) {
if (vflag) {