sniper Tue Oct 15 22:33:47 2002 EDT Modified files: /php4/ext/snmp snmp.c Log: - Fixed memleak when connection fails. - Fixed snmpget() to work with net-snmp - Fixed the error messages to use the new style. Index: php4/ext/snmp/snmp.c diff -u php4/ext/snmp/snmp.c:1.64 php4/ext/snmp/snmp.c:1.65 --- php4/ext/snmp/snmp.c:1.64 Tue Oct 15 20:58:15 2002 +++ php4/ext/snmp/snmp.c Tue Oct 15 22:33:47 2002 @@ -17,7 +17,7 @@ | Steven Lawrance <[EMAIL PROTECTED]> | +----------------------------------------------------------------------+ */ -/* $Id: snmp.c,v 1.64 2002/10/16 00:58:15 sniper Exp $ */ +/* $Id: snmp.c,v 1.65 2002/10/16 02:33:47 sniper Exp $ */ #ifdef HAVE_CONFIG_H #include "config.h" @@ -189,7 +189,7 @@ char *value = (char *) 0; char hostname[MAX_NAME_LEN]; int remote_port = 161; - char *pptr; + char *pptr, *err; if (myargc < 3 || myargc > 7 || zend_get_parameters_ex(myargc, &a1, &a2, &a3, &a4, &a5, &a6, &a7) == FAILURE) { @@ -240,7 +240,7 @@ if (read_objid(objid, root, &rootlen)) { gotroot = 1; } else { - php_error(E_WARNING,"Invalid object identifier: %s\n", objid); + php_error(E_WARNING,"Invalid object identifier: %s", +objid); } } @@ -283,7 +283,9 @@ #endif if ((ss = snmp_open(&session)) == NULL) { - php_error(E_WARNING,"Could not open snmp\n"); + snmp_error(&session, NULL, NULL, &err); + php_error_docref(NULL TSRMLS_CC, E_WARNING, "Could not open snmp +connection: %s", err); + free(err); RETURN_FALSE; } @@ -293,11 +295,7 @@ switch(st) { case 2: case 3: - if (array_init(return_value) == FAILURE) { - php_error(E_WARNING, "Cannot prepare result array"); - snmp_close(ss); - RETURN_FALSE; - } + array_init(return_value); break; default: RETVAL_TRUE; @@ -309,9 +307,9 @@ keepwalking = 0; if (st == 1) { pdu = snmp_pdu_create(SNMP_MSG_GET); - name_length = MAX_NAME_LEN; - if (!read_objid(objid, name, &name_length)) { - php_error(E_WARNING,"Invalid object identifier: %s\n", objid); + name_length = MAX_OID_LEN; + if (!snmp_parse_oid(objid, name, &name_length)) { + php_error_docref(NULL TSRMLS_CC, E_WARNING, "Invalid +object identifier: %s", objid); snmp_close(ss); RETURN_FALSE; } @@ -319,7 +317,7 @@ } else if (st == 11) { pdu = snmp_pdu_create(SNMP_MSG_SET); if (snmp_add_var(pdu, name, name_length, type, value)) { - php_error(E_WARNING,"Could not add variable: %s\n", name); + php_error_docref(NULL TSRMLS_CC, E_WARNING, "Could not +add variable: %s", name); snmp_close(ss); RETURN_FALSE; } @@ -369,7 +367,7 @@ } } else { if (st != 2 || response->errstat != SNMP_ERR_NOSUCHNAME) { - php_error(E_WARNING,"Error in packet.\nReason: %s\n", snmp_errstring(response->errstat)); + php_error_docref(NULL TSRMLS_CC, E_WARNING, +"Error in packet: %s", snmp_errstring(response->errstat)); if (response->errstat == SNMP_ERR_NOSUCHNAME) { for (count=1, vars = response->variables; vars && count != response->errindex; vars = vars->next_variable, count++); @@ -380,7 +378,7 @@ sprint_objid((struct sbuf *)buf,vars->name, vars->name_length); #endif } - php_error(E_WARNING,"This name does not exist: %s\n",buf); + php_error_docref(NULL TSRMLS_CC, +E_WARNING, "This name does not exist: %s",buf); } if (st == 1) { if ((pdu = snmp_fix_pdu(response, SNMP_MSG_GET)) != NULL) { @@ -400,11 +398,17 @@ } } } else if (status == STAT_TIMEOUT) { - php_error(E_WARNING,"No Response from %s\n", Z_STRVAL_PP(a1)); + php_error_docref(NULL TSRMLS_CC, E_WARNING, "No Response from +%s", Z_STRVAL_PP(a1)); + if (st == 2 || st == 3) { + zval_dtor(return_value); + } snmp_close(ss); RETURN_FALSE; } else { /* status == STAT_ERROR */ - php_error(E_WARNING,"An error occurred, Quitting...\n"); + php_error_docref(NULL TSRMLS_CC, E_WARNING, "An error +occurred, Quitting."); + if (st == 2 || st == 3) { + zval_dtor(return_value); + } snmp_close(ss); RETURN_FALSE; }
-- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php