⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ucddemopublic.c

📁 snmp的源代码,已经在我的ubuntu下编译通过
💻 C
字号:
/* * ucdDemoPublic.c  */#include <net-snmp/net-snmp-config.h>#if HAVE_STDLIB_H#include <stdlib.h>#endif#if HAVE_STRING_H#include <string.h>#else#include <strings.h>#endif#if TIME_WITH_SYS_TIME# ifdef WIN32#  include <sys/timeb.h># else#  include <sys/time.h># endif# include <time.h>#else# if HAVE_SYS_TIME_H#  include <sys/time.h># else#  include <time.h># endif#endif#if HAVE_WINSOCK_H#include <winsock.h>#endif#include <net-snmp/net-snmp-includes.h>#include <net-snmp/agent/net-snmp-agent-includes.h>#include "util_funcs.h"#include "ucdDemoPublic.h"#define MYMAX 1024#define MAXUSERS 10int             num = 0;static char     demoUsers[MAXUSERS][MYMAX + 1];static char     demopass[MYMAX + 1];voiducdDemo_parse_user(const char *word, char *line){    if (num == MAXUSERS)        return;    if (strlen(line) > MYMAX)        return;    strcpy(demoUsers[num++], line);}voiducdDemo_parse_userpass(const char *word, char *line){    if (strlen(line) > MYMAX)        return;    strcpy(demopass, line);}/* * this variable defines function callbacks and type return information  * for the ucdDemoPublic mib  */struct variable2 ucdDemoPublic_variables[] = {    {UCDDEMORESETKEYS, ASN_INTEGER, RWRITE, var_ucdDemoPublic, 1, {1}},    {UCDDEMOPUBLICSTRING, ASN_OCTET_STR, RWRITE, var_ucdDemoPublic, 1,     {2}},    {UCDDEMOUSERLIST, ASN_OCTET_STR, RWRITE, var_ucdDemoPublic, 1, {3}},    {UCDDEMOPASSPHRASE, ASN_OCTET_STR, RWRITE, var_ucdDemoPublic, 1, {4}},};/* * Define the OID pointer to the top of the mib tree that we're * registering underneath  */oid             ucdDemoPublic_variables_oid[] =    { 1, 3, 6, 1, 4, 1, 2021, 14, 1, 1 };voidinit_ucdDemoPublic(void){    REGISTER_MIB("examples/ucdDemoPublic", ucdDemoPublic_variables,                 variable2, ucdDemoPublic_variables_oid);    snmpd_register_config_handler("demoUser",                                  ucdDemo_parse_user, NULL, "USER");    snmpd_register_config_handler("demoPass",                                  ucdDemo_parse_userpass, NULL,                                  "PASSPHASE");}unsigned char   publicString[MYMAX + 1];unsigned char  *var_ucdDemoPublic(struct variable *vp,                  oid * name,                  size_t * length,                  int exact, size_t * var_len, WriteMethod ** write_method){    static long     long_ret;    static char     string[MYMAX + 1], *cp;    int             i;    *write_method = 0;          /* assume it isnt writable for the time being */    *var_len = sizeof(long_ret);        /* assume an integer and change later if not */    if (header_generic(vp, name, length, exact, var_len, write_method))        return 0;    /*     * this is where we do the value assignments for the mib results.      */    switch (vp->magic) {    case UCDDEMORESETKEYS:        *write_method = write_ucdDemoResetKeys;        long_ret = 0;        return (unsigned char *) &long_ret;    case UCDDEMOPUBLICSTRING:        *write_method = write_ucdDemoPublicString;        *var_len = strlen(publicString);        return (unsigned char *) publicString;    case UCDDEMOUSERLIST:        cp = string;        for (i = 0; i < num; i++) {            snprintf(cp, sizeof(string)-strlen(string), " %s", demoUsers[i]);            string[MYMAX] = 0;            cp = cp + strlen(cp);        }        *var_len = strlen(string);        return (unsigned char *) string;    case UCDDEMOPASSPHRASE:        *var_len = strlen(demopass);        return (unsigned char *) demopass;    default:        DEBUGMSGTL(("snmpd", "unknown sub-id %d in var_ucdDemoPublic\n",                    vp->magic));    }    return 0;}intwrite_ucdDemoResetKeys(int action,                       u_char * var_val,                       u_char var_val_type,                       size_t var_val_len,                       u_char * statP, oid * name, size_t name_len){    /*     * variables we may use later      */    static long     long_ret;    unsigned char  *engineID;    size_t          engineIDLen;    int             i;    struct usmUser *user;    if (var_val_type != ASN_INTEGER) {        DEBUGMSGTL(("ucdDemoPublic",                    "write to ucdDemoResetKeys not ASN_INTEGER\n"));        return SNMP_ERR_WRONGTYPE;    }    if (var_val_len > sizeof(long_ret)) {        DEBUGMSGTL(("ucdDemoPublic",                    "write to ucdDemoResetKeys: bad length\n"));        return SNMP_ERR_WRONGLENGTH;    }    if (action == COMMIT) {        long_ret = *((long *) var_val);        if (long_ret == 1) {            engineID = snmpv3_generate_engineID(&engineIDLen);            for (i = 0; i < num; i++) {                user = usm_get_user(engineID, engineIDLen, demoUsers[i]);                if (user) {                    usm_set_user_password(user, "userSetAuthPass",                                          demopass);                    usm_set_user_password(user, "userSetPrivPass",                                          demopass);                }            }            /*             * reset the keys              */        }    }    return SNMP_ERR_NOERROR;}intwrite_ucdDemoPublicString(int action,                          u_char * var_val,                          u_char var_val_type,                          size_t var_val_len,                          u_char * statP, oid * name, size_t name_len){    if (var_val_type != ASN_OCTET_STR) {        DEBUGMSGTL(("ucdDemoPublic",                    "write to ucdDemoPublicString not ASN_OCTET_STR\n"));        return SNMP_ERR_WRONGTYPE;    }    if (var_val_len > MYMAX) {        DEBUGMSGTL(("ucdDemoPublic",                    "write to ucdDemoPublicString: bad length\n"));        return SNMP_ERR_WRONGLENGTH;    }    if (action == COMMIT) {        if (var_val_len != 0) {            strcpy(publicString, var_val);            publicString[var_val_len] = '\0';        } else            publicString[0] = '\0';    }    return SNMP_ERR_NOERROR;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -