📄 ucddemopublic.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 + -