Lines Matching +full:tp +full:- +full:link
2 * Copyright (c) 2001-2003
116 /* list of loaded modules during start-up in the order they were loaded */
216 Begemot simple SNMP daemon. Copyright (c) 2001-2002 Fraunhofer Institute for\n\
219 usage: snmpd [-dh] [-c file] [-D options] [-e file] [-I path]\n\
220 [-l prefix] [-m variable=value] [-p file]\n\
222 -d don't daemonize\n\
223 -h print this info\n\
224 -c file specify configuration file\n\
225 -D options debugging options\n\
226 -e file specify engine id file\n\
227 -I path system include path\n\
228 -l prefix default basename for pid and config file\n\
229 -m var=val define variable\n\
230 -p file specify pid file\n\
296 snmp_printf("%s <- ", dest); in snmp_output()
299 *sndlen = (size_t)(resp_b.asn_ptr - sndbuf); in snmp_output()
310 /* un-authenticated snmpEngineId discovery */ in snmp_pdu_auth_user()
311 if (pdu->engine.engine_len == 0 && strlen(pdu->user.sec_name) == 0) { in snmp_pdu_auth_user()
312 pdu->engine.engine_len = snmpd_engine.engine_len; in snmp_pdu_auth_user()
313 memcpy(pdu->engine.engine_id, snmpd_engine.engine_id, in snmp_pdu_auth_user()
316 pdu->engine.engine_boots = snmpd_engine.engine_boots; in snmp_pdu_auth_user()
317 pdu->engine.engine_time = snmpd_engine.engine_time; in snmp_pdu_auth_user()
318 pdu->flags |= SNMP_MSG_AUTODISCOVER; in snmp_pdu_auth_user()
322 if ((usm_user = usm_find_user(pdu->engine.engine_id, in snmp_pdu_auth_user()
323 pdu->engine.engine_len, pdu->user.sec_name)) == NULL || in snmp_pdu_auth_user()
324 usm_user->status != 1 /* active */) in snmp_pdu_auth_user()
327 if (usm_user->user_engine_len != snmpd_engine.engine_len || in snmp_pdu_auth_user()
328 memcmp(usm_user->user_engine_id, snmpd_engine.engine_id, in snmp_pdu_auth_user()
332 pdu->user.priv_proto = usm_user->suser.priv_proto; in snmp_pdu_auth_user()
333 memcpy(pdu->user.priv_key, usm_user->suser.priv_key, in snmp_pdu_auth_user()
334 sizeof(pdu->user.priv_key)); in snmp_pdu_auth_user()
337 if ((pdu->flags & SNMP_MSG_AUTH_FLAG) != 0) { in snmp_pdu_auth_user()
339 pdu->user.auth_proto = usm_user->suser.auth_proto; in snmp_pdu_auth_user()
340 memcpy(pdu->user.auth_key, usm_user->suser.auth_key, in snmp_pdu_auth_user()
341 sizeof(pdu->user.auth_key)); in snmp_pdu_auth_user()
343 if (pdu->engine.engine_boots == 0 && in snmp_pdu_auth_user()
344 pdu->engine.engine_time == 0) { in snmp_pdu_auth_user()
346 pdu->flags |= SNMP_MSG_AUTODISCOVER; in snmp_pdu_auth_user()
350 if (pdu->engine.engine_boots != snmpd_engine.engine_boots || in snmp_pdu_auth_user()
351 abs(pdu->engine.engine_time - snmpd_engine.engine_time) > in snmp_pdu_auth_user()
356 if (((pdu->flags & SNMP_MSG_PRIV_FLAG) != 0 && in snmp_pdu_auth_user()
357 (pdu->flags & SNMP_MSG_AUTH_FLAG) == 0) || in snmp_pdu_auth_user()
358 ((pdu->flags & SNMP_MSG_AUTH_FLAG) == 0 && in snmp_pdu_auth_user()
359 usm_user->suser.auth_proto != SNMP_AUTH_NOAUTH) || in snmp_pdu_auth_user()
360 ((pdu->flags & SNMP_MSG_PRIV_FLAG) == 0 && in snmp_pdu_auth_user()
361 usm_user->suser.priv_proto != SNMP_PRIV_NOPRIV)) in snmp_pdu_auth_user()
387 (pdu->flags & SNMP_MSG_AUTODISCOVER) != 0) in snmp_pdu_auth_access()
390 switch (pdu->version) { in snmp_pdu_auth_access()
404 uname = pdu->user.sec_name; in snmp_pdu_auth_access()
405 if ((smodel = pdu->security_model) != SNMP_SECMODEL_USM) in snmp_pdu_auth_access()
408 if (pdu->context_engine_len != snmpd_engine.engine_len || in snmp_pdu_auth_access()
409 memcmp(pdu->context_engine, snmpd_engine.engine_id, in snmp_pdu_auth_access()
419 if (strcmp(uname, vuser->secname) == 0 && in snmp_pdu_auth_access()
420 vuser->sec_model == smodel) in snmp_pdu_auth_access()
423 if (vuser == NULL || vuser->group == NULL) in snmp_pdu_auth_access()
426 /* XXX: shteryana - recheck */ in snmp_pdu_auth_access()
428 if (acl->group != vuser->group) in snmp_pdu_auth_access()
431 if (memcmp(vacmctx->ctxname, acl->ctx_prefix, in snmp_pdu_auth_access()
432 acl->ctx_match) == 0) in snmp_pdu_auth_access()
440 switch (pdu->type) { in snmp_pdu_auth_access()
444 if ((view = acl->read_view) == NULL) in snmp_pdu_auth_access()
449 if ((view = acl->write_view) == NULL) in snmp_pdu_auth_access()
457 if ((view = acl->notify_view) == NULL) in snmp_pdu_auth_access()
467 for (i = 0; i < pdu->nbindings; i++) { in snmp_pdu_auth_access()
468 /* XXX - view->mask*/ in snmp_pdu_auth_access()
469 suboid = asn_is_suboid(&view->subtree, &pdu->bindings[i].var); in snmp_pdu_auth_access()
470 if ((!suboid && !view->exclude) || (suboid && view->exclude)) { in snmp_pdu_auth_access()
505 case -1: in snmp_input_start()
515 if (pdu->version == SNMP_V3) { in snmp_input_start()
516 if (pdu->security_model != SNMP_SECMODEL_USM) { in snmp_input_start()
542 if (pdu->type == SNMP_OP_SET) in snmp_input_start()
547 if (pdu->type == SNMP_OP_SET) in snmp_input_start()
552 if (pdu->type == SNMP_OP_SET) in snmp_input_start()
581 switch (pdu->version) { in snmp_input_start()
605 snmp_printf("%s -> ", source); in snmp_input_start()
613 if (pdu->version != SNMP_V3) { in snmp_input_start()
614 TAILQ_FOREACH(comm, &community_list, link) in snmp_input_start()
615 if (comm->string != NULL && in snmp_input_start()
616 strcmp(comm->string, pdu->community) == 0) in snmp_input_start()
627 community = comm->value; in snmp_input_start()
628 } else if (pdu->nbindings == 0) { in snmp_input_start()
629 /* RFC 3414 - snmpEngineID Discovery */ in snmp_input_start()
630 if (strlen(pdu->user.sec_name) == 0) { in snmp_input_start()
631 asn_append_oid(&(pdu->bindings[pdu->nbindings++].var), in snmp_input_start()
633 pdu->context_engine_len = snmpd_engine.engine_len; in snmp_input_start()
634 memcpy(pdu->context_engine, snmpd_engine.engine_id, in snmp_input_start()
636 } else if (pdu->engine.engine_boots == 0 && in snmp_input_start()
637 pdu->engine.engine_time == 0) { in snmp_input_start()
638 asn_append_oid(&(pdu->bindings[pdu->nbindings++].var), in snmp_input_start()
641 pdu->engine.engine_boots = snmpd_engine.engine_boots; in snmp_input_start()
642 pdu->engine.engine_time = snmpd_engine.engine_time; in snmp_input_start()
644 } else if (pdu->user.auth_proto != SNMP_AUTH_NOAUTH && in snmp_input_start()
645 (pdu->engine.engine_boots == 0 || pdu->engine.engine_time == 0)) { in snmp_input_start()
676 if (pdu->version == SNMP_V1) in snmp_input_finish()
677 pdu->error_status = SNMP_ERR_BADVALUE; in snmp_input_finish()
679 pdu->error_status = SNMP_ERR_WRONG_LENGTH; in snmp_input_finish()
681 pdu->error_status = SNMP_ERR_WRONG_VALUE; in snmp_input_finish()
683 pdu->error_status = SNMP_ERR_WRONG_ENCODING; in snmp_input_finish()
685 pdu->error_index = ivar; in snmp_input_finish()
694 snmp_printf("%s <- ", source); in snmp_input_finish()
697 *sndlen = (size_t)(resp_b.asn_ptr - sndbuf); in snmp_input_finish()
701 switch (pdu->type) { in snmp_input_finish()
727 /* normal return - send a response */ in snmp_input_finish()
729 snmp_printf("%s <- ", source); in snmp_input_finish()
732 *sndlen = (size_t)(resp_b.asn_ptr - sndbuf); in snmp_input_finish()
737 /* error - send nothing */ in snmp_input_finish()
742 /* error - send error response. The snmp routine has in snmp_input_finish()
752 snmp_printf("%s <- ", source); in snmp_input_finish()
755 *sndlen = (size_t)(resp_b.asn_ptr - sndbuf); in snmp_input_finish()
770 port->transport = t; in trans_insert_port()
771 TAILQ_FOREACH(p, &t->table, link) { in trans_insert_port()
772 if (asn_compare_oid(&p->index, &port->index) > 0) { in trans_insert_port()
773 TAILQ_INSERT_BEFORE(p, port, link); in trans_insert_port()
777 TAILQ_INSERT_TAIL(&t->table, port, link); in trans_insert_port()
787 TAILQ_REMOVE(&port->transport->table, port, link); in trans_remove_port()
797 return (FIND_OBJECT_OID(&t->table, idx, sub)); in trans_find_port()
807 return (NEXT_OBJECT_OID(&t->table, idx, sub)); in trans_next_port()
817 return (TAILQ_FIRST(&t->table)); in trans_first_port()
829 TAILQ_FOREACH(p, &t->table, link) in trans_iter_port()
848 (*pp)->index.len = strlen(def->name) + 1; in trans_register()
849 (*pp)->index.subs[0] = strlen(def->name); in trans_register()
850 for (i = 0; i < (*pp)->index.subs[0]; i++) in trans_register()
851 (*pp)->index.subs[i + 1] = def->name[i]; in trans_register()
853 (*pp)->vtab = def; in trans_register()
855 if (FIND_OBJECT_OID(&transport_list, &(*pp)->index, 0) != NULL) { in trans_register()
861 snprintf(or_descr, sizeof(or_descr), "%s transport mapping", def->name); in trans_register()
862 if (((*pp)->or_index = or_register(&def->id, or_descr, NULL)) == 0) { in trans_register()
869 TAILQ_INIT(&(*pp)->table); in trans_register()
880 if (!TAILQ_EMPTY(&t->table)) in trans_unregister()
883 or_unregister(t->or_index); in trans_unregister()
884 TAILQ_REMOVE(&transport_list, t, link); in trans_unregister()
902 (*f->func)(fd, f->udata); in input()
911 if (f->id >= 0) { in fd_suspend()
912 poll_unregister(f->id); in fd_suspend()
913 f->id = -1; in fd_suspend()
916 if (evTestID(f->id)) { in fd_suspend()
917 (void)evDeselectFD(evctx, f->id); in fd_suspend()
918 evInitID(&f->id); in fd_suspend()
930 if (f->id >= 0) in fd_resume()
932 if ((f->id = poll_register(f->fd, input, f, RPOLL_IN)) < 0) { in fd_resume()
934 syslog(LOG_ERR, "select fd %d: %m", f->fd); in fd_resume()
936 return (-1); in fd_resume()
939 if (evTestID(f->id)) in fd_resume()
941 if (evSelectFD(evctx, f->fd, EV_READ, input, f, &f->id)) { in fd_resume()
943 syslog(LOG_ERR, "select fd %d: %m", f->fd); in fd_resume()
945 return (-1); in fd_resume()
963 f->fd = fd; in fd_select()
964 f->func = func; in fd_select()
965 f->udata = udata; in fd_select()
966 f->owner = mod; in fd_select()
968 f->id = -1; in fd_select()
970 evInitID(&f->id); in fd_select()
980 LIST_INSERT_HEAD(&fdesc_list, f, link); in fd_select()
990 LIST_REMOVE(f, link); in fd_deselect()
1002 t1 = LIST_NEXT(t, link); in fd_flush()
1003 if (t->owner == mod) in fd_flush()
1015 if (!pi->stream) { in snmp_input_consume()
1017 pi->length = 0; in snmp_input_consume()
1020 if (pi->consumed >= pi->length) { in snmp_input_consume()
1022 pi->length = 0; in snmp_input_consume()
1025 memmove(pi->buf, pi->buf + pi->consumed, pi->length - pi->consumed); in snmp_input_consume()
1026 pi->length -= pi->consumed; in snmp_input_consume()
1046 ret = tport->transport->vtab->recv(tport, pi); in snmpd_input()
1047 if (ret == -1) in snmpd_input()
1048 return (-1); in snmpd_input()
1054 if (pi->peer->sa_family != AF_LOCAL && in snmpd_input()
1055 inet_ntop(pi->peer->sa_family, in snmpd_input()
1056 &((const struct sockaddr_in *)(const void *)pi->peer)->sin_addr, in snmpd_input()
1062 return (-1); in snmpd_input()
1064 } else if (pi->peer->sa_family != AF_LOCAL) in snmpd_input()
1071 ierr = snmp_input_start(pi->buf, pi->length, "SNMP", &pdu, &vi, in snmpd_input()
1072 &pi->consumed); in snmpd_input()
1076 if (pi->stream) { in snmpd_input()
1077 if (pi->length == buf_size(0)) { in snmpd_input()
1079 return (-1); in snmpd_input()
1084 return (-1); in snmpd_input()
1092 if (pi->stream) in snmpd_input()
1093 return (-1); in snmpd_input()
1106 if (comm != NULL && comm->owner != NULL && in snmpd_input()
1107 comm->owner->config->proxy != NULL) { in snmpd_input()
1108 perr = (*comm->owner->config->proxy)(&pdu, tport->transport, in snmpd_input()
1109 &tport->index, pi->peer, pi->peerlen, ierr, vi, in snmpd_input()
1110 !pi->cred || pi->priv); in snmpd_input()
1164 ((pi->cred && !pi->priv && pdu.type == SNMP_PDU_SET) || in snmpd_input()
1165 (comm != NULL && comm->private != COMM_WRITE && in snmpd_input()
1166 (pdu.type == SNMP_PDU_SET || comm->private != COMM_READ)))) { in snmpd_input()
1185 ferr = snmp_input_finish(&pdu, pi->buf, pi->length, in snmpd_input()
1189 if (tport->transport->vtab->send != NULL) in snmpd_input()
1190 slen = tport->transport->vtab->send(tport, sndbuf, in snmpd_input()
1191 sndlen, pi->peer, pi->peerlen); in snmpd_input()
1193 slen = tport->transport->vtab->send2(tport, sndbuf, in snmpd_input()
1195 if (slen == -1) in snmpd_input()
1210 * Send a PDU to a given port. If this is a multi-socket port, use the
1218 struct tport *tp; in snmp_send_port() local
1223 TAILQ_FOREACH(tp, &trans->table, link) in snmp_send_port()
1224 if (asn_compare_oid(port, &tp->index) == 0) in snmp_send_port()
1226 if (tp == 0) in snmp_send_port()
1234 if (trans->vtab->send != NULL) in snmp_send_port()
1235 len = trans->vtab->send(tp, sndbuf, sndlen, addr, addrlen); in snmp_send_port()
1237 len = trans->vtab->send2(tp, sndbuf, sndlen, NULL); in snmp_send_port()
1239 if (len == -1) in snmp_send_port()
1257 if (pi->id != NULL) { in snmpd_input_close()
1258 fd_deselect(pi->id); in snmpd_input_close()
1259 pi->id = NULL; in snmpd_input_close()
1261 if (pi->fd >= 0) { in snmpd_input_close()
1262 (void)close(pi->fd); in snmpd_input_close()
1263 pi->fd = -1; in snmpd_input_close()
1265 if (pi->buf != NULL) { in snmpd_input_close()
1266 free(pi->buf); in snmpd_input_close()
1267 pi->buf = NULL; in snmpd_input_close()
1279 pi->id = NULL; in snmpd_input_init()
1280 pi->fd = -1; in snmpd_input_init()
1281 pi->buf = NULL; in snmpd_input_init()
1316 TAILQ_FOREACH(m, &lmodules, link) in info_func()
1317 if (m->config->dump) in info_func()
1318 (*m->config->dump)(); in info_func()
1322 * Re-read configuration
1339 TAILQ_FOREACH(m, &lmodules, link) in config_func()
1340 if (m->config->config) in config_func()
1341 (*m->config->config)(); in config_func()
1364 /* allow clean-up */ in onterm()
1406 if (sigprocmask(SIG_BLOCK, &set, &blocked_sigs) == -1) { in block_sigs()
1414 if (sigprocmask(SIG_SETMASK, &blocked_sigs, NULL) == -1) { in unblock_sigs()
1434 TAILQ_FOREACH(t, &transport_list, link) in trans_stop()
1435 (void)t->vtab->stop(1); in trans_stop()
1453 if (err == -1) { in do_macro()
1460 * Re-implement getsubopt from scratch, because the second argument is broken
1478 return (-1); in getsubopt1()
1504 return (-1); in getsubopt1()
1567 case -1: in main()
1605 setlogmask(LOG_UPTO(debug.logpri - 1)); in main()
1612 argc -= optind; in main()
1657 if (atexit(trans_stop) == -1) { in main()
1688 TAILQ_FOREACH(t, &transport_list, link) in main()
1689 TAILQ_FOREACH(p, &t->table, link) in main()
1690 t->vtab->init_port(p); in main()
1700 if (atexit(term) == -1) { in main()
1719 m->flags &= ~LM_ONSTARTLIST; in main()
1732 TAILQ_FOREACH(mod, &lmodules, link) in main()
1733 if (mod->config->idle != NULL) in main()
1734 (*mod->config->idle)(); in main()
1755 NULL, NULL) == -1) { in main()
1766 NULL, NULL) == -1) { in main()
1775 if (evDo(evctx, &work) == -1) { in main()
1803 * Trampoline for the non-repeatable timers.
1814 struct timer *tp = uap; in tfunc() local
1816 LIST_REMOVE(tp, link); in tfunc()
1817 tp->func(tp->udata); in tfunc()
1818 free(tp); in tfunc()
1833 struct timer *tp = uap; in trfunc() local
1835 tp->func(tp->udata); in trfunc()
1839 * Start a one-shot timer
1844 struct timer *tp; in timer_start() local
1849 if ((tp = malloc(sizeof(struct timer))) == NULL) { in timer_start()
1859 tp->udata = udata; in timer_start()
1860 tp->owner = mod; in timer_start()
1861 tp->func = func; in timer_start()
1863 LIST_INSERT_HEAD(&timer_list, tp, link); in timer_start()
1866 if ((tp->id = poll_start_timer(ticks * 10, 0, tfunc, tp)) < 0) { in timer_start()
1871 if (evSetTimer(evctx, tfunc, tp, due, evConsTime(0, 0), &tp->id) in timer_start()
1872 == -1) { in timer_start()
1877 return (tp); in timer_start()
1889 struct timer *tp; in timer_start_repeat() local
1895 if ((tp = malloc(sizeof(struct timer))) == NULL) { in timer_start_repeat()
1906 tp->udata = udata; in timer_start_repeat()
1907 tp->owner = mod; in timer_start_repeat()
1908 tp->func = func; in timer_start_repeat()
1910 LIST_INSERT_HEAD(&timer_list, tp, link); in timer_start_repeat()
1913 if ((tp->id = poll_start_timer(repeat_ticks * 10, 1, trfunc, tp)) < 0) { in timer_start_repeat()
1918 if (evSetTimer(evctx, trfunc, tp, due, inter, &tp->id) == -1) { in timer_start_repeat()
1923 return (tp); in timer_start_repeat()
1932 struct timer *tp = p; in timer_stop() local
1934 LIST_REMOVE(tp, link); in timer_stop()
1936 poll_stop_timer(tp->id); in timer_stop()
1938 if (evClearTimer(evctx, tp->id) == -1) { in timer_stop()
1953 t1 = LIST_NEXT(t, link); in timer_flush()
1954 if (t->owner == mod) in timer_flush()
2009 sizeof(errbuf) - strlen(errbuf), err, ap); in snmp_error_func()
2023 vsnprintf(errbuf+strlen(errbuf), sizeof(errbuf)-strlen(errbuf), in snmp_debug_func()
2043 sizeof(errbuf) - strlen(errbuf), err, ap); in asn_error_func()
2048 sizeof(errbuf) - strlen(errbuf), " at"); in asn_error_func()
2049 for (i = 0; b->asn_len > i; i++) in asn_error_func()
2051 sizeof(errbuf) - strlen(errbuf), in asn_error_func()
2052 " %02x", b->asn_cptr[i]); in asn_error_func()
2068 ncomm = idx->subs[idx->len - 1]; in comm_define_ordered()
2071 TAILQ_FOREACH(c, &community_list, link) in comm_define_ordered()
2072 if (c->value == ncomm) in comm_define_ordered()
2079 c->owner = owner; in comm_define_ordered()
2080 c->value = ncomm; in comm_define_ordered()
2081 c->descr = descr; in comm_define_ordered()
2082 c->string = NULL; in comm_define_ordered()
2083 c->private = priv; in comm_define_ordered()
2086 if((c->string = malloc(strlen(str)+1)) == NULL) { in comm_define_ordered()
2090 strcpy(c->string, str); in comm_define_ordered()
2095 c->index = *idx; in comm_define_ordered()
2096 TAILQ_FOREACH(p, &community_list, link) { in comm_define_ordered()
2097 if (asn_compare_oid(&p->index, &c->index) > 0) { in comm_define_ordered()
2098 TAILQ_INSERT_BEFORE(p, c, link); in comm_define_ordered()
2103 TAILQ_INSERT_TAIL(&community_list, c, link); in comm_define_ordered()
2119 TAILQ_FOREACH(c, &community_list, link) in comm_define()
2120 if (c->value == ncomm) in comm_define()
2126 p = &owner->index; in comm_define()
2129 p->len = 1; in comm_define()
2130 p->subs[0] = 0; in comm_define()
2132 p->subs[p->len++] = ncomm; in comm_define()
2136 return (c->value); in comm_define()
2144 TAILQ_FOREACH(p, &community_list, link) in comm_string()
2145 if (p->value == ncomm) in comm_string()
2146 return (p->string); in comm_string()
2160 p1 = TAILQ_NEXT(p, link); in comm_flush()
2161 if (p->owner == mod) { in comm_flush()
2162 free(p->string); in comm_flush()
2163 TAILQ_REMOVE(&community_list, p, link); in comm_flush()
2189 TAILQ_FOREACH(r, &idrange_list, link) in reqid_allocate()
2190 if (r->type == type) in reqid_allocate()
2199 if (r->base < size) { in reqid_allocate()
2200 while((r1 = TAILQ_NEXT(r, link)) != NULL) { in reqid_allocate()
2201 if (r1->base - (r->base + r->size) >= size) in reqid_allocate()
2209 if (INT32_MAX - size + 1 < r1->base + r1->size) { in reqid_allocate()
2222 r1->type = type; in reqid_allocate()
2223 r1->size = size; in reqid_allocate()
2224 r1->owner = mod; in reqid_allocate()
2226 r1->base = 0; in reqid_allocate()
2227 TAILQ_INSERT_HEAD(&idrange_list, r1, link); in reqid_allocate()
2230 r1->base = r->base + r->size; in reqid_allocate()
2231 TAILQ_INSERT_TAIL(&idrange_list, r1, link); in reqid_allocate()
2233 r = TAILQ_PREV(r, idrange_list, link); in reqid_allocate()
2234 r1->base = r->base + r->size; in reqid_allocate()
2235 TAILQ_INSERT_AFTER(&idrange_list, r, r1, link); in reqid_allocate()
2237 r1->next = r1->base; in reqid_allocate()
2248 TAILQ_FOREACH(r, &idrange_list, link) in reqid_next()
2249 if (r->type == type) in reqid_next()
2255 if ((id = r->next++) == r->base + (r->size - 1)) in reqid_next()
2256 r->next = r->base; in reqid_next()
2265 TAILQ_FOREACH(r, &idrange_list, link) in reqid_base()
2266 if (r->type == type) in reqid_base()
2267 return (r->base); in reqid_base()
2277 TAILQ_FOREACH(r, &idrange_list, link) in reqid_type()
2278 if (reqid >= r->base && reqid <= r->base + (r->size - 1)) in reqid_type()
2279 return (r->type); in reqid_type()
2299 p1 = TAILQ_NEXT(p, link); in reqid_flush()
2300 if (p->owner == mod) { in reqid_flush()
2301 TAILQ_REMOVE(&idrange_list, p, link); in reqid_flush()
2317 return (asn_compare_oid(&n1->oid, &n2->oid)); in compare_node()
2328 return (-1); in tree_merge()
2377 m->handle = NULL; in lm_load()
2378 m->flags = 0; in lm_load()
2379 strlcpy(m->section, section, sizeof(m->section)); in lm_load()
2381 if ((m->path = strdup(path)) == NULL) { in lm_load()
2389 m->index.subs[0] = strlen(section); in lm_load()
2390 m->index.len = m->index.subs[0] + 1; in lm_load()
2391 for (u = 0; u < m->index.subs[0]; u++) in lm_load()
2392 m->index.subs[u + 1] = section[u]; in lm_load()
2397 if ((m->handle = dlopen(m->path, RTLD_NOW|RTLD_GLOBAL)) == NULL) { in lm_load()
2402 if ((m->config = dlsym(m->handle, "config")) == NULL) { in lm_load()
2414 m->flags |= LM_ONSTARTLIST; in lm_load()
2439 if ((err = (*m->config->init)(m, ac, av)) != 0) { in lm_load()
2441 TAILQ_REMOVE(&lmodules, m, link); in lm_load()
2448 if ((m->flags & LM_ONSTARTLIST) != 0) in lm_load()
2450 if (m->handle) in lm_load()
2451 dlclose(m->handle); in lm_load()
2452 free(m->path); in lm_load()
2468 if (tree_merge(mod->config->tree, mod->config->tree_size, mod)) { in lm_start()
2481 if (mod->config->start) in lm_start()
2482 (*mod->config->start)(); in lm_start()
2484 mod->flags |= LM_STARTED; in lm_start()
2489 TAILQ_FOREACH(m, &lmodules, link) in lm_start()
2490 if (m->config->loading) in lm_start()
2491 (*m->config->loading)(mod, 1); in lm_start()
2504 TAILQ_REMOVE(&lmodules, m, link); in lm_unload()
2505 if (m->flags & LM_ONSTARTLIST) in lm_unload()
2509 if ((m->flags & LM_STARTED) && m->config->fini && in lm_unload()
2510 (err = (*m->config->fini)()) != 0) in lm_unload()
2511 syslog(LOG_WARNING, "lm_unload(%s): fini %d", m->section, err); in lm_unload()
2518 dlclose(m->handle); in lm_unload()
2519 free(m->path); in lm_unload()
2524 TAILQ_FOREACH(mod, &lmodules, link) in lm_unload()
2525 if (mod->config->loading) in lm_unload()
2526 (*mod->config->loading)(m, 0); in lm_unload()
2544 objres = TAILQ_NEXT(objres, link)) { in or_register()
2545 if ((or1 = TAILQ_NEXT(objres, link)) == NULL || in or_register()
2546 or1->index > objres->index + 1) { in or_register()
2547 idx = objres->index + 1; in or_register()
2555 objres->index = idx; in or_register()
2556 objres->oid = *or; in or_register()
2557 strlcpy(objres->descr, descr, sizeof(objres->descr)); in or_register()
2558 objres->uptime = (uint32_t)(get_ticks() - start_tick); in or_register()
2559 objres->module = mod; in or_register()
2563 systemg.or_last_change = objres->uptime; in or_register()
2573 TAILQ_FOREACH(objres, &objres_list, link) in or_unregister()
2574 if (objres->index == idx) { in or_unregister()
2575 TAILQ_REMOVE(&objres_list, objres, link); in or_unregister()
2582 * RFC 3414 User-based Security Model support
2618 if (uuser->user_engine_len == elen && in usm_find_user()
2619 memcmp(uuser->user_engine_id, engine, elen) == 0 && in usm_find_user()
2620 strlen(uuser->suser.sec_name) == strlen(uname) && in usm_find_user()
2621 strcmp(uuser->suser.sec_name, uname) == 0) in usm_find_user()
2632 if (u1->user_engine_len < u2->user_engine_len) in usm_compare_user()
2633 return (-1); in usm_compare_user()
2634 if (u1->user_engine_len > u2->user_engine_len) in usm_compare_user()
2637 for (i = 0; i < u1->user_engine_len; i++) { in usm_compare_user()
2638 if (u1->user_engine_id[i] < u2->user_engine_id[i]) in usm_compare_user()
2639 return (-1); in usm_compare_user()
2640 if (u1->user_engine_id[i] > u2->user_engine_id[i]) in usm_compare_user()
2644 if (strlen(u1->suser.sec_name) < strlen(u2->suser.sec_name)) in usm_compare_user()
2645 return (-1); in usm_compare_user()
2646 if (strlen(u1->suser.sec_name) > strlen(u2->suser.sec_name)) in usm_compare_user()
2649 for (i = 0; i < strlen(u1->suser.sec_name); i++) { in usm_compare_user()
2650 if (u1->suser.sec_name[i] < u2->suser.sec_name[i]) in usm_compare_user()
2651 return (-1); in usm_compare_user()
2652 if (u1->suser.sec_name[i] > u2->suser.sec_name[i]) in usm_compare_user()
2667 if (uuser->user_engine_len == elen && in usm_new_user()
2668 strlen(uname) == strlen(uuser->suser.sec_name) && in usm_new_user()
2669 strcmp(uname, uuser->suser.sec_name) == 0 && in usm_new_user()
2670 memcmp(eid, uuser->user_engine_id, elen) == 0) in usm_new_user()
2678 strlcpy(uuser->suser.sec_name, uname, SNMP_ADM_STR32_SIZ); in usm_new_user()
2679 memcpy(uuser->user_engine_id, eid, elen); in usm_new_user()
2680 uuser->user_engine_len = elen; in usm_new_user()
2699 syslog(LOG_ERR, "User %s exists", uuser->suser.sec_name); in usm_new_user()
2728 * RFC 3415 View-based Access Control Model support
2750 if (v1->sec_model < v2->sec_model) in vacm_compare_user()
2751 return (-1); in vacm_compare_user()
2752 if (v1->sec_model > v2->sec_model) in vacm_compare_user()
2755 if (strlen(v1->secname) < strlen(v2->secname)) in vacm_compare_user()
2756 return (-1); in vacm_compare_user()
2757 if (strlen(v1->secname) > strlen(v2->secname)) in vacm_compare_user()
2760 for (i = 0; i < strlen(v1->secname); i++) { in vacm_compare_user()
2761 if (v1->secname[i] < v2->secname[i]) in vacm_compare_user()
2762 return (-1); in vacm_compare_user()
2763 if (v1->secname[i] > v2->secname[i]) in vacm_compare_user()
2777 if (strcmp(uname, user->secname) == 0 && in vacm_new_user()
2778 smodel == user->sec_model) in vacm_new_user()
2785 user->group = &vacm_default_group; in vacm_new_user()
2787 user->sec_model = smodel; in vacm_new_user()
2788 strlcpy(user->secname, uname, sizeof(user->secname)); in vacm_new_user()
2807 syslog(LOG_ERR, "User %s exists", user->secname); in vacm_new_user()
2818 if (user->group != NULL && user->group != &vacm_default_group) { in vacm_delete_user()
2819 SLIST_REMOVE(&user->group->group_users, user, vacm_user, vvg); in vacm_delete_user()
2820 if (SLIST_EMPTY(&user->group->group_users)) { in vacm_delete_user()
2821 SLIST_REMOVE(&vacm_grouplist, user->group, in vacm_delete_user()
2823 free(user->group); in vacm_delete_user()
2839 return (-1); in vacm_user_set_group()
2842 if (strlen(group->groupname) == len && in vacm_user_set_group()
2843 memcmp(octets, group->groupname, len) == 0) in vacm_user_set_group()
2848 return (-1); in vacm_user_set_group()
2850 memcpy(group->groupname, octets, len); in vacm_user_set_group()
2851 group->groupname[len] = '\0'; in vacm_user_set_group()
2855 SLIST_REMOVE(&user->group->group_users, user, vacm_user, vvg); in vacm_user_set_group()
2856 SLIST_INSERT_HEAD(&group->group_users, user, vvg); in vacm_user_set_group()
2857 user->group = group; in vacm_user_set_group()
2888 if (strlen(v1->group->groupname) < strlen(v2->group->groupname)) in vacm_compare_access_rule()
2889 return (-1); in vacm_compare_access_rule()
2890 if (strlen(v1->group->groupname) > strlen(v2->group->groupname)) in vacm_compare_access_rule()
2893 for (i = 0; i < strlen(v1->group->groupname); i++) { in vacm_compare_access_rule()
2894 if (v1->group->groupname[i] < v2->group->groupname[i]) in vacm_compare_access_rule()
2895 return (-1); in vacm_compare_access_rule()
2896 if (v1->group->groupname[i] > v2->group->groupname[i]) in vacm_compare_access_rule()
2900 if (strlen(v1->ctx_prefix) < strlen(v2->ctx_prefix)) in vacm_compare_access_rule()
2901 return (-1); in vacm_compare_access_rule()
2902 if (strlen(v1->ctx_prefix) > strlen(v2->ctx_prefix)) in vacm_compare_access_rule()
2905 for (i = 0; i < strlen(v1->ctx_prefix); i++) { in vacm_compare_access_rule()
2906 if (v1->ctx_prefix[i] < v2->ctx_prefix[i]) in vacm_compare_access_rule()
2907 return (-1); in vacm_compare_access_rule()
2908 if (v1->ctx_prefix[i] > v2->ctx_prefix[i]) in vacm_compare_access_rule()
2912 if (v1->sec_model < v2->sec_model) in vacm_compare_access_rule()
2913 return (-1); in vacm_compare_access_rule()
2914 if (v1->sec_model > v2->sec_model) in vacm_compare_access_rule()
2917 if (v1->sec_level < v2->sec_level) in vacm_compare_access_rule()
2918 return (-1); in vacm_compare_access_rule()
2919 if (v1->sec_level > v2->sec_level) in vacm_compare_access_rule()
2932 if (acl->group == NULL) in vacm_new_access_rule()
2934 if (strcmp(gname, acl->group->groupname) == 0 && in vacm_new_access_rule()
2935 strcmp(cprefix, acl->ctx_prefix) == 0 && in vacm_new_access_rule()
2936 acl->sec_model == smodel && acl->sec_level == slevel) in vacm_new_access_rule()
2942 if (strcmp(gname, group->groupname) == 0) in vacm_new_access_rule()
2952 acl->group = group; in vacm_new_access_rule()
2953 strlcpy(acl->ctx_prefix, cprefix, sizeof(acl->ctx_prefix)); in vacm_new_access_rule()
2954 acl->sec_model = smodel; in vacm_new_access_rule()
2955 acl->sec_level = slevel; in vacm_new_access_rule()
3003 if (strlen(v1->viewname) < strlen(v2->viewname)) in vacm_compare_view()
3004 return (-1); in vacm_compare_view()
3005 if (strlen(v1->viewname) > strlen(v2->viewname)) in vacm_compare_view()
3008 for (i = 0; i < strlen(v1->viewname); i++) { in vacm_compare_view()
3009 if (v1->viewname[i] < v2->viewname[i]) in vacm_compare_view()
3010 return (-1); in vacm_compare_view()
3011 if (v1->viewname[i] > v2->viewname[i]) in vacm_compare_view()
3015 return (asn_compare_oid(&v1->subtree, &v2->subtree)); in vacm_compare_view()
3025 if (strcmp(vname, view->viewname) == 0) in vacm_new_view()
3032 strlcpy(view->viewname, vname, sizeof(view->viewname)); in vacm_new_view()
3033 asn_append_oid(&view->subtree, oid); in vacm_new_view()
3052 syslog(LOG_ERR, "View %s exists", view->viewname); in vacm_new_view()
3091 if (strcmp(ctxname, ctx->ctxname) == 0) { in vacm_add_context()
3092 syslog(LOG_ERR, "Context %s exists", ctx->ctxname); in vacm_add_context()
3100 strlcpy(ctx->ctxname, ctxname, sizeof(ctx->ctxname)); in vacm_add_context()
3101 ctx->regid = regid; in vacm_add_context()
3104 strlen(ctx->ctxname) < strlen(prev->ctxname) || in vacm_add_context()
3105 strcmp(ctx->ctxname, prev->ctxname) < 0) { in vacm_add_context()
3111 if (strlen(ctx->ctxname) < strlen(temp->ctxname) || in vacm_add_context()
3112 strcmp(ctx->ctxname, temp->ctxname) < 0) { in vacm_add_context()
3113 cmp = -1; in vacm_add_context()
3124 syslog(LOG_ERR, "Context %s exists", ctx->ctxname); in vacm_add_context()
3138 if (ctx->regid == regid) { in vacm_flush_contexts()