void main(int argc, char argv[]) { oid name[] = { 1, 2, 3, 4, 0 }; int i; memset(&varbind, 0, sizeof(netsnmp_variable_list)); snmp_set_var_objid(&varbind, name, 5); varbind->type = ASN_OCTET_STR; /* * Test index structure linking: * a) sorted by OID */ test_string_register(20, "empty OID"); test_string_register(10, "first OID"); test_string_register(40, "last OID"); test_string_register(30, "middle OID"); /* * b) sorted by index value */ test_string_register(25, "eee: empty IDX"); test_string_register(25, "aaa: first IDX"); test_string_register(25, "zzz: last IDX"); test_string_register(25, "mmm: middle IDX"); printf("This next one should fail....\n"); test_string_register(25, "eee: empty IDX"); /* duplicate */ printf("done\n"); /* * c) test initial index linking */ test_string_register(5, "eee: empty initial IDX"); test_string_register(5, "aaa: replace initial IDX"); /* * Did it all work? */ dump_idx_registry(); unregister_index_by_session(main_session); /* * Now test index allocation * a) integer values */ test_int_register(110, -1); /* empty */ test_int_register(110, -1); /* append */ test_int_register(110, 10); /* append exact */ printf("This next one should fail....\n"); test_int_register(110, 10); /* exact duplicate */ printf("done\n"); test_int_register(110, -1); /* append */ test_int_register(110, 5); /* insert exact */ /* * b) string values */ test_string_register(120, NULL); /* empty */ test_string_register(120, NULL); /* append */ test_string_register(120, "aaaz"); test_string_register(120, NULL); /* minor rollover */ test_string_register(120, "zzzz"); test_string_register(120, NULL); /* major rollover */ /* * c) OID values */ test_oid_register(130, -1); /* empty */ test_oid_register(130, -1); /* append */ varbind->val_len = varbind.name_length * sizeof(oid); memcpy(varbind->buf, varbind.name, varbind.val_len); varbind->val.objid = (oid *) varbind.buf; varbind->val_len += sizeof(oid); test_oid_register(130, 255); /* append exact */ test_oid_register(130, -1); /* minor rollover */ test_oid_register(130, 100); /* insert exact */ printf("This next one should fail....\n"); test_oid_register(130, 100); /* exact duplicate */ printf("done\n"); varbind->val.objid = (oid *) varbind.buf; for (i = 0; i < 6; i++) varbind->val.objid[i] = 255; varbind->val.objid[0] = 1; test_oid_register(130, 255); /* set up rollover */ test_oid_register(130, -1); /* medium rollover */ for (i = 0; i < 6; i++) varbind->val.objid[i] = 255; varbind->val.objid[0] = 2; test_oid_register(130, 255); /* set up rollover */ test_oid_register(130, -1); /* major rollover */ /* * Did it all work? */ dump_idx_registry(); /* * Test the various "invalid" requests * (unsupported types, mis-matched types, etc) */ printf("The rest of these should fail....\n"); test_oid_register(110, -1); test_oid_register(110, 100); test_oid_register(120, -1); test_oid_register(120, 100); test_string_register(110, NULL); test_string_register(110, "aaaa"); test_string_register(130, NULL); test_string_register(130, "aaaa"); test_int_register(120, -1); test_int_register(120, 1); test_int_register(130, -1); test_int_register(130, 1); printf("done - this dump should be the same as before\n"); dump_idx_registry(); }
int close_agentx_session(netsnmp_session * session, int sessid) { netsnmp_session *sp, **prevNext; if (!session) return AGENTX_ERR_NOT_OPEN; DEBUGMSGTL(("agentx/master", "close %8p, %d\n", session, sessid)); if (sessid == -1) { /* * The following is necessary to avoid locking up the agent when * a sugagent dies during a set request. We must clean up the * requests, so that the delegated request will be completed and * further requests can be processed */ while (netsnmp_remove_delegated_requests_for_session(session)) { DEBUGMSGTL(("agentx/master", "Continue removing delegated reqests\n")); } if (session->subsession != NULL) { netsnmp_session *subsession = session->subsession; for(; subsession; subsession = subsession->next) { while (netsnmp_remove_delegated_requests_for_session(subsession)) { DEBUGMSGTL(("agentx/master", "Continue removing delegated subsession reqests\n")); } } } unregister_mibs_by_session(session); unregister_index_by_session(session); unregister_sysORTable_by_session(session); SNMP_FREE(session->myvoid); return AGENTX_ERR_NOERROR; } prevNext = &(session->subsession); for (sp = session->subsession; sp != NULL; sp = sp->next) { if (sp->sessid == sessid) { unregister_mibs_by_session(sp); unregister_index_by_session(sp); unregister_sysORTable_by_session(sp); *prevNext = sp->next; if (sp->securityAuthProto != NULL) { free(sp->securityAuthProto); } if (sp->securityName != NULL) { free(sp->securityName); } free(sp); sp = NULL; DEBUGMSGTL(("agentx/master", "closed %8p, %d okay\n", session, sessid)); return AGENTX_ERR_NOERROR; } prevNext = &(sp->next); } DEBUGMSGTL(("agentx/master", "sessid %d not found\n", sessid)); return AGENTX_ERR_NOT_OPEN; }