summaryrefslogtreecommitdiff
path: root/ext
diff options
context:
space:
mode:
authorSteven Lawrance <slawrance@php.net>1999-08-04 20:56:33 +0000
committerSteven Lawrance <slawrance@php.net>1999-08-04 20:56:33 +0000
commit2aa4138668388c3526a4ca3d20a235b051a774fc (patch)
tree7b9d1fc6197c5cf8261a81bdf09fc32ef91668e1 /ext
parent1570c5b30e02ddec9ade660df3198b3cf5d28554 (diff)
downloadphp-git-2aa4138668388c3526a4ca3d20a235b051a774fc.tar.gz
Updated the files so that they have all the functionality of
PHP 3.0.12. These include snmpwalkoid, snmp_get_quick_print, snmp_set_quick_print, and snmpset.
Diffstat (limited to 'ext')
-rw-r--r--ext/snmp/php3_snmp.h50
-rw-r--r--ext/snmp/snmp.c217
2 files changed, 177 insertions, 90 deletions
diff --git a/ext/snmp/php3_snmp.h b/ext/snmp/php3_snmp.h
index de68105ff7..047d3ebf1a 100644
--- a/ext/snmp/php3_snmp.h
+++ b/ext/snmp/php3_snmp.h
@@ -1,31 +1,23 @@
/*
- +----------------------------------------------------------------------+
- | PHP HTML Embedded Scripting Language Version 3.0 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997,1998 PHP Development Team (See Credits file) |
- +----------------------------------------------------------------------+
- | This program is free software; you can redistribute it and/or modify |
- | it under the terms of one of the following licenses: |
- | |
- | A) the GNU General Public License as published by the Free Software |
- | Foundation; either version 2 of the License, or (at your option) |
- | any later version. |
- | |
- | B) the PHP License as published by the PHP Development Team and |
- | included in the distribution in the file: LICENSE |
- | |
- | This program is distributed in the hope that it will be useful, |
- | but WITHOUT ANY WARRANTY; without even the implied warranty of |
- | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
- | GNU General Public License for more details. |
- | |
- | You should have received a copy of both licenses referred to here. |
- | If you did not, or have any questions about PHP licensing, please |
- | contact core@php.net. |
- +----------------------------------------------------------------------+
- | Authors: Rasmus Lerdorf <rasmus@lerdorf.on.ca> |
- +----------------------------------------------------------------------+
- */
++----------------------------------------------------------------------+
+| PHP version 4.0 |
++----------------------------------------------------------------------+
+| Copyright (c) 1997, 1998, 1999 The PHP Group |
++----------------------------------------------------------------------+
+| This source file is subject to version 2.0 of the PHP license, |
+| that is bundled with this package in the file LICENSE, and is |
+| available at through the world-wide-web at |
+| http://www.php.net/license/2_0.txt. |
+| If you did not receive a copy of the PHP license and are unable to |
+| obtain it through the world-wide-web, please send a note to |
+| license@php.net so we can mail you a copy immediately. |
++----------------------------------------------------------------------+
+| Authors: Rasmus Lerdorf <rasmus@lerdorf.on.ca> |
+| Mike Jackson <mhjack@tscnet.com> |
+| Steven Lawrance <slawrance@technologist.com> |
++----------------------------------------------------------------------+
+*/
+
/* $Id$ */
#ifndef _PHP3_SNMP_H
#define _PHP3_SNMP_H
@@ -46,6 +38,10 @@ extern int php3i_snmp_init(INIT_FUNC_ARGS);
PHP_FUNCTION(snmpget);
PHP_FUNCTION(snmpwalk);
PHP_FUNCTION(snmprealwalk);
+PHP_FUNCTION(snmpwalkoid);
+PHP_FUNCTION(snmp_get_quick_print);
+PHP_FUNCTION(snmp_set_quick_print);
+PHP_FUNCTION(snmpset);
void php3_info_snmp(ZEND_MODULE_INFO_FUNC_ARGS);
#else
diff --git a/ext/snmp/snmp.c b/ext/snmp/snmp.c
index fa709fe097..e354b0de95 100644
--- a/ext/snmp/snmp.c
+++ b/ext/snmp/snmp.c
@@ -1,20 +1,22 @@
/*
- +----------------------------------------------------------------------+
- | PHP version 4.0 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997, 1998, 1999 The PHP Group |
- +----------------------------------------------------------------------+
- | This source file is subject to version 2.0 of the PHP license, |
- | that is bundled with this package in the file LICENSE, and is |
- | available at through the world-wide-web at |
- | http://www.php.net/license/2_0.txt. |
- | If you did not receive a copy of the PHP license and are unable to |
- | obtain it through the world-wide-web, please send a note to |
- | license@php.net so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Authors: Rasmus Lerdorf <rasmus@lerdorf.on.ca> |
- +----------------------------------------------------------------------+
- */
++----------------------------------------------------------------------+
+| PHP version 4.0 |
++----------------------------------------------------------------------+
+| Copyright (c) 1997, 1998, 1999 The PHP Group |
++----------------------------------------------------------------------+
+| This source file is subject to version 2.0 of the PHP license, |
+| that is bundled with this package in the file LICENSE, and is |
+| available at through the world-wide-web at |
+| http://www.php.net/license/2_0.txt. |
+| If you did not receive a copy of the PHP license and are unable to |
+| obtain it through the world-wide-web, please send a note to |
+| license@php.net so we can mail you a copy immediately. |
++----------------------------------------------------------------------+
+| Authors: Rasmus Lerdorf <rasmus@lerdorf.on.ca> |
+| Mike Jackson <mhjack@tscnet.com> |
+| Steven Lawrance <slawrance@technologist.com> |
++----------------------------------------------------------------------+
+*/
/* $Id$ */
#include "php.h"
@@ -33,7 +35,11 @@
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
+#ifndef _OSD_POSIX
#include <sys/errno.h>
+#else
+#include <errno.h> /* BS2000/OSD uses <errno.h>, not <sys/errno.h> */
+#endif
#include <netdb.h>
#endif
#ifdef HAVE_UNISTD_H
@@ -73,8 +79,12 @@ void sprint_variable(char *, oid *, int, struct variable_list *);
function_entry snmp_functions[] = {
PHP_FE(snmpget, NULL)
- PHP_FE(snmpwalk, NULL)
- PHP_FE(snmprealwalk, NULL)
+ PHP_FE(snmpwalk, NULL)
+ PHP_FE(snmprealwalk, NULL)
+ PHP_FE(snmpwalkoid, NULL)
+ PHP_FE(snmp_get_quick_print, NULL)
+ PHP_FE(snmp_set_quick_print, NULL)
+ PHP_FE(snmpset, NULL)
{NULL,NULL,NULL}
};
@@ -99,14 +109,22 @@ void php3_info_snmp(ZEND_MODULE_INFO_FUNC_ARGS) {
/*
- * Generic SNMP object fetcher
- *
- * st=1 GET
- * st=2 WALK
- * st=3 WALK (returns OIDs additionally)
- */
+* Generic SNMP object fetcher
+*
+* st=1 snmpget() - query an agent and return a single value.
+* st=2 snmpwalk() - walk the mib and return a single dimensional array
+* containing the values.
+* st=3,4 snmprealwalk() and snmpwalkoid() - walk the mib and return an
+* array of oid,value pairs.
+* st=5-8 ** Reserved **
+* st=9 snmp_get_quick_print() - Return the current value for quickprint
+* (default setting is 0 (false)).
+* st=10 snmp_set_quick_print() - Set the current value for quickprint
+* st=11 snmpset() - query an agent and set a single value
+*
+*/
void _php3_snmp(INTERNAL_FUNCTION_PARAMETERS, int st) {
- pval *a1, *a2, *a3, *a4, *a5;
+ pval *a1, *a2, *a3, *a4, *a5, *a6, *a7;
struct snmp_session session, *ss;
struct snmp_pdu *pdu=NULL, *response;
struct variable_list *vars;
@@ -121,20 +139,51 @@ void _php3_snmp(INTERNAL_FUNCTION_PARAMETERS, int st) {
long timeout=SNMP_DEFAULT_TIMEOUT;
long retries=SNMP_DEFAULT_RETRIES;
int myargc = ARG_COUNT(ht);
+ char type;
+ char *value;
- if (myargc<3 || myargc>5 || getParameters(ht, myargc, &a1, &a2, &a3, &a4, &a5) == FAILURE) {
+ switch(st) {
+ case 4:
+ st = 3; /* This is temporary until snmprealwalk() is removed */
+ break;
+ case 9:
+ RETURN_LONG(snmp_get_quick_print()?1:0);
+ case 10:
+ if(myargc != 1 || getParameters(ht, myargc, &a1)) WRONG_PARAM_COUNT;
+ convert_to_long(a1);
+ snmp_set_quick_print((int) a1->value.lval);
+ RETURN_TRUE;
+ }
+
+ if (myargc<3 || myargc>7 || getParameters(ht, myargc, &a1, &a2, &a3, &a4, &a5, &a6, &a7) == FAILURE) {
WRONG_PARAM_COUNT;
}
convert_to_string(a1);
convert_to_string(a2);
convert_to_string(a3);
- if(myargc>3) {
- convert_to_long(a4);
- timeout=a4->value.lval;
- }
- if(myargc>4) {
- convert_to_long(a5);
- retries=a5->value.lval;
+ if (st==11) {
+ if (myargc<5) WRONG_PARAM_COUNT;
+ convert_to_string(a4);
+ convert_to_string(a5);
+ if(myargc>5) {
+ convert_to_long(a6);
+ timeout=a6->value.lval;
+ }
+ if(myargc>6) {
+ convert_to_long(a7);
+ retries=a7->value.lval;
+ }
+ type = a4->value.str.val[0];
+ value = a5->value.str.val;
+ } else {
+ if(myargc>3) {
+ convert_to_long(a4);
+ timeout=a4->value.lval;
+ }
+ if(myargc>4) {
+ convert_to_long(a5);
+ retries=a5->value.lval;
+ }
}
objid=a3->value.str.val;
@@ -147,23 +196,23 @@ void _php3_snmp(INTERNAL_FUNCTION_PARAMETERS, int st) {
php_error(E_WARNING,"Invalid object identifier: %s\n", objid);
}
}
- if (gotroot == 0) {
+ if (gotroot == 0) {
memmove((char *)root, (char *)objid_mib, sizeof(objid_mib));
- rootlen = sizeof(objid_mib) / sizeof(oid);
- gotroot = 1;
- }
+ rootlen = sizeof(objid_mib) / sizeof(oid);
+ gotroot = 1;
+ }
}
-
+
memset(&session, 0, sizeof(struct snmp_session));
session.peername = a1->value.str.val;
-
+
session.version = SNMP_VERSION_1;
/*
- * FIXME: potential memory leak
- * This is a workaround for an "artifact" (Mike Slifcak)
- * in (at least) ucd-snmp 3.6.1 which frees
- * memory it did not allocate
- */
+ * FIXME: potential memory leak
+ * This is a workaround for an "artifact" (Mike Slifcak)
+ * in (at least) ucd-snmp 3.6.1 which frees
+ * memory it did not allocate
+ */
#ifdef UCD_SNMP_HACK
session.community = (u_char *) strdup(a2->value.str.val);
#else
@@ -172,7 +221,7 @@ void _php3_snmp(INTERNAL_FUNCTION_PARAMETERS, int st) {
session.community_len = a2->value.str.len;
session.retries = retries;
session.timeout = timeout;
-
+
session.authenticator = NULL;
snmp_synch_setup(&session);
ss = snmp_open(&session);
@@ -186,12 +235,13 @@ void _php3_snmp(INTERNAL_FUNCTION_PARAMETERS, int st) {
/* prepare result array */
array_init(return_value);
}
-
+
while(keepwalking) {
keepwalking=0;
if (st==1) pdu = snmp_pdu_create(SNMP_MSG_GET);
+ else if (st==11) pdu = snmp_pdu_create(SNMP_MSG_SET);
else if (st>=2) pdu = snmp_pdu_create(SNMP_MSG_GETNEXT);
-
+
if (st==1) {
name_length = MAX_NAME_LEN;
if (!read_objid(objid, name, &name_length)) {
@@ -199,17 +249,25 @@ void _php3_snmp(INTERNAL_FUNCTION_PARAMETERS, int st) {
RETURN_FALSE;
}
}
- snmp_add_null_var(pdu, name, name_length);
-
+ if (st!=11)
+ snmp_add_null_var(pdu, name, name_length);
+ else {
+ if (snmp_add_var(pdu, name, name_length, type, value)) {
+ php_error(E_WARNING,"Could not add variable: %s\n", name);
+ RETURN_FALSE;
+ }
+ }
+
retry:
status = snmp_synch_response(ss, pdu, &response);
if (status == STAT_SUCCESS) {
if (response->errstat == SNMP_ERR_NOERROR) {
for(vars = response->variables; vars; vars = vars->next_variable) {
- if (st>=2 && (vars->name_length < rootlen || memcmp(root, vars->name, rootlen * sizeof(oid))))
+ if (st>=2 && st!=11 && (vars->name_length < rootlen || memcmp(root, vars->name, rootlen * sizeof(oid))))
continue; /* not part of this subtree */
-
- sprint_value(buf,vars->name, vars->name_length, vars);
+
+ if (st!=11)
+ sprint_value(buf,vars->name, vars->name_length, vars);
#if 0
Debug("snmp response is: %s\n",buf);
#endif
@@ -219,10 +277,10 @@ retry:
/* Add to returned array */
add_next_index_string(return_value,buf,1);
} else if (st==3) {
- sprint_objid(buf2, name, name_length);
+ sprint_objid(buf2, vars->name, vars->name_length);
add_assoc_string(return_value,buf2,buf,1);
}
- if (st>=2) {
+ if (st>=2 && st!=11) {
if (vars->type != SNMP_ENDOFMIBVIEW && vars->type != SNMP_NOSUCHOBJECT && vars->type != SNMP_NOSUCHINSTANCE) {
memmove((char *)name, (char *)vars->name,vars->name_length * sizeof(oid));
name_length = vars->name_length;
@@ -235,12 +293,14 @@ retry:
php_error(E_WARNING,"Error in packet.\nReason: %s\n", 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++);
+ vars = vars->next_variable, count++);
if (vars) sprint_objid(buf,vars->name, vars->name_length);
php_error(E_WARNING,"This name does not exist: %s\n",buf);
}
if (st==1) {
if ((pdu = snmp_fix_pdu(response, SNMP_MSG_GET)) != NULL) goto retry;
+ } else if (st==11) {
+ if ((pdu = snmp_fix_pdu(response, SNMP_MSG_SET)) != NULL) goto retry;
} else if (st>=2) {
if ((pdu = snmp_fix_pdu(response, SNMP_MSG_GETNEXT)) != NULL) goto retry;
}
@@ -260,32 +320,63 @@ retry:
}
/* {{{ proto string snmpget(string host, string community, string object_id [, int timeout [, int retries]])
- Fetch an SNMP object */
+Fetch an SNMP object */
PHP_FUNCTION(snmpget) {
_php3_snmp(INTERNAL_FUNCTION_PARAM_PASSTHRU,1);
}
/* }}} */
/* {{{ proto string snmpwalk(string host, string community, string object_id [, int timeout [, int retries]])
- Return all objects under the specified object id */
+Return all objects under the specified object id */
PHP_FUNCTION(snmpwalk) {
return _php3_snmp(INTERNAL_FUNCTION_PARAM_PASSTHRU,2);
}
/* }}} */
/* {{{ proto string snmprealwalk(string host, string community, string object_id [, int timeout [, int retries]])
- Return all objects including their respective object id withing the specified one */
+Return all objects including their respective object id withing the specified one */
PHP_FUNCTION(snmprealwalk)
{
return _php3_snmp(INTERNAL_FUNCTION_PARAM_PASSTHRU,3);
}
/* }}} */
+/* {{{ proto string snmprealoid(string host, string community, string object_id [, int timeout [, int retries]])
+Return all objects including their respective object id withing the specified one */
+PHP_FUNCTION(snmpwalkoid)
+{
+ _php3_snmp(INTERNAL_FUNCTION_PARAM_PASSTHRU,4);
+}
+/* }}} */
+
+/* {{{ proto int snmp_get_quick_print(void)
+Return the current status of quick_print */
+PHP_FUNCTION(snmp_get_quick_print)
+{
+ _php3_snmp(INTERNAL_FUNCTION_PARAM_PASSTHRU,9);
+}
+/* }}} */
+
+/* {{{ proto void snmp_set_quick_print(int quick_print)
+Return all objects including their respective object id withing the specified one */
+PHP_FUNCTION(snmp_set_quick_print)
+{
+ _php3_snmp(INTERNAL_FUNCTION_PARAM_PASSTHRU,10);
+}
+/* }}} */
+
+/* {{{ proto int snmpset(string host, string community, string object_id, string type, mixed value [, int timeout [, int retries]])
+Set the value of a SNMP object */
+PHP_FUNCTION(php3_snmpset) {
+ _php3_snmp(INTERNAL_FUNCTION_PARAM_PASSTHRU,11);
+}
+/* }}} */
+
#endif
/*
- * Local variables:
- * tab-width: 4
- * c-basic-offset: 4
- * End:
- */
+* Local variables:
+* tab-width: 4
+* c-basic-offset: 4
+* End:
+*/