This change is the result of a large sweep triggered by the new Tcl which has const'ified many interfaces -- this follows suit with many corresponding changes internally in scotty => lots of new patches. Also, change so as to not access interp->errorLine and interp->result directly, use the accessor functions instead, and turn off the corresponding compatibility defines. The old patch files have been renamed and expanded, the new scheme for naming patch files is used. Only minimal functionality testing is done, but what has been done shows that it basically works again. PKGREVISION bumped.
197 lines
6.2 KiB
C
197 lines
6.2 KiB
C
$NetBSD: patch-tnm_snmp_tnmSnmpRecv.c,v 1.1 2014/03/05 13:52:29 he Exp $
|
|
|
|
Constify.
|
|
Avoid use of interp->result.
|
|
|
|
--- tnm/snmp/tnmSnmpRecv.c.orig 1999-05-17 16:15:33.000000000 +0000
|
|
+++ tnm/snmp/tnmSnmpRecv.c
|
|
@@ -669,16 +669,18 @@ DecodeMessage(interp, msg, pdu, packet,
|
|
int buflen = 0;
|
|
u_int msglen = 0;
|
|
u_char *p = packet;
|
|
+ char res[128];
|
|
|
|
/*
|
|
* Decode "Packet Header" header ( SEQUENCE 0x30 msglen )
|
|
*/
|
|
|
|
if (*p++ != (ASN1_UNIVERSAL | ASN1_CONSTRUCTED | ASN1_SEQUENCE)) {
|
|
- sprintf(interp->result,
|
|
+ sprintf(res,
|
|
"Message header: invalid value 0x%.2x; expecting 0x%.2x",
|
|
*--p, (ASN1_UNIVERSAL | ASN1_CONSTRUCTED | ASN1_SEQUENCE));
|
|
snmpStats.snmpInASNParseErrs++;
|
|
+ Tcl_SetResult(interp, res, TCL_VOLATILE);
|
|
return TCL_ERROR;
|
|
}
|
|
buflen += 1;
|
|
@@ -687,7 +689,8 @@ DecodeMessage(interp, msg, pdu, packet,
|
|
if (p == NULL) goto asn1Error;
|
|
|
|
if ((buflen + msglen) != packetlen) {
|
|
- interp->result = "invalid length field in message header";
|
|
+ Tcl_SetResult(interp, "invalid length field in message header",
|
|
+ TCL_STATIC);
|
|
return TCL_ERROR;
|
|
}
|
|
|
|
@@ -717,8 +720,9 @@ DecodeMessage(interp, msg, pdu, packet,
|
|
#endif
|
|
default:
|
|
snmpStats.snmpInBadVersions++;
|
|
- sprintf(interp->result,
|
|
+ sprintf(res,
|
|
"received packet with unknown SNMP version %d", version);
|
|
+ Tcl_SetResult(interp, res, TCL_VOLATILE);
|
|
return TCL_ERROR;
|
|
}
|
|
|
|
@@ -727,10 +731,11 @@ DecodeMessage(interp, msg, pdu, packet,
|
|
*/
|
|
|
|
if (*p != ASN1_OCTET_STRING) {
|
|
- sprintf(interp->result,
|
|
+ sprintf(res,
|
|
"Parameter string: invalid value 0x%.2x; expecting 0x%.2x",
|
|
*p, ASN1_OCTET_STRING);
|
|
snmpStats.snmpInASNParseErrs++;
|
|
+ Tcl_SetResult(interp, res, TCL_VOLATILE);
|
|
return TCL_ERROR;
|
|
}
|
|
p = Tnm_BerDecOctetString(p, &buflen, ASN1_OCTET_STRING,
|
|
@@ -756,10 +761,11 @@ DecodeMessage(interp, msg, pdu, packet,
|
|
}
|
|
|
|
if (buflen != msglen) {
|
|
- sprintf(interp->result,
|
|
+ sprintf(res,
|
|
"Message sequence length (%d) differs from real length (%d).",
|
|
buflen, (int) msglen);
|
|
snmpStats.snmpInASNParseErrs++;
|
|
+ Tcl_SetResult(interp, res, TCL_VOLATILE);
|
|
return TCL_ERROR;
|
|
}
|
|
|
|
@@ -986,6 +992,7 @@ DecodePDU(interp, pdu, packet, packetlen
|
|
char *snmpTrapEnterprise = NULL;
|
|
|
|
u_char tag;
|
|
+ char res[128];
|
|
|
|
Tcl_DStringInit(&pdu->varbind);
|
|
|
|
@@ -1022,9 +1029,10 @@ DecodePDU(interp, pdu, packet, packetlen
|
|
pdu->type = TNM_SNMP_REPORT;
|
|
break;
|
|
default:
|
|
- sprintf(interp->result,
|
|
+ sprintf(res,
|
|
"Response-PDU: invalid tag 0x%.2x.", *--packet);
|
|
snmpStats.snmpInASNParseErrs++;
|
|
+ Tcl_SetResult(interp, res, TCL_VOLATILE);
|
|
return TCL_ERROR;
|
|
}
|
|
pdulen = 1;
|
|
@@ -1139,14 +1147,14 @@ DecodePDU(interp, pdu, packet, packetlen
|
|
Tcl_DStringAppendElement(&pdu->varbind, "OBJECT IDENTIFIER");
|
|
{
|
|
#if 1
|
|
- char *tmp = Tnm_MibFormat("1.3.6.1.6.3.1.1.4.1.0", 0, toid);
|
|
+ const char *tmp = Tnm_MibFormat("1.3.6.1.6.3.1.1.4.1.0", 0, toid);
|
|
if (tmp) {
|
|
Tcl_DStringAppendElement(&pdu->varbind, tmp);
|
|
} else {
|
|
Tcl_DStringAppendElement(&pdu->varbind, toid);
|
|
}
|
|
#else
|
|
- char *tmp = Tnm_MibGetName(toid, 0);
|
|
+ const char *tmp = Tnm_MibGetName(toid, 0);
|
|
if (tmp) {
|
|
Tcl_DStringAppendElement(&pdu->varbind, tmp);
|
|
} else {
|
|
@@ -1201,10 +1209,11 @@ DecodePDU(interp, pdu, packet, packetlen
|
|
if (pdu->type == TNM_SNMPv1_TRAP) {
|
|
goto trapError;
|
|
}
|
|
- sprintf(interp->result,
|
|
+ sprintf(res,
|
|
"VarBindList: invalid tag 0x%.2x; expecting 0x%.2x",
|
|
*--packet, (ASN1_UNIVERSAL | ASN1_CONSTRUCTED | ASN1_SEQUENCE));
|
|
snmpStats.snmpInASNParseErrs++;
|
|
+ Tcl_SetResult(interp, res, TCL_VOLATILE);
|
|
return TCL_ERROR;
|
|
}
|
|
pdulen += 1;
|
|
@@ -1213,7 +1222,7 @@ DecodePDU(interp, pdu, packet, packetlen
|
|
if (packet == NULL) goto asn1Error;
|
|
|
|
if ((pdulen + asnlen) != deflen) {
|
|
- interp->result = "VarBindList: invalid length field";
|
|
+ Tcl_SetResult(interp, "VarBindList: invalid length field", TCL_STATIC);
|
|
snmpStats.snmpInASNParseErrs++;
|
|
return TCL_ERROR;
|
|
}
|
|
@@ -1229,10 +1238,11 @@ DecodePDU(interp, pdu, packet, packetlen
|
|
*/
|
|
|
|
if (*packet++ != (ASN1_UNIVERSAL | ASN1_CONSTRUCTED | ASN1_SEQUENCE)) {
|
|
- sprintf(interp->result,
|
|
+ sprintf(res,
|
|
"VarBind: invalid tag 0x%.2x; expecting 0x%.2x",
|
|
*--packet, (ASN1_UNIVERSAL | ASN1_CONSTRUCTED | ASN1_SEQUENCE));
|
|
snmpStats.snmpInASNParseErrs++;
|
|
+ Tcl_SetResult(interp, res, TCL_VOLATILE);
|
|
return TCL_ERROR;
|
|
}
|
|
pdulen += 1;
|
|
@@ -1316,7 +1326,7 @@ DecodePDU(interp, pdu, packet, packetlen
|
|
case ASN1_INTEGER:
|
|
packet = Tnm_BerDecInt(packet, &pdulen, *packet, &int_val);
|
|
if (packet == NULL) goto asn1Error;
|
|
- { char *tmp;
|
|
+ { const char *tmp;
|
|
sprintf(buf, "%d", int_val);
|
|
tmp = Tnm_MibFormat(vboid, 0, buf);
|
|
if (tmp) {
|
|
@@ -1367,7 +1377,7 @@ DecodePDU(interp, pdu, packet, packetlen
|
|
if (packet == NULL) goto asn1Error;
|
|
#if 1
|
|
{ char *soid = Tnm_OidToStr(oid, oidlen);
|
|
- char *tmp = Tnm_MibFormat(vboid, 0, soid);
|
|
+ const char *tmp = Tnm_MibFormat(vboid, 0, soid);
|
|
if (tmp) {
|
|
Tcl_DStringAppendElement(&pdu->varbind, tmp);
|
|
} else {
|
|
@@ -1396,7 +1406,7 @@ DecodePDU(interp, pdu, packet, packetlen
|
|
packet = Tnm_BerDecOctetString(packet, &pdulen, tag,
|
|
(char **) &freeme, &int_val);
|
|
if (packet == NULL) goto asn1Error;
|
|
- { char *tmp;
|
|
+ { const char *tmp;
|
|
static char *hex = NULL;
|
|
static int hexLen = 0;
|
|
if (hexLen < int_val * 5 + 1) {
|
|
@@ -1418,8 +1428,9 @@ DecodePDU(interp, pdu, packet, packetlen
|
|
}
|
|
break;
|
|
default:
|
|
- sprintf(interp->result, "unknown asn1 type 0x%.2x", *packet);
|
|
+ sprintf(res, "unknown asn1 type 0x%.2x", *packet);
|
|
snmpStats.snmpInASNParseErrs++;
|
|
+ Tcl_SetResult(interp, res, TCL_VOLATILE);
|
|
return TCL_ERROR;
|
|
}
|
|
|
|
@@ -1444,10 +1455,11 @@ DecodePDU(interp, pdu, packet, packetlen
|
|
*packetlen += pdulen;
|
|
|
|
if (pdulen != deflen) {
|
|
- sprintf(interp->result,
|
|
+ sprintf(res,
|
|
"PDU sequence length (%d) differs from real length (%d).",
|
|
pdulen, (int) deflen);
|
|
snmpStats.snmpInASNParseErrs++;
|
|
+ Tcl_SetResult(interp, res, TCL_VOLATILE);
|
|
return TCL_ERROR;
|
|
}
|
|
|