#include #include #include #include #include #include #include #include "regress.h" __dead void usage(void); const struct { char *target; void (*function)(void); } targets[] = { { "agentx_open_nnbo", agentx_open_nnbo }, { "agentx_open_nbo", agentx_open_nbo }, { "agentx_open_invalidversion", agentx_open_invalidversion }, { "agentx_open_ignore_sessionid", agentx_open_ignore_sessionid }, { "agentx_open_invalid_oid", agentx_open_invalid_oid }, { "agentx_open_descr_too_long", agentx_open_descr_too_long }, { "agentx_open_descr_invalid", agentx_open_descr_invalid }, { "agentx_open_context", agentx_open_context }, { "agentx_open_instance_registration", agentx_open_instance_registration }, { "agentx_open_new_index", agentx_open_new_index }, { "agentx_open_any_index", agentx_open_any_index }, { "agentx_ping_notopen", agentx_ping_notopen }, { "agentx_ping_invalid_sessionid", agentx_ping_invalid_sessionid }, { "agentx_ping_default", agentx_ping_default }, { "agentx_ping_context", agentx_ping_context }, { "agentx_ping_invalid_version", agentx_ping_invalid_version }, { "agentx_ping_instance_registration", agentx_ping_instance_registration }, { "agentx_ping_new_index", agentx_ping_new_index }, { "agentx_ping_any_index", agentx_ping_any_index }, { "agentx_ping_nbo_nnbo", agentx_ping_nbo_nnbo }, { "agentx_ping_nnbo_nbo", agentx_ping_nnbo_nbo }, { "agentx_ping_invalid_version_close", agentx_ping_invalid_version_close }, { "agentx_close_notopen", agentx_close_notopen }, { "agentx_close_reasonother", agentx_close_reasonother }, { "agentx_close_reasonparseerror", agentx_close_reasonparseerror }, { "agentx_close_reasonprotocolerror", agentx_close_reasonprotocolerror }, { "agentx_close_reasontimouts", agentx_close_reasontimouts }, { "agentx_close_reasonshutdown", agentx_close_reasonshutdown }, { "agentx_close_reasonbymanager", agentx_close_reasonbymanager }, { "agentx_close_reasoninvalid", agentx_close_reasoninvalid }, { "agentx_close_single", agentx_close_single }, { "agentx_close_notowned", agentx_close_notowned }, { "agentx_close_invalid_sessionid", agentx_close_invalid_sessionid }, { "agentx_close_context", agentx_close_context }, { "agentx_close_invalid_version", agentx_close_invalid_version }, { "agentx_close_instance_registration", agentx_close_instance_registration }, { "agentx_close_new_index", agentx_close_new_index }, { "agentx_close_any_index", agentx_close_any_index }, { "agentx_close_nnbo_nbo", agentx_close_nnbo_nbo }, { "agentx_register_notopen", agentx_register_notopen }, { "agentx_register_invalid_sessionid", agentx_register_invalid_sessionid }, { "agentx_register_default", agentx_register_default }, { "agentx_register_context", agentx_register_context }, { "agentx_register_invalid_version", agentx_register_invalid_version }, { "agentx_register_instance_registration", agentx_register_instance_registration }, { "agentx_register_new_index", agentx_register_new_index }, { "agentx_register_any_index", agentx_register_any_index }, { "agentx_register_duplicate_self", agentx_register_duplicate_self }, { "agentx_register_duplicate_twocon", agentx_register_duplicate_twocon }, { "agentx_register_duplicate_priority", agentx_register_duplicate_priority }, { "agentx_register_range", agentx_register_range }, { "agentx_register_range_invalidupperbound", agentx_register_range_invalidupperbound }, { "agentx_register_range_single", agentx_register_range_single }, { "agentx_register_range_overlap_single", agentx_register_range_overlap_single }, { "agentx_register_single_overlap_range", agentx_register_single_overlap_range }, { "agentx_register_range_overlap_range", agentx_register_range_overlap_range }, { "agentx_register_below", agentx_register_below }, { "agentx_register_above", agentx_register_above }, { "agentx_register_restricted", agentx_register_restricted }, { "agentx_unregister_notopen", agentx_unregister_notopen }, { "agentx_unregister_invalid_sessionid", agentx_unregister_invalid_sessionid }, { "agentx_unregister_notregistered", agentx_unregister_notregistered }, { "agentx_unregister_single", agentx_unregister_single }, { "agentx_unregister_single_notowned", agentx_unregister_single_notowned }, { "agentx_unregister_range", agentx_unregister_range }, { "agentx_unregister_range_single", agentx_unregister_range_single }, { "agentx_unregister_range_subset", agentx_unregister_range_subset }, { "agentx_unregister_range_extra", agentx_unregister_range_extra }, { "agentx_unregister_range_priority", agentx_unregister_range_priority }, { "agentx_unregister_range_notowned", agentx_unregister_range_notowned }, { "backend_get_integer", backend_get_integer }, { "backend_get_octetstring", backend_get_octetstring }, { "backend_get_objectidentifier", backend_get_objectidentifier }, { "backend_get_ipaddress", backend_get_ipaddress }, { "backend_get_counter32", backend_get_counter32 }, { "backend_get_gauge32", backend_get_gauge32 }, { "backend_get_timeticks", backend_get_timeticks }, { "backend_get_opaque", backend_get_opaque }, { "backend_get_counter64", backend_get_counter64 }, { "backend_get_nosuchobject", backend_get_nosuchobject }, { "backend_get_nosuchinstance", backend_get_nosuchinstance }, { "backend_get_endofmibview", backend_get_endofmibview }, { "backend_get_two_single_backend", backend_get_two_single_backend }, { "backend_get_two_double_backend", backend_get_two_double_backend }, { "backend_get_wrongorder", backend_get_wrongorder }, { "backend_get_toofew", backend_get_toofew }, { "backend_get_toomany", backend_get_toomany }, { "backend_get_instance", backend_get_instance }, { "backend_get_instance_below", backend_get_instance_below }, { "backend_get_timeout_default", backend_get_timeout_default }, { "backend_get_timeout_session_lower", backend_get_timeout_session_lower }, { "backend_get_timeout_session_higher", backend_get_timeout_session_higher }, { "backend_get_timeout_region_lower", backend_get_timeout_region_lower }, { "backend_get_timeout_region_higher", backend_get_timeout_region_higher }, { "backend_get_priority_lower", backend_get_priority_lower }, { "backend_get_priority_higher", backend_get_priority_higher }, { "backend_get_priority_below_lower", backend_get_priority_below_lower }, { "backend_get_priority_below_higher", backend_get_priority_below_higher }, { "backend_get_close", backend_get_close }, { "backend_get_close_overlap", backend_get_close_overlap }, { "backend_get_disappear", backend_get_disappear }, { "backend_get_disappear_overlap", backend_get_disappear_overlap }, { "backend_get_disappear_doublesession", backend_get_disappear_doublesession }, { "backend_get_octetstring_max", backend_get_octetstring_max }, { "backend_get_octetstring_too_long", backend_get_octetstring_too_long }, { "backend_get_ipaddress_too_short", backend_get_ipaddress_too_short }, { "backend_get_ipaddress_too_long", backend_get_ipaddress_too_long }, { "backend_get_opaque_non_ber", backend_get_opaque_non_ber }, { "backend_get_opaque_double_value", backend_get_opaque_double_value }, { "backend_getnext_selfbound", backend_getnext_selfbound }, { "backend_getnext_lowerbound", backend_getnext_lowerbound }, { "backend_getnext_lowerbound_self", backend_getnext_lowerbound_self }, { "backend_getnext_lowerbound_highprio", backend_getnext_lowerbound_highprio }, { "backend_getnext_lowerbound_lowprio", backend_getnext_lowerbound_lowprio }, { "backend_getnext_sibling", backend_getnext_sibling }, { "backend_getnext_child_gap", backend_getnext_child_gap }, { "backend_getnext_nosuchobject", backend_getnext_nosuchobject }, { "backend_getnext_nosuchinstance", backend_getnext_nosuchinstance }, { "backend_getnext_endofmibview", backend_getnext_endofmibview }, { "backend_getnext_inclusive", backend_getnext_inclusive }, { "backend_getnext_jumpnext", backend_getnext_jumpnext }, { "backend_getnext_jumpnext_endofmibview", backend_getnext_jumpnext_endofmibview }, { "backend_getnext_jump_up", backend_getnext_jump_up }, { "backend_getnext_two_single_backend", backend_getnext_two_single_backend }, { "backend_getnext_two_double_backend", backend_getnext_two_double_backend }, { "backend_getnext_instance_below", backend_getnext_instance_below }, { "backend_getnext_instance", backend_getnext_instance }, { "backend_getnext_instance_exact", backend_getnext_instance_exact }, { "backend_getnext_instance_ignore", backend_getnext_instance_ignore }, { "backend_getnext_backwards", backend_getnext_backwards }, { "backend_getnext_stale", backend_getnext_stale }, { "backend_getnext_inclusive_backwards", backend_getnext_inclusive_backwards }, { "backend_getnext_toofew", backend_getnext_toofew }, { "backend_getnext_toomany", backend_getnext_toomany }, { "backend_getnext_response_equal_end", backend_getnext_response_equal_end }, { "backend_getnext_instance_below_region_before_instance", backend_getnext_instance_below_region_before_instance }, { "backend_getnext_instance_below_region_on_instance", backend_getnext_instance_below_region_on_instance }, { "backend_getnext_instance_below_region_below_instance", backend_getnext_instance_below_region_below_instance }, { "backend_getbulk_nonrep_zero_maxrep_one", backend_getbulk_nonrep_zero_maxrep_one }, { "backend_getbulk_nonrep_zero_maxrep_two", backend_getbulk_nonrep_zero_maxrep_two }, { "backend_getbulk_nonrep_one_maxrep_one", backend_getbulk_nonrep_one_maxrep_one }, { "backend_getbulk_nonrep_one_maxrep_two", backend_getbulk_nonrep_one_maxrep_two }, { "backend_getbulk_nonrep_two_maxrep_two", backend_getbulk_nonrep_two_maxrep_two }, { "backend_getbulk_nonrep_negative", backend_getbulk_nonrep_negative }, { "backend_getbulk_endofmibview", backend_getbulk_endofmibview }, { "backend_getbulk_endofmibview_second_rep", backend_getbulk_endofmibview_second_rep }, { "backend_getbulk_endofmibview_two_varbinds", backend_getbulk_endofmibview_two_varbinds }, { "backend_error_get_toobig", backend_error_get_toobig }, { "backend_error_get_nosuchname", backend_error_get_nosuchname }, { "backend_error_get_badvalue", backend_error_get_badvalue }, { "backend_error_get_readonly", backend_error_get_readonly }, { "backend_error_get_generr", backend_error_get_generr }, { "backend_error_get_wrongtype", backend_error_get_wrongtype }, { "backend_error_get_wronglength", backend_error_get_wronglength }, { "backend_error_get_wrongvalue", backend_error_get_wrongvalue }, { "backend_error_get_nocreation", backend_error_get_nocreation }, { "backend_error_get_inconsistentvalue", backend_error_get_inconsistentvalue }, { "backend_error_get_commitfailed", backend_error_get_commitfailed }, { "backend_error_get_undofailed", backend_error_get_undofailed }, { "backend_error_get_authorizationerror", backend_error_get_authorizationerror }, { "backend_error_get_notwritable", backend_error_get_notwritable }, { "backend_error_get_inconsistentname", backend_error_get_inconsistentname }, { "backend_error_get_openfailed", backend_error_get_openfailed }, { "backend_error_get_notopen", backend_error_get_notopen }, { "backend_error_get_indexwrongtype", backend_error_get_indexwrongtype }, { "backend_error_get_indexalreadyallocated", backend_error_get_indexalreadyallocated }, { "backend_error_get_indexnonavailable", backend_error_get_indexnonavailable }, { "backend_error_get_indexnotallocated", backend_error_get_indexnotallocated }, { "backend_error_get_duplicateregistration", backend_error_get_duplicateregistration }, { "backend_error_get_requestdenied", backend_error_get_requestdenied }, { "backend_error_get_processingerror", backend_error_get_processingerror }, { "backend_error_get_nonstandard", backend_error_get_nonstandard }, { "backend_error_getnext_toobig", backend_error_getnext_toobig }, { "backend_error_getnext_nosuchname", backend_error_getnext_nosuchname }, { "backend_error_getnext_badvalue", backend_error_getnext_badvalue }, { "backend_error_getnext_readonly", backend_error_getnext_readonly }, { "backend_error_getnext_generr", backend_error_getnext_generr }, { "backend_error_getnext_noaccess", backend_error_getnext_noaccess }, { "backend_error_getnext_wrongtype", backend_error_getnext_wrongtype }, { "backend_error_getnext_wronglength", backend_error_getnext_wronglength }, { "backend_error_getnext_wrongencoding", backend_error_getnext_wrongencoding }, { "backend_error_getnext_wrongvalue", backend_error_getnext_wrongvalue }, { "backend_error_getnext_nocreation", backend_error_getnext_nocreation }, { "backend_error_getnext_inconsistentvalue", backend_error_getnext_inconsistentvalue }, { "backend_error_getnext_resourceunavailable", backend_error_getnext_resourceunavailable }, { "backend_error_getnext_commitfailed", backend_error_getnext_commitfailed }, { "backend_error_getnext_undofailed", backend_error_getnext_undofailed }, { "backend_error_getnext_notwritable", backend_error_getnext_notwritable }, { "backend_error_getnext_inconsistentname", backend_error_getnext_inconsistentname }, { "backend_error_getnext_openfailed", backend_error_getnext_openfailed }, { "backend_error_getnext_notopen", backend_error_getnext_notopen }, { "backend_error_getnext_indexwrongtype", backend_error_getnext_indexwrongtype }, { "backend_error_getnext_indexalreadyallocated", backend_error_getnext_indexalreadyallocated }, { "backend_error_getnext_indexnonavailable", backend_error_getnext_indexnonavailable }, { "backend_error_getnext_indexnotallocated", backend_error_getnext_indexnotallocated }, { "backend_error_getnext_unsupportedcontext", backend_error_getnext_unsupportedcontext }, { "backend_error_getnext_duplicateregistration", backend_error_getnext_duplicateregistration }, { "backend_error_getnext_unknownregistration", backend_error_getnext_unknownregistration }, { "backend_error_getnext_parseerror", backend_error_getnext_parseerror }, { "backend_error_getnext_requestdenied", backend_error_getnext_requestdenied }, { "backend_error_getnext_processingerror", backend_error_getnext_processingerror }, { "backend_error_getnext_nonstandard", backend_error_getnext_nonstandard }, { "backend_error_getbulk_firstrepetition", backend_error_getbulk_firstrepetition }, { "backend_error_getbulk_secondrepetition", backend_error_getbulk_secondrepetition }, { "snmp_v3_usm_noauthpriv", snmp_v3_usm_noauthpriv }, { "transport_tcp_get", transport_tcp_get }, { "transport_tcp_disconnect", transport_tcp_disconnect }, { "transport_tcp_double_get_disconnect", transport_tcp_double_get_disconnect }, { NULL, NULL } }; int verbose = 0; char *axsocket = NULL; char *hostname = NULL; char *servname = NULL; char *community = NULL; int main(int argc, char *argv[]) { size_t i, j; int c; while ((c = getopt(argc, argv, "a:h:p:v")) != -1) { switch (c) { case 'a': axsocket = optarg; break; case 'c': community = optarg; break; case 'h': hostname = optarg; break; case 'p': servname = optarg; break; case 'v': verbose = 1; break; default: usage(); } } argc -= optind; argv += optind; if (argc != 1) usage(); for (i = 0; i < argc; i++) { for (j = 0; targets[j].target != NULL; j++) { if (strcmp(argv[i], targets[j].target) == 0) { targets[j].function(); return 0; } } } errx(1, "Unknown target: %s", argv[1]); } __dead void usage(void) { fprintf(stderr, "%s: [-v] [-a axsocket] test\n", getprogname()); exit(1); } int oid_cmp(struct oid *a, struct oid *b) { size_t i, min; min = a->n_subid < b->n_subid ? a->n_subid : b->n_subid; for (i = 0; i < min; i++) { if (a->subid[i] < b->subid[i]) return (-1); if (a->subid[i] > b->subid[i]) return (1); } /* a is parent of b */ if (a->n_subid < b->n_subid) return (-2); /* a is child of b */ if (a->n_subid > b->n_subid) return 2; return (0); } char * oid_print(struct oid *oid, char *buf, size_t len) { char digit[11]; size_t i; buf[0] = '\0'; for (i = 0; i < oid->n_subid; i++) { snprintf(digit, sizeof(digit), "%"PRIu32, oid->subid[i]); if (i > 0) strlcat(buf, ".", len); strlcat(buf, digit, len); } if (oid->include) { strlcat(buf, "incl", len); snprintf(digit, sizeof(digit), "(%d)", oid->include); strlcat(buf, digit, len); } return buf; }