]> granicus.if.org Git - php/commitdiff
Updated the files so that they have all the functionality of
authorSteven Lawrance <slawrance@php.net>
Wed, 4 Aug 1999 20:56:33 +0000 (20:56 +0000)
committerSteven Lawrance <slawrance@php.net>
Wed, 4 Aug 1999 20:56:33 +0000 (20:56 +0000)
PHP 3.0.12.  These include snmpwalkoid, snmp_get_quick_print, snmp_set_quick_print, and snmpset.

ext/snmp/php3_snmp.h
ext/snmp/snmp.c

index de68105ff74192bdaf23f6acea60f71f86be2ec2..047d3ebf1af5219dd40db1a9964f81b4c5254b0d 100644 (file)
@@ -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
 
index fa709fe0978904069f9e84026f846a0210412ec2..e354b0de95654dc61276202a232eedd2b61082dd 100644 (file)
@@ -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"
 #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:
+*/