Lines Matching defs:q

445 	struct radius_query		*q = NULL;
510 TAILQ_FOREACH(q, &listn->radiusd->query, next) {
511 if (peer->sa_family == q->clientaddr.ss_family &&
512 ((peer->sa_family == AF_INET && in(&q->clientaddr).s_addr ==
514 IN6_ARE_ADDR_EQUAL(&in6(&q->clientaddr), &in6(peer)))) &&
515 ((struct sockaddr_in *)&q->clientaddr)->sin_port ==
517 req_id == q->req_id)
520 if (q != NULL) {
522 "with q=%u", radius_code_string(req_code), req_code,
523 peerstr, req_id, q->id);
524 q = NULL;
528 if ((q = calloc(1, sizeof(struct radius_query))) == NULL) {
538 strlcpy(q->username, username, sizeof(q->username));
540 q->id = ++radius_query_id_seq;
541 q->radiusd = listn->radiusd;
542 q->clientaddrlen = peerlen;
543 memcpy(&q->clientaddr, peer, peerlen);
544 q->listen = listn;
545 q->req = packet;
546 q->client = client;
547 q->req_id = req_id;
548 radius_get_authenticator(packet, q->req_auth);
550 TAILQ_INSERT_TAIL(&listn->radiusd->query, q, next);
579 q->authen = authen;
591 "q=%u: `%s' authentication is starting",
592 radius_code_string(req_code), req_code, peerstr, q->req_id,
593 q->username, q->id, q->authen->auth->module->name);
595 raidus_query_access_request(q);
605 if (radius_get_uint32_attr(q->req, RADIUS_TYPE_ACCT_STATUS_TYPE,
614 raidus_query_accounting_request(accounting, q);
624 raidus_query_accounting_request(accounting, q);
629 raidus_query_accounting_request(NULL, q);
631 if ((q->res = radius_new_response_packet(
632 RADIUS_CODE_ACCOUNTING_RESPONSE, q->req)) == NULL)
636 radius_query_accounting_response(q);
648 if (q != NULL)
649 radiusd_access_request_aborted(q);
655 raidus_query_access_request(struct radius_query *q)
657 struct radiusd_authentication *authen = q->authen;
661 if (q->deco == NULL)
662 q->deco = TAILQ_FIRST(&q->authen->deco);
664 q->deco = TAILQ_NEXT(q->deco, next);
665 if (q->deco == NULL || MODULE_DO_REQDECO(q->deco->module))
669 if (q->deco != NULL)
670 radiusd_module_request_decoration(q->deco->module, q);
674 radiusd_module_access_request(authen->auth->module, q);
676 radiusd_module_userpass(authen->auth->module, q);
681 radius_query_access_response(struct radius_query *q)
687 q_last = q;
691 if (q->deco == NULL)
692 q->deco = TAILQ_FIRST(&q->authen->deco);
694 q->deco = TAILQ_NEXT(q->deco, next);
695 if (q->deco == NULL || MODULE_DO_RESDECO(q->deco->module))
699 if (q->deco != NULL) {
700 radiusd_module_response_decoration(q->deco->module, q);
704 if (q->prev != NULL) {
705 if (MODULE_DO_NEXTRES(q->prev->authen->auth->module)) {
706 if (radiusd_access_response_fixup(q->prev, q_last, 0)
709 q0 = q;
710 q = q->prev;
713 q->hasnext = false;
714 radiusd_module_next_response(q->authen->auth->module,
715 q, q_last->res);
719 q = q->prev;
723 if (radiusd_access_response_fixup(q, q_last, 1) != 0)
726 res_id = radius_get_id(q->res);
727 res_code = radius_get_code(q->res);
730 if (radius_has_attr(q->res, RADIUS_TYPE_MESSAGE_AUTHENTICATOR))
731 radius_del_attr_all(q->res, RADIUS_TYPE_MESSAGE_AUTHENTICATOR);
732 radius_put_message_authenticator(q->res, q->client->secret);
733 radius_set_response_authenticator(q->res, q->client->secret);
735 log_info("Sending %s(code=%d) to %s id=%u q=%u",
737 addrport_tostring((struct sockaddr *)&q->clientaddr,
738 q->clientaddrlen, buf, sizeof(buf)), res_id, q->id);
740 if ((sz = sendto(q->listen->sock, radius_get_data(q->res),
741 radius_get_length(q->res), 0,
742 (struct sockaddr *)&q->clientaddr, q->clientaddrlen)) <= 0)
745 radiusd_access_request_aborted(q);
750 struct radius_query *q)
760 q);
763 req_code = radius_get_code(q->req);
764 if (radius_get_uint32_attr(q->req, RADIUS_TYPE_ACCT_STATUS_TYPE,
768 "q=%u", radius_code_string(req_code), req_code,
770 acct_status, addrport_tostring((struct sockaddr *)&q->clientaddr,
771 q->clientaddrlen, buf0, sizeof(buf0)), q->req_id, q->username,
772 q->id);
776 radius_query_accounting_response(struct radius_query *q)
781 radius_set_response_authenticator(q->res, q->client->secret);
782 res_id = radius_get_id(q->res);
783 res_code = radius_get_code(q->res);
785 log_info("Sending %s(code=%d) to %s id=%u q=%u",
787 addrport_tostring((struct sockaddr *)&q->clientaddr,
788 q->clientaddrlen, buf, sizeof(buf)), res_id, q->id);
790 if ((sz = sendto(q->listen->sock, radius_get_data(q->res),
791 radius_get_length(q->res), 0,
792 (struct sockaddr *)&q->clientaddr, q->clientaddrlen)) <= 0)
797 radius_query_client_secret(struct radius_query *q)
802 for (q0 = q; q0 != NULL && client_secret == NULL; q0 = q0->prev) {
814 radiusd_access_request_answer(struct radius_query *q)
816 radius_set_request_packet(q->res, q->req);
817 RADIUSD_ASSERT(q->deco == NULL);
819 radius_query_access_response(q);
823 radiusd_access_request_next(struct radius_query *q, RADIUS_PACKET *pkt)
830 RADIUSD_ASSERT(q->deco == NULL);
832 if (!q->authen->isfilter) {
833 log_warnx("q=%u `%s' requested next authentication, but it's "
834 "not authentication-filter", q->id,
835 q->authen->auth->module->name);
842 for (authen = TAILQ_NEXT(q->authen, next); authen != NULL;
852 log_warnx("q=%u module `%s' requested next authentication "
853 "no more `authenticate' matches", q->id,
854 q->authen->auth->module->name);
859 log_warn("%s: q=%u calloc: %m", __func__, q->id);
863 q_next->radiusd = q->radiusd;
864 q_next->req_id = q->req_id;
868 q_next->prev = q;
869 q->hasnext = true;
871 TAILQ_INSERT_TAIL(&q->radiusd->query, q_next, next);
878 radiusd_access_request_aborted(q);
882 radiusd_access_request_aborted(struct radius_query *q)
884 if (q->hasnext) /* don't abort if filtering */
886 if (q->prev != NULL) {
887 q->prev->hasnext = false;
888 radiusd_access_request_aborted(q->prev);
890 if (q->req != NULL)
891 radius_delete_packet(q->req);
892 if (q->res != NULL)
893 radius_delete_packet(q->res);
894 TAILQ_REMOVE(&q->radiusd->query, q, next);
895 free(q);
1030 radiusd_access_response_fixup(struct radius_query *q, struct radius_query *q0,
1040 client_secret = (islast)? q->client->secret :
1041 q->authen->auth->module->secret;
1044 client_req_auth = q->req_auth;
1102 if (res_id != q->req_id) {
1104 radius_set_id(q0->res, q->req_id);
1113 struct radius_query *q;
1115 TAILQ_FOREACH(q, &radiusd->query, next) {
1116 if (q->id == q_id)
1117 return (q);
1414 struct radius_query *q;
1440 q = radiusd_find_query(module->radiusd, q_id);
1441 if (q == NULL) {
1447 if ((q->res = radius_new_response_packet(
1450 q->req)) == NULL) {
1452 radiusd_access_request_aborted(q);
1455 radius_put_string_attr(q->res,
1457 radius_set_response_authenticator(q->res,
1458 radius_query_client_secret(q));
1459 radiusd_access_request_answer(q);
1493 q = radiusd_find_query(module->radiusd, q_id);
1494 if (q == NULL) {
1506 log_warn("q=%u radius_convert_packet() failed",
1507 q->id);
1508 radiusd_access_request_aborted(q);
1514 if (q->deco == NULL || q->deco->type !=
1516 log_warnx("q=%u received %s but not "
1517 "requested", q->id, typestr);
1523 radius_delete_packet(q->req);
1524 q->req = radpkt;
1526 raidus_query_access_request(q);
1530 log_warnx("q=%u wrong pkt from module",
1531 q->id);
1532 radiusd_access_request_aborted(q);
1535 q->res = radpkt;
1536 radiusd_access_request_answer(q);
1540 log_warnx("q=%u wrong pkt from module",
1541 q->id);
1542 radiusd_access_request_aborted(q);
1545 radiusd_access_request_next(q, radpkt);
1548 if (q->deco == NULL || q->deco->type !=
1550 log_warnx("q=%u received %s but not "
1551 "requested", q->id, typestr);
1557 radius_delete_packet(q->res);
1559 q->req);
1560 q->res = radpkt;
1562 radius_query_access_response(q);
1576 q = radiusd_find_query(module->radiusd, q_id);
1577 if (q == NULL) {
1582 radiusd_access_request_aborted(q);
1733 radiusd_module_userpass(struct radiusd_module *module, struct radius_query *q)
1738 userpass.q_id = q->id;
1740 if (radius_get_user_password_attr(q->req, userpass.pass,
1741 sizeof(userpass.pass), radius_query_client_secret(q)) == 0)
1745 if (radius_get_string_attr(q->req, RADIUS_TYPE_USER_NAME,
1747 log_warnx("q=%u no User-Name attribute", q->id);
1755 radiusd_access_request_aborted(q);
1760 struct radius_query *q)
1765 if ((radpkt = radius_convert_packet(radius_get_data(q->req),
1766 radius_get_length(q->req))) == NULL) {
1767 log_warn("q=%u Could not send ACCSREQ to `%s'", q->id,
1769 radiusd_access_request_aborted(q);
1773 q->client->secret) == 0) {
1779 IMSG_RADIUSD_MODULE_ACCSREQ, q->id, radpkt) == -1) {
1780 log_warn("q=%u Could not send ACCSREQ to `%s'", q->id,
1782 radiusd_access_request_aborted(q);
1790 struct radius_query *q, RADIUS_PACKET *pkt)
1793 IMSG_RADIUSD_MODULE_NEXTRES, q->id, pkt) == -1) {
1794 log_warn("q=%u Could not send NEXTRES to `%s'", q->id,
1796 radiusd_access_request_aborted(q);
1803 struct radius_query *q)
1806 log_warnx("q=%u Could not send REQDECO to `%s': module is "
1807 "not running?", q->id, module->name);
1808 radiusd_access_request_aborted(q);
1812 IMSG_RADIUSD_MODULE_REQDECO, q->id, q->req) == -1) {
1813 log_warn("q=%u Could not send REQDECO to `%s'", q->id,
1815 radiusd_access_request_aborted(q);
1818 RADIUSD_ASSERT(q->deco != NULL);
1819 q->deco->type = IMSG_RADIUSD_MODULE_REQDECO;
1825 struct radius_query *q)
1828 log_warnx("q=%u Could not send RESDECO to `%s': module is "
1829 "not running?", q->id, module->name);
1830 radiusd_access_request_aborted(q);
1834 IMSG_RADIUSD_MODULE_RESDECO0_REQ, q->id, q->req) == -1) {
1835 log_warn("q=%u Could not send RESDECO0_REQ to `%s'", q->id,
1837 radiusd_access_request_aborted(q);
1841 IMSG_RADIUSD_MODULE_RESDECO, q->id, q->res) == -1) {
1842 log_warn("q=%u Could not send RESDECO to `%s'", q->id,
1844 radiusd_access_request_aborted(q);
1847 RADIUSD_ASSERT(q->deco != NULL);
1848 q->deco->type = IMSG_RADIUSD_MODULE_RESDECO;
1854 struct radius_query *q)
1858 if ((radpkt = radius_convert_packet(radius_get_data(q->req),
1859 radius_get_length(q->req))) == NULL) {
1860 log_warn("q=%u Could not send ACCSREQ to `%s'", q->id,
1862 radiusd_access_request_aborted(q);
1866 IMSG_RADIUSD_MODULE_ACCTREQ, q->id, radpkt) == -1) {
1867 log_warn("q=%u Could not send ACCTREQ to `%s'", q->id,
1869 radiusd_access_request_aborted(q);