1 #include <sys/socket.h>
2
3 #include <err.h>
4 #include <inttypes.h>
5 #include <stdio.h>
6 #include <stdlib.h>
7 #include <string.h>
8 #include <unistd.h>
9
10 #include "regress.h"
11
12 __dead void usage(void);
13
14 const struct {
15 char *target;
16 void (*function)(void);
17 } targets[] = {
18 { "agentx_open_nnbo", agentx_open_nnbo },
19 { "agentx_open_nbo", agentx_open_nbo },
20 { "agentx_open_invalidversion", agentx_open_invalidversion },
21 { "agentx_open_ignore_sessionid", agentx_open_ignore_sessionid },
22 { "agentx_open_invalid_oid", agentx_open_invalid_oid },
23 { "agentx_open_descr_too_long", agentx_open_descr_too_long },
24 { "agentx_open_descr_invalid", agentx_open_descr_invalid },
25 { "agentx_open_context", agentx_open_context },
26 { "agentx_open_instance_registration", agentx_open_instance_registration },
27 { "agentx_open_new_index", agentx_open_new_index },
28 { "agentx_open_any_index", agentx_open_any_index },
29 { "agentx_ping_notopen", agentx_ping_notopen },
30 { "agentx_ping_invalid_sessionid", agentx_ping_invalid_sessionid },
31 { "agentx_ping_default", agentx_ping_default },
32 { "agentx_ping_context", agentx_ping_context },
33 { "agentx_ping_invalid_version", agentx_ping_invalid_version },
34 { "agentx_ping_instance_registration", agentx_ping_instance_registration },
35 { "agentx_ping_new_index", agentx_ping_new_index },
36 { "agentx_ping_any_index", agentx_ping_any_index },
37 { "agentx_ping_nbo_nnbo", agentx_ping_nbo_nnbo },
38 { "agentx_ping_nnbo_nbo", agentx_ping_nnbo_nbo },
39 { "agentx_ping_invalid_version_close", agentx_ping_invalid_version_close },
40 { "agentx_close_notopen", agentx_close_notopen },
41 { "agentx_close_reasonother", agentx_close_reasonother },
42 { "agentx_close_reasonparseerror", agentx_close_reasonparseerror },
43 { "agentx_close_reasonprotocolerror", agentx_close_reasonprotocolerror },
44 { "agentx_close_reasontimouts", agentx_close_reasontimouts },
45 { "agentx_close_reasonshutdown", agentx_close_reasonshutdown },
46 { "agentx_close_reasonbymanager", agentx_close_reasonbymanager },
47 { "agentx_close_reasoninvalid", agentx_close_reasoninvalid },
48 { "agentx_close_single", agentx_close_single },
49 { "agentx_close_notowned", agentx_close_notowned },
50 { "agentx_close_invalid_sessionid", agentx_close_invalid_sessionid },
51 { "agentx_close_context", agentx_close_context },
52 { "agentx_close_invalid_version", agentx_close_invalid_version },
53 { "agentx_close_instance_registration", agentx_close_instance_registration },
54 { "agentx_close_new_index", agentx_close_new_index },
55 { "agentx_close_any_index", agentx_close_any_index },
56 { "agentx_close_nnbo_nbo", agentx_close_nnbo_nbo },
57 { "agentx_register_notopen", agentx_register_notopen },
58 { "agentx_register_invalid_sessionid", agentx_register_invalid_sessionid },
59 { "agentx_register_default", agentx_register_default },
60 { "agentx_register_context", agentx_register_context },
61 { "agentx_register_invalid_version", agentx_register_invalid_version },
62 { "agentx_register_instance_registration", agentx_register_instance_registration },
63 { "agentx_register_new_index", agentx_register_new_index },
64 { "agentx_register_any_index", agentx_register_any_index },
65 { "agentx_register_duplicate_self", agentx_register_duplicate_self },
66 { "agentx_register_duplicate_twocon", agentx_register_duplicate_twocon },
67 { "agentx_register_duplicate_priority", agentx_register_duplicate_priority },
68 { "agentx_register_range", agentx_register_range },
69 { "agentx_register_range_invalidupperbound", agentx_register_range_invalidupperbound },
70 { "agentx_register_range_single", agentx_register_range_single },
71 { "agentx_register_range_overlap_single", agentx_register_range_overlap_single },
72 { "agentx_register_single_overlap_range", agentx_register_single_overlap_range },
73 { "agentx_register_range_overlap_range", agentx_register_range_overlap_range },
74 { "agentx_register_below", agentx_register_below },
75 { "agentx_register_above", agentx_register_above },
76 { "agentx_register_restricted", agentx_register_restricted },
77 { "agentx_unregister_notopen", agentx_unregister_notopen },
78 { "agentx_unregister_invalid_sessionid", agentx_unregister_invalid_sessionid },
79 { "agentx_unregister_notregistered", agentx_unregister_notregistered },
80 { "agentx_unregister_single", agentx_unregister_single },
81 { "agentx_unregister_single_notowned", agentx_unregister_single_notowned },
82 { "agentx_unregister_range", agentx_unregister_range },
83 { "agentx_unregister_range_single", agentx_unregister_range_single },
84 { "agentx_unregister_range_subset", agentx_unregister_range_subset },
85 { "agentx_unregister_range_extra", agentx_unregister_range_extra },
86 { "agentx_unregister_range_priority", agentx_unregister_range_priority },
87 { "agentx_unregister_range_notowned", agentx_unregister_range_notowned },
88 { "backend_get_integer", backend_get_integer },
89 { "backend_get_octetstring", backend_get_octetstring },
90 { "backend_get_objectidentifier", backend_get_objectidentifier },
91 { "backend_get_ipaddress", backend_get_ipaddress },
92 { "backend_get_counter32", backend_get_counter32 },
93 { "backend_get_gauge32", backend_get_gauge32 },
94 { "backend_get_timeticks", backend_get_timeticks },
95 { "backend_get_opaque", backend_get_opaque },
96 { "backend_get_counter64", backend_get_counter64 },
97 { "backend_get_nosuchobject", backend_get_nosuchobject },
98 { "backend_get_nosuchinstance", backend_get_nosuchinstance },
99 { "backend_get_endofmibview", backend_get_endofmibview },
100 { "backend_get_two_single_backend", backend_get_two_single_backend },
101 { "backend_get_two_double_backend", backend_get_two_double_backend },
102 { "backend_get_wrongorder", backend_get_wrongorder },
103 { "backend_get_toofew", backend_get_toofew },
104 { "backend_get_toomany", backend_get_toomany },
105 { "backend_get_instance", backend_get_instance },
106 { "backend_get_instance_below", backend_get_instance_below },
107 { "backend_get_timeout_default", backend_get_timeout_default },
108 { "backend_get_timeout_session_lower", backend_get_timeout_session_lower },
109 { "backend_get_timeout_session_higher", backend_get_timeout_session_higher },
110 { "backend_get_timeout_region_lower", backend_get_timeout_region_lower },
111 { "backend_get_timeout_region_higher", backend_get_timeout_region_higher },
112 { "backend_get_priority_lower", backend_get_priority_lower },
113 { "backend_get_priority_higher", backend_get_priority_higher },
114 { "backend_get_priority_below_lower", backend_get_priority_below_lower },
115 { "backend_get_priority_below_higher", backend_get_priority_below_higher },
116 { "backend_get_close", backend_get_close },
117 { "backend_get_close_overlap", backend_get_close_overlap },
118 { "backend_get_disappear", backend_get_disappear },
119 { "backend_get_disappear_overlap", backend_get_disappear_overlap },
120 { "backend_get_disappear_doublesession", backend_get_disappear_doublesession },
121 { "backend_get_octetstring_max", backend_get_octetstring_max },
122 { "backend_get_octetstring_too_long", backend_get_octetstring_too_long },
123 { "backend_get_ipaddress_too_short", backend_get_ipaddress_too_short },
124 { "backend_get_ipaddress_too_long", backend_get_ipaddress_too_long },
125 { "backend_get_opaque_non_ber", backend_get_opaque_non_ber },
126 { "backend_get_opaque_double_value", backend_get_opaque_double_value },
127 { "backend_getnext_selfbound", backend_getnext_selfbound },
128 { "backend_getnext_lowerbound", backend_getnext_lowerbound },
129 { "backend_getnext_lowerbound_self", backend_getnext_lowerbound_self },
130 { "backend_getnext_lowerbound_highprio", backend_getnext_lowerbound_highprio },
131 { "backend_getnext_lowerbound_lowprio", backend_getnext_lowerbound_lowprio },
132 { "backend_getnext_sibling", backend_getnext_sibling },
133 { "backend_getnext_child_gap", backend_getnext_child_gap },
134 { "backend_getnext_nosuchobject", backend_getnext_nosuchobject },
135 { "backend_getnext_nosuchinstance", backend_getnext_nosuchinstance },
136 { "backend_getnext_endofmibview", backend_getnext_endofmibview },
137 { "backend_getnext_inclusive", backend_getnext_inclusive },
138 { "backend_getnext_jumpnext", backend_getnext_jumpnext },
139 { "backend_getnext_jumpnext_endofmibview", backend_getnext_jumpnext_endofmibview },
140 { "backend_getnext_jump_up", backend_getnext_jump_up },
141 { "backend_getnext_two_single_backend", backend_getnext_two_single_backend },
142 { "backend_getnext_two_double_backend", backend_getnext_two_double_backend },
143 { "backend_getnext_instance_below", backend_getnext_instance_below },
144 { "backend_getnext_instance", backend_getnext_instance },
145 { "backend_getnext_instance_exact", backend_getnext_instance_exact },
146 { "backend_getnext_instance_ignore", backend_getnext_instance_ignore },
147 { "backend_getnext_backwards", backend_getnext_backwards },
148 { "backend_getnext_stale", backend_getnext_stale },
149 { "backend_getnext_inclusive_backwards", backend_getnext_inclusive_backwards },
150 { "backend_getnext_toofew", backend_getnext_toofew },
151 { "backend_getnext_toomany", backend_getnext_toomany },
152 { "backend_getnext_response_equal_end", backend_getnext_response_equal_end },
153 { "backend_getnext_instance_below_region_before_instance", backend_getnext_instance_below_region_before_instance },
154 { "backend_getnext_instance_below_region_on_instance", backend_getnext_instance_below_region_on_instance },
155 { "backend_getnext_instance_below_region_below_instance", backend_getnext_instance_below_region_below_instance },
156 { "backend_getbulk_nonrep_zero_maxrep_one", backend_getbulk_nonrep_zero_maxrep_one },
157 { "backend_getbulk_nonrep_zero_maxrep_two", backend_getbulk_nonrep_zero_maxrep_two },
158 { "backend_getbulk_nonrep_one_maxrep_one", backend_getbulk_nonrep_one_maxrep_one },
159 { "backend_getbulk_nonrep_one_maxrep_two", backend_getbulk_nonrep_one_maxrep_two },
160 { "backend_getbulk_nonrep_two_maxrep_two", backend_getbulk_nonrep_two_maxrep_two },
161 { "backend_getbulk_nonrep_negative", backend_getbulk_nonrep_negative },
162 { "backend_getbulk_endofmibview", backend_getbulk_endofmibview },
163 { "backend_getbulk_endofmibview_second_rep", backend_getbulk_endofmibview_second_rep },
164 { "backend_getbulk_endofmibview_two_varbinds", backend_getbulk_endofmibview_two_varbinds },
165 { "backend_error_get_toobig", backend_error_get_toobig },
166 { "backend_error_get_nosuchname", backend_error_get_nosuchname },
167 { "backend_error_get_badvalue", backend_error_get_badvalue },
168 { "backend_error_get_readonly", backend_error_get_readonly },
169 { "backend_error_get_generr", backend_error_get_generr },
170 { "backend_error_get_wrongtype", backend_error_get_wrongtype },
171 { "backend_error_get_wronglength", backend_error_get_wronglength },
172 { "backend_error_get_wrongvalue", backend_error_get_wrongvalue },
173 { "backend_error_get_nocreation", backend_error_get_nocreation },
174 { "backend_error_get_inconsistentvalue", backend_error_get_inconsistentvalue },
175 { "backend_error_get_commitfailed", backend_error_get_commitfailed },
176 { "backend_error_get_undofailed", backend_error_get_undofailed },
177 { "backend_error_get_authorizationerror", backend_error_get_authorizationerror },
178 { "backend_error_get_notwritable", backend_error_get_notwritable },
179 { "backend_error_get_inconsistentname", backend_error_get_inconsistentname },
180 { "backend_error_get_openfailed", backend_error_get_openfailed },
181 { "backend_error_get_notopen", backend_error_get_notopen },
182 { "backend_error_get_indexwrongtype", backend_error_get_indexwrongtype },
183 { "backend_error_get_indexalreadyallocated", backend_error_get_indexalreadyallocated },
184 { "backend_error_get_indexnonavailable", backend_error_get_indexnonavailable },
185 { "backend_error_get_indexnotallocated", backend_error_get_indexnotallocated },
186 { "backend_error_get_duplicateregistration", backend_error_get_duplicateregistration },
187 { "backend_error_get_requestdenied", backend_error_get_requestdenied },
188 { "backend_error_get_processingerror", backend_error_get_processingerror },
189 { "backend_error_get_nonstandard", backend_error_get_nonstandard },
190 { "backend_error_getnext_toobig", backend_error_getnext_toobig },
191 { "backend_error_getnext_nosuchname", backend_error_getnext_nosuchname },
192 { "backend_error_getnext_badvalue", backend_error_getnext_badvalue },
193 { "backend_error_getnext_readonly", backend_error_getnext_readonly },
194 { "backend_error_getnext_generr", backend_error_getnext_generr },
195 { "backend_error_getnext_noaccess", backend_error_getnext_noaccess },
196 { "backend_error_getnext_wrongtype", backend_error_getnext_wrongtype },
197 { "backend_error_getnext_wronglength", backend_error_getnext_wronglength },
198 { "backend_error_getnext_wrongencoding", backend_error_getnext_wrongencoding },
199 { "backend_error_getnext_wrongvalue", backend_error_getnext_wrongvalue },
200 { "backend_error_getnext_nocreation", backend_error_getnext_nocreation },
201 { "backend_error_getnext_inconsistentvalue", backend_error_getnext_inconsistentvalue },
202 { "backend_error_getnext_resourceunavailable", backend_error_getnext_resourceunavailable },
203 { "backend_error_getnext_commitfailed", backend_error_getnext_commitfailed },
204 { "backend_error_getnext_undofailed", backend_error_getnext_undofailed },
205 { "backend_error_getnext_notwritable", backend_error_getnext_notwritable },
206 { "backend_error_getnext_inconsistentname", backend_error_getnext_inconsistentname },
207 { "backend_error_getnext_openfailed", backend_error_getnext_openfailed },
208 { "backend_error_getnext_notopen", backend_error_getnext_notopen },
209 { "backend_error_getnext_indexwrongtype", backend_error_getnext_indexwrongtype },
210 { "backend_error_getnext_indexalreadyallocated", backend_error_getnext_indexalreadyallocated },
211 { "backend_error_getnext_indexnonavailable", backend_error_getnext_indexnonavailable },
212 { "backend_error_getnext_indexnotallocated", backend_error_getnext_indexnotallocated },
213 { "backend_error_getnext_unsupportedcontext", backend_error_getnext_unsupportedcontext },
214 { "backend_error_getnext_duplicateregistration", backend_error_getnext_duplicateregistration },
215 { "backend_error_getnext_unknownregistration", backend_error_getnext_unknownregistration },
216 { "backend_error_getnext_parseerror", backend_error_getnext_parseerror },
217 { "backend_error_getnext_requestdenied", backend_error_getnext_requestdenied },
218 { "backend_error_getnext_processingerror", backend_error_getnext_processingerror },
219 { "backend_error_getnext_nonstandard", backend_error_getnext_nonstandard },
220 { "backend_error_getbulk_firstrepetition", backend_error_getbulk_firstrepetition },
221 { "backend_error_getbulk_secondrepetition", backend_error_getbulk_secondrepetition },
222 { "snmp_v3_usm_noauthpriv", snmp_v3_usm_noauthpriv },
223 { "transport_tcp_get", transport_tcp_get },
224 { "transport_tcp_disconnect", transport_tcp_disconnect },
225 { "transport_tcp_double_get_disconnect", transport_tcp_double_get_disconnect },
226 { NULL, NULL }
227 };
228
229 int verbose = 0;
230 char *axsocket = NULL;
231
232 char *hostname = NULL;
233 char *servname = NULL;
234
235 char *community = NULL;
236
237 int
main(int argc,char * argv[])238 main(int argc, char *argv[])
239 {
240 size_t i, j;
241 int c;
242
243 while ((c = getopt(argc, argv, "a:h:p:v")) != -1) {
244 switch (c) {
245 case 'a':
246 axsocket = optarg;
247 break;
248 case 'c':
249 community = optarg;
250 break;
251 case 'h':
252 hostname = optarg;
253 break;
254 case 'p':
255 servname = optarg;
256 break;
257 case 'v':
258 verbose = 1;
259 break;
260 default:
261 usage();
262 }
263 }
264 argc -= optind;
265 argv += optind;
266
267 if (argc != 1)
268 usage();
269
270 for (i = 0; i < argc; i++) {
271 for (j = 0; targets[j].target != NULL; j++) {
272 if (strcmp(argv[i], targets[j].target) == 0) {
273 targets[j].function();
274 return 0;
275 }
276 }
277 }
278
279 errx(1, "Unknown target: %s", argv[1]);
280 }
281
282 __dead void
usage(void)283 usage(void)
284 {
285 fprintf(stderr, "%s: [-v] [-a axsocket] test\n", getprogname());
286 exit(1);
287 }
288
289 int
oid_cmp(struct oid * a,struct oid * b)290 oid_cmp(struct oid *a, struct oid *b)
291 {
292 size_t i, min;
293
294 min = a->n_subid < b->n_subid ? a->n_subid : b->n_subid;
295 for (i = 0; i < min; i++) {
296 if (a->subid[i] < b->subid[i])
297 return (-1);
298 if (a->subid[i] > b->subid[i])
299 return (1);
300 }
301 /* a is parent of b */
302 if (a->n_subid < b->n_subid)
303 return (-2);
304 /* a is child of b */
305 if (a->n_subid > b->n_subid)
306 return 2;
307 return (0);
308 }
309
310 char *
oid_print(struct oid * oid,char * buf,size_t len)311 oid_print(struct oid *oid, char *buf, size_t len)
312 {
313 char digit[11];
314 size_t i;
315
316 buf[0] = '\0';
317 for (i = 0; i < oid->n_subid; i++) {
318 snprintf(digit, sizeof(digit), "%"PRIu32, oid->subid[i]);
319 if (i > 0)
320 strlcat(buf, ".", len);
321 strlcat(buf, digit, len);
322 }
323 if (oid->include) {
324 strlcat(buf, "incl", len);
325 snprintf(digit, sizeof(digit), "(%d)", oid->include);
326 strlcat(buf, digit, len);
327 }
328 return buf;
329 }
330