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

📄 snmp_secmod.c

📁 snmp up 2
💻 C
字号:
/* * security service wrapper to support pluggable security models  */#include <net-snmp/net-snmp-config.h>#include <stdio.h>#include <ctype.h>#if HAVE_STDLIB_H#include <stdlib.h>#endif#if HAVE_STRING_H#include <string.h>#else#include <strings.h>#endif#if HAVE_UNISTD_H#include <unistd.h>#endif#if HAVE_DMALLOC_H#include <dmalloc.h>#endif#include <net-snmp/types.h>#include <net-snmp/output_api.h>#include <net-snmp/config_api.h>#include <net-snmp/utilities.h>#include <net-snmp/library/snmp_api.h>#include <net-snmp/library/snmp_enum.h>#include <net-snmp/library/callback.h>#include <net-snmp/library/snmp_secmod.h>#include <net-snmp/library/snmpusm.h>static struct snmp_secmod_list *registered_services = NULL;static SNMPCallback set_default_secmod;voidinit_secmod(void){    snmp_register_callback(SNMP_CALLBACK_LIBRARY,                           SNMP_CALLBACK_SESSION_INIT, set_default_secmod,                           NULL);    netsnmp_ds_register_config(ASN_OCTET_STR, "snmp", "defSecurityModel",			       NETSNMP_DS_LIBRARY_ID, NETSNMP_DS_LIB_SECMODEL);    /*     * this file is generated by configure for all the stuff we're using      */#include "snmpsm_init.h"}intregister_sec_mod(int secmod, const char *modname,                 struct snmp_secmod_def *newdef){    int             result;    struct snmp_secmod_list *sptr;    char           *othername;    for (sptr = registered_services; sptr; sptr = sptr->next) {        if (sptr->securityModel == secmod) {            return SNMPERR_GENERR;        }    }    sptr = SNMP_MALLOC_STRUCT(snmp_secmod_list);    if (sptr == NULL)        return SNMPERR_MALLOC;    sptr->secDef = newdef;    sptr->securityModel = secmod;    sptr->next = registered_services;    registered_services = sptr;    if ((result =         se_add_pair_to_slist("snmp_secmods", strdup(modname), secmod))        != SE_OK) {        switch (result) {        case SE_NOMEM:            snmp_log(LOG_CRIT, "snmp_secmod: no memory\n");            break;        case SE_ALREADY_THERE:            othername = se_find_label_in_slist("snmp_secmods", secmod);            if (strcmp(othername, modname) != 0) {                snmp_log(LOG_ERR,                         "snmp_secmod: two security modules %s and %s registered with the same security number\n",                         secmod, othername);            }            break;        default:            snmp_log(LOG_ERR,                     "snmp_secmod: unknown error trying to register a new security module\n");            break;        }        return SNMPERR_GENERR;    }    return SNMPERR_SUCCESS;}intunregister_sec_mod(int secmod){    struct snmp_secmod_list *sptr, *lptr;    for (sptr = registered_services, lptr = NULL; sptr;         lptr = sptr, sptr = sptr->next) {        if (sptr->securityModel == secmod) {            lptr->next = sptr->next;            free(sptr);            return SNMPERR_SUCCESS;        }    }    /*     * not registered      */    return SNMPERR_GENERR;}struct snmp_secmod_def *find_sec_mod(int secmod){    struct snmp_secmod_list *sptr;    for (sptr = registered_services; sptr; sptr = sptr->next) {        if (sptr->securityModel == secmod) {            return sptr->secDef;        }    }    /*     * not registered      */    return NULL;}static intset_default_secmod(int major, int minor, void *serverarg, void *clientarg){    netsnmp_session *sess = (netsnmp_session *) serverarg;    char           *cptr;    int             model;    if (!sess)        return SNMPERR_GENERR;    if (sess->securityModel == SNMP_DEFAULT_SECMODEL) {        if ((cptr = netsnmp_ds_get_string(NETSNMP_DS_LIBRARY_ID, 					  NETSNMP_DS_LIB_SECMODEL)) != NULL) {            if ((model = se_find_value_in_slist("snmp_secmods", cptr))		!= SE_DNE) {                sess->securityModel = model;            } else {                snmp_log(LOG_ERR,                         "unknown security model name: %s.  Forcing USM instead.\n",                         cptr);                sess->securityModel = USM_SEC_MODEL_NUMBER;                return SNMPERR_GENERR;            }        } else {            sess->securityModel = USM_SEC_MODEL_NUMBER;        }    }    return SNMPERR_SUCCESS;}

⌨️ 快捷键说明

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