Lines Matching refs:radius

18 #include "radius.h"
90 radius_change_server(struct radius_client_data *radius,
94 static int radius_client_init_acct(struct radius_client_data *radius);
95 static int radius_client_init_auth(struct radius_client_data *radius);
106 int radius_client_register(struct radius_client_data *radius,
119 handlers = &radius->acct_handlers;
120 num = &radius->num_acct_handlers;
122 handlers = &radius->auth_handlers;
123 num = &radius->num_auth_handlers;
140 static void radius_client_handle_send_error(struct radius_client_data *radius,
148 hostapd_logger(radius->ctx, NULL, HOSTAPD_MODULE_RADIUS,
155 radius_client_init_acct(radius);
157 radius_client_init_auth(radius);
163 static int radius_client_retransmit(struct radius_client_data *radius,
167 struct hostapd_radius_servers *conf = radius->conf;
172 s = radius->acct_sock;
180 s = radius->auth_sock;
191 hostapd_logger(radius->ctx, entry->addr, HOSTAPD_MODULE_RADIUS,
197 radius_client_handle_send_error(radius, s, entry->msg_type);
215 struct radius_client_data *radius = eloop_ctx;
216 struct hostapd_radius_servers *conf = radius->conf;
223 entry = radius->msgs;
233 radius_client_retransmit(radius, entry, now.sec)) {
237 radius->msgs = entry->next;
242 radius->num_msgs--;
261 if (radius->msgs) {
265 radius_client_timer, radius, NULL);
266 hostapd_logger(radius->ctx, NULL, HOSTAPD_MODULE_RADIUS,
275 hostapd_logger(radius->ctx, NULL, HOSTAPD_MODULE_RADIUS,
282 for (entry = radius->msgs; entry; entry = entry->next) {
291 radius_change_server(radius, next, old,
292 radius->auth_serv_sock,
293 radius->auth_serv_sock6, 1);
299 hostapd_logger(radius->ctx, NULL, HOSTAPD_MODULE_RADIUS,
306 for (entry = radius->msgs; entry; entry = entry->next) {
316 radius_change_server(radius, next, old,
317 radius->acct_serv_sock,
318 radius->acct_serv_sock6, 0);
323 static void radius_client_update_timeout(struct radius_client_data *radius)
329 eloop_cancel_timeout(radius_client_timer, radius, NULL);
331 if (radius->msgs == NULL) {
336 for (entry = radius->msgs; entry; entry = entry->next) {
344 eloop_register_timeout(first - now.sec, 0, radius_client_timer, radius,
346 hostapd_logger(radius->ctx, NULL, HOSTAPD_MODULE_RADIUS,
352 static void radius_client_list_add(struct radius_client_data *radius,
386 entry->next = radius->msgs;
387 radius->msgs = entry;
388 radius_client_update_timeout(radius);
390 if (radius->num_msgs >= RADIUS_CLIENT_MAX_ENTRIES) {
403 radius->num_msgs++;
407 static void radius_client_list_del(struct radius_client_data *radius,
415 entry = radius->msgs;
423 radius->msgs = entry->next;
426 hostapd_logger(radius->ctx, addr,
431 radius->num_msgs--;
440 int radius_client_send(struct radius_client_data *radius,
444 struct hostapd_radius_servers *conf = radius->conf;
452 radius_client_list_del(radius, msg_type, addr);
457 hostapd_logger(radius->ctx, NULL,
467 s = radius->acct_sock;
471 hostapd_logger(radius->ctx, NULL,
481 s = radius->auth_sock;
485 hostapd_logger(radius->ctx, NULL, HOSTAPD_MODULE_RADIUS,
493 radius_client_handle_send_error(radius, s, msg_type);
495 radius_client_list_add(radius, msg, msg_type, shared_secret,
504 struct radius_client_data *radius = eloop_ctx;
505 struct hostapd_radius_servers *conf = radius->conf;
518 handlers = radius->acct_handlers;
519 num_handlers = radius->num_acct_handlers;
522 handlers = radius->auth_handlers;
523 num_handlers = radius->num_auth_handlers;
532 hostapd_logger(radius->ctx, NULL, HOSTAPD_MODULE_RADIUS,
548 hostapd_logger(radius->ctx, NULL, HOSTAPD_MODULE_RADIUS,
569 req = radius->msgs;
584 hostapd_logger(radius->ctx, NULL, HOSTAPD_MODULE_RADIUS,
595 hostapd_logger(radius->ctx, req->addr, HOSTAPD_MODULE_RADIUS,
606 radius->msgs = req->next;
607 radius->num_msgs--;
635 hostapd_logger(radius->ctx, req->addr, HOSTAPD_MODULE_RADIUS,
649 u8 radius_client_get_id(struct radius_client_data *radius)
652 u8 id = radius->next_radius_identifier++;
656 entry = radius->msgs;
660 hostapd_logger(radius->ctx, entry->addr,
668 radius->msgs = entry->next;
684 void radius_client_flush(struct radius_client_data *radius, int only_auth)
688 if (!radius)
692 entry = radius->msgs;
699 radius->msgs = entry->next;
704 radius->num_msgs--;
711 if (radius->msgs == NULL)
712 eloop_cancel_timeout(radius_client_timer, radius, NULL);
716 static void radius_client_update_acct_msgs(struct radius_client_data *radius,
722 if (!radius)
725 for (entry = radius->msgs; entry; entry = entry->next) {
737 radius_change_server(struct radius_client_data *radius,
751 struct hostapd_radius_servers *conf = radius->conf;
753 hostapd_logger(radius->ctx, NULL, HOSTAPD_MODULE_RADIUS,
771 radius_client_flush(radius, 1);
774 radius, nserv->shared_secret,
780 for (entry = radius->msgs; entry; entry = entry->next) {
789 if (radius->msgs) {
790 eloop_cancel_timeout(radius_client_timer, radius, NULL);
792 radius_client_timer, radius, NULL);
847 perror("bind[radius]");
853 perror("connect[radius]");
881 radius->auth_sock = sel_sock;
883 radius->acct_sock = sel_sock;
891 struct radius_client_data *radius = eloop_ctx;
892 struct hostapd_radius_servers *conf = radius->conf;
895 if (radius->auth_sock >= 0 && conf->auth_servers &&
899 radius_change_server(radius, conf->auth_server, oserv,
900 radius->auth_serv_sock,
901 radius->auth_serv_sock6, 1);
904 if (radius->acct_sock >= 0 && conf->acct_servers &&
908 radius_change_server(radius, conf->acct_server, oserv,
909 radius->acct_serv_sock,
910 radius->acct_serv_sock6, 0);
915 radius_retry_primary_timer, radius,
936 static int radius_client_init_auth(struct radius_client_data *radius)
938 struct hostapd_radius_servers *conf = radius->conf;
941 radius->auth_serv_sock = socket(PF_INET, SOCK_DGRAM, 0);
942 if (radius->auth_serv_sock < 0)
945 radius_client_disable_pmtu_discovery(radius->auth_serv_sock);
950 radius->auth_serv_sock6 = socket(PF_INET6, SOCK_DGRAM, 0);
951 if (radius->auth_serv_sock6 < 0)
960 radius_change_server(radius, conf->auth_server, NULL,
961 radius->auth_serv_sock, radius->auth_serv_sock6,
964 if (radius->auth_serv_sock >= 0 &&
965 eloop_register_read_sock(radius->auth_serv_sock,
966 radius_client_receive, radius,
974 if (radius->auth_serv_sock6 >= 0 &&
975 eloop_register_read_sock(radius->auth_serv_sock6,
976 radius_client_receive, radius,
988 static int radius_client_init_acct(struct radius_client_data *radius)
990 struct hostapd_radius_servers *conf = radius->conf;
993 radius->acct_serv_sock = socket(PF_INET, SOCK_DGRAM, 0);
994 if (radius->acct_serv_sock < 0)
997 radius_client_disable_pmtu_discovery(radius->acct_serv_sock);
1002 radius->acct_serv_sock6 = socket(PF_INET6, SOCK_DGRAM, 0);
1003 if (radius->acct_serv_sock6 < 0)
1012 radius_change_server(radius, conf->acct_server, NULL,
1013 radius->acct_serv_sock, radius->acct_serv_sock6,
1016 if (radius->acct_serv_sock >= 0 &&
1017 eloop_register_read_sock(radius->acct_serv_sock,
1018 radius_client_receive, radius,
1026 if (radius->acct_serv_sock6 >= 0 &&
1027 eloop_register_read_sock(radius->acct_serv_sock6,
1028 radius_client_receive, radius,
1043 struct radius_client_data *radius;
1045 radius = os_zalloc(sizeof(struct radius_client_data));
1046 if (radius == NULL)
1049 radius->ctx = ctx;
1050 radius->conf = conf;
1051 radius->auth_serv_sock = radius->acct_serv_sock =
1052 radius->auth_serv_sock6 = radius->acct_serv_sock6 =
1053 radius->auth_sock = radius->acct_sock = -1;
1055 if (conf->auth_server && radius_client_init_auth(radius)) {
1056 radius_client_deinit(radius);
1060 if (conf->acct_server && radius_client_init_acct(radius)) {
1061 radius_client_deinit(radius);
1067 radius_retry_primary_timer, radius,
1070 return radius;
1074 void radius_client_deinit(struct radius_client_data *radius)
1076 if (!radius)
1079 if (radius->auth_serv_sock >= 0)
1080 eloop_unregister_read_sock(radius->auth_serv_sock);
1081 if (radius->acct_serv_sock >= 0)
1082 eloop_unregister_read_sock(radius->acct_serv_sock);
1084 if (radius->auth_serv_sock6 >= 0)
1085 eloop_unregister_read_sock(radius->auth_serv_sock6);
1086 if (radius->acct_serv_sock6 >= 0)
1087 eloop_unregister_read_sock(radius->acct_serv_sock6);
1090 eloop_cancel_timeout(radius_retry_primary_timer, radius, NULL);
1092 radius_client_flush(radius, 0);
1093 os_free(radius->auth_handlers);
1094 os_free(radius->acct_handlers);
1095 os_free(radius);
1099 void radius_client_flush_auth(struct radius_client_data *radius, u8 *addr)
1104 entry = radius->msgs;
1108 hostapd_logger(radius->ctx, addr,
1117 radius->msgs = entry->next;
1122 radius->num_msgs--;
1227 int radius_client_get_mib(struct radius_client_data *radius, char *buf,
1230 struct hostapd_radius_servers *conf = radius->conf;
1241 radius : NULL);
1251 radius : NULL);