5 #include <net-snmp/net-snmp-config.h>
15 #if TIME_WITH_SYS_TIME
17 # include <sys/timeb.h>
19 # include <sys/time.h>
24 # include <sys/time.h>
34 #include <net-snmp/net-snmp-includes.h>
35 #include <net-snmp/agent/net-snmp-agent-includes.h>
37 #include "util_funcs.h"
38 #include "ucdDemoPublic.h"
44 static char demoUsers[MAXUSERS][MYMAX + 1];
45 static char demopass[MYMAX + 1];
48 ucdDemo_parse_user(const char *word, char *line)
53 if (strlen(line) > MYMAX)
56 strcpy(demoUsers[num++], line);
61 ucdDemo_parse_userpass(const char *word, char *line)
63 if (strlen(line) > MYMAX)
66 strcpy(demopass, line);
70 * this variable defines function callbacks and type return information
71 * for the ucdDemoPublic mib
74 struct variable2 ucdDemoPublic_variables[] = {
75 {UCDDEMORESETKEYS, ASN_INTEGER, RWRITE, var_ucdDemoPublic, 1, {1}},
76 {UCDDEMOPUBLICSTRING, ASN_OCTET_STR, RWRITE, var_ucdDemoPublic, 1,
78 {UCDDEMOUSERLIST, ASN_OCTET_STR, RWRITE, var_ucdDemoPublic, 1, {3}},
79 {UCDDEMOPASSPHRASE, ASN_OCTET_STR, RWRITE, var_ucdDemoPublic, 1, {4}},
84 * Define the OID pointer to the top of the mib tree that we're
85 * registering underneath
87 oid ucdDemoPublic_variables_oid[] =
88 { 1, 3, 6, 1, 4, 1, 2021, 14, 1, 1 };
91 init_ucdDemoPublic(void)
93 REGISTER_MIB("examples/ucdDemoPublic", ucdDemoPublic_variables,
94 variable2, ucdDemoPublic_variables_oid);
95 snmpd_register_config_handler("demoUser",
96 ucdDemo_parse_user, NULL, "USER");
97 snmpd_register_config_handler("demoPass",
98 ucdDemo_parse_userpass, NULL,
102 unsigned char publicString[MYMAX + 1];
105 var_ucdDemoPublic(struct variable *vp,
108 int exact, size_t * var_len, WriteMethod ** write_method)
110 static long long_ret;
111 static char string[MYMAX + 1], *cp;
114 *write_method = 0; /* assume it isnt writable for the time being */
115 *var_len = sizeof(long_ret); /* assume an integer and change later if not */
117 if (header_generic(vp, name, length, exact, var_len, write_method))
121 * this is where we do the value assignments for the mib results.
125 case UCDDEMORESETKEYS:
126 *write_method = write_ucdDemoResetKeys;
128 return (unsigned char *) &long_ret;
130 case UCDDEMOPUBLICSTRING:
131 *write_method = write_ucdDemoPublicString;
132 *var_len = strlen(publicString);
133 return (unsigned char *) publicString;
135 case UCDDEMOUSERLIST:
137 for (i = 0; i < num; i++) {
138 snprintf(cp, sizeof(string)-strlen(string), " %s", demoUsers[i]);
140 cp = cp + strlen(cp);
142 *var_len = strlen(string);
143 return (unsigned char *) string;
145 case UCDDEMOPASSPHRASE:
146 *var_len = strlen(demopass);
147 return (unsigned char *) demopass;
150 DEBUGMSGTL(("snmpd", "unknown sub-id %d in var_ucdDemoPublic\n",
157 write_ucdDemoResetKeys(int action,
161 u_char * statP, oid * name, size_t name_len)
164 * variables we may use later
166 static long long_ret;
167 unsigned char *engineID;
170 struct usmUser *user;
172 if (var_val_type != ASN_INTEGER) {
173 DEBUGMSGTL(("ucdDemoPublic",
174 "write to ucdDemoResetKeys not ASN_INTEGER\n"));
175 return SNMP_ERR_WRONGTYPE;
177 if (var_val_len > sizeof(long_ret)) {
178 DEBUGMSGTL(("ucdDemoPublic",
179 "write to ucdDemoResetKeys: bad length\n"));
180 return SNMP_ERR_WRONGLENGTH;
182 if (action == COMMIT) {
183 long_ret = *((long *) var_val);
185 engineID = snmpv3_generate_engineID(&engineIDLen);
186 for (i = 0; i < num; i++) {
187 user = usm_get_user(engineID, engineIDLen, demoUsers[i]);
189 usm_set_user_password(user, "userSetAuthPass",
191 usm_set_user_password(user, "userSetPrivPass",
200 return SNMP_ERR_NOERROR;
204 write_ucdDemoPublicString(int action,
208 u_char * statP, oid * name, size_t name_len)
210 if (var_val_type != ASN_OCTET_STR) {
211 DEBUGMSGTL(("ucdDemoPublic",
212 "write to ucdDemoPublicString not ASN_OCTET_STR\n"));
213 return SNMP_ERR_WRONGTYPE;
215 if (var_val_len > MYMAX) {
216 DEBUGMSGTL(("ucdDemoPublic",
217 "write to ucdDemoPublicString: bad length\n"));
218 return SNMP_ERR_WRONGLENGTH;
220 if (action == COMMIT) {
221 if (var_val_len != 0) {
222 strcpy(publicString, var_val);
223 publicString[var_val_len] = '\0';
225 publicString[0] = '\0';
227 return SNMP_ERR_NOERROR;