Lines Matching defs:radius

18 #include "radius.h"
239 radius_change_server(struct radius_client_data *radius,
243 static int radius_client_init_acct(struct radius_client_data *radius);
244 static int radius_client_init_auth(struct radius_client_data *radius);
256 * @radius: RADIUS client context from radius_client_init()
270 int radius_client_register(struct radius_client_data *radius,
283 handlers = &radius->acct_handlers;
284 num = &radius->num_acct_handlers;
286 handlers = &radius->auth_handlers;
287 num = &radius->num_auth_handlers;
304 static void radius_client_handle_send_error(struct radius_client_data *radius,
312 hostapd_logger(radius->ctx, NULL, HOSTAPD_MODULE_RADIUS,
319 radius_client_init_acct(radius);
321 radius_client_init_auth(radius);
327 static int radius_client_retransmit(struct radius_client_data *radius,
331 struct hostapd_radius_servers *conf = radius->conf;
337 s = radius->acct_sock;
345 s = radius->auth_sock;
356 hostapd_logger(radius->ctx, entry->addr, HOSTAPD_MODULE_RADIUS,
363 radius_client_handle_send_error(radius, s, entry->msg_type);
381 struct radius_client_data *radius = eloop_ctx;
382 struct hostapd_radius_servers *conf = radius->conf;
389 entry = radius->msgs;
399 radius_client_retransmit(radius, entry, now.sec)) {
403 radius->msgs = entry->next;
408 radius->num_msgs--;
427 if (radius->msgs) {
431 radius_client_timer, radius, NULL);
432 hostapd_logger(radius->ctx, NULL, HOSTAPD_MODULE_RADIUS,
441 hostapd_logger(radius->ctx, NULL, HOSTAPD_MODULE_RADIUS,
448 for (entry = radius->msgs; entry; entry = entry->next) {
457 radius_change_server(radius, next, old,
458 radius->auth_serv_sock,
459 radius->auth_serv_sock6, 1);
465 hostapd_logger(radius->ctx, NULL, HOSTAPD_MODULE_RADIUS,
472 for (entry = radius->msgs; entry; entry = entry->next) {
482 radius_change_server(radius, next, old,
483 radius->acct_serv_sock,
484 radius->acct_serv_sock6, 0);
489 static void radius_client_update_timeout(struct radius_client_data *radius)
495 eloop_cancel_timeout(radius_client_timer, radius, NULL);
497 if (radius->msgs == NULL) {
502 for (entry = radius->msgs; entry; entry = entry->next) {
510 eloop_register_timeout(first - now.sec, 0, radius_client_timer, radius,
512 hostapd_logger(radius->ctx, NULL, HOSTAPD_MODULE_RADIUS,
518 static void radius_client_list_add(struct radius_client_data *radius,
551 entry->next = radius->msgs;
552 radius->msgs = entry;
553 radius_client_update_timeout(radius);
555 if (radius->num_msgs >= RADIUS_CLIENT_MAX_ENTRIES) {
568 radius->num_msgs++;
572 static void radius_client_list_del(struct radius_client_data *radius,
580 entry = radius->msgs;
588 radius->msgs = entry->next;
591 hostapd_logger(radius->ctx, addr,
596 radius->num_msgs--;
607 * @radius: RADIUS client context from radius_client_init()
627 int radius_client_send(struct radius_client_data *radius,
631 struct hostapd_radius_servers *conf = radius->conf;
640 radius_client_list_del(radius, msg_type, addr);
645 hostapd_logger(radius->ctx, NULL,
655 s = radius->acct_sock;
659 hostapd_logger(radius->ctx, NULL,
669 s = radius->auth_sock;
673 hostapd_logger(radius->ctx, NULL, HOSTAPD_MODULE_RADIUS,
682 radius_client_handle_send_error(radius, s, msg_type);
684 radius_client_list_add(radius, msg, msg_type, shared_secret,
693 struct radius_client_data *radius = eloop_ctx;
694 struct hostapd_radius_servers *conf = radius->conf;
708 handlers = radius->acct_handlers;
709 num_handlers = radius->num_acct_handlers;
712 handlers = radius->auth_handlers;
713 num_handlers = radius->num_auth_handlers;
722 hostapd_logger(radius->ctx, NULL, HOSTAPD_MODULE_RADIUS,
739 hostapd_logger(radius->ctx, NULL, HOSTAPD_MODULE_RADIUS,
760 req = radius->msgs;
776 hostapd_logger(radius->ctx, NULL, HOSTAPD_MODULE_RADIUS,
787 hostapd_logger(radius->ctx, req->addr, HOSTAPD_MODULE_RADIUS,
798 radius->msgs = req->next;
799 radius->num_msgs--;
826 hostapd_logger(radius->ctx, req->addr, HOSTAPD_MODULE_RADIUS,
841 * @radius: RADIUS client context from radius_client_init()
847 u8 radius_client_get_id(struct radius_client_data *radius)
850 u8 id = radius->next_radius_identifier++;
854 entry = radius->msgs;
858 hostapd_logger(radius->ctx, entry->addr,
866 radius->msgs = entry->next;
884 * @radius: RADIUS client context from radius_client_init()
887 void radius_client_flush(struct radius_client_data *radius, int only_auth)
891 if (!radius)
895 entry = radius->msgs;
902 radius->msgs = entry->next;
907 radius->num_msgs--;
914 if (radius->msgs == NULL)
915 eloop_cancel_timeout(radius_client_timer, radius, NULL);
919 static void radius_client_update_acct_msgs(struct radius_client_data *radius,
925 if (!radius)
928 for (entry = radius->msgs; entry; entry = entry->next) {
940 radius_change_server(struct radius_client_data *radius,
954 struct hostapd_radius_servers *conf = radius->conf;
956 hostapd_logger(radius->ctx, NULL, HOSTAPD_MODULE_RADIUS,
974 radius_client_flush(radius, 1);
977 radius, nserv->shared_secret,
983 for (entry = radius->msgs; entry; entry = entry->next) {
992 if (radius->msgs) {
993 eloop_cancel_timeout(radius_client_timer, radius, NULL);
995 radius_client_timer, radius, NULL);
1050 perror("bind[radius]");
1056 perror("connect[radius]");
1084 radius->auth_sock = sel_sock;
1086 radius->acct_sock = sel_sock;
1094 struct radius_client_data *radius = eloop_ctx;
1095 struct hostapd_radius_servers *conf = radius->conf;
1098 if (radius->auth_sock >= 0 && conf->auth_servers &&
1102 radius_change_server(radius, conf->auth_server, oserv,
1103 radius->auth_serv_sock,
1104 radius->auth_serv_sock6, 1);
1107 if (radius->acct_sock >= 0 && conf->acct_servers &&
1111 radius_change_server(radius, conf->acct_server, oserv,
1112 radius->acct_serv_sock,
1113 radius->acct_serv_sock6, 0);
1118 radius_retry_primary_timer, radius,
1139 static int radius_client_init_auth(struct radius_client_data *radius)
1141 struct hostapd_radius_servers *conf = radius->conf;
1144 radius->auth_serv_sock = socket(PF_INET, SOCK_DGRAM, 0);
1145 if (radius->auth_serv_sock < 0)
1148 radius_client_disable_pmtu_discovery(radius->auth_serv_sock);
1153 radius->auth_serv_sock6 = socket(PF_INET6, SOCK_DGRAM, 0);
1154 if (radius->auth_serv_sock6 < 0)
1163 radius_change_server(radius, conf->auth_server, NULL,
1164 radius->auth_serv_sock, radius->auth_serv_sock6,
1167 if (radius->auth_serv_sock >= 0 &&
1168 eloop_register_read_sock(radius->auth_serv_sock,
1169 radius_client_receive, radius,
1177 if (radius->auth_serv_sock6 >= 0 &&
1178 eloop_register_read_sock(radius->auth_serv_sock6,
1179 radius_client_receive, radius,
1191 static int radius_client_init_acct(struct radius_client_data *radius)
1193 struct hostapd_radius_servers *conf = radius->conf;
1196 radius->acct_serv_sock = socket(PF_INET, SOCK_DGRAM, 0);
1197 if (radius->acct_serv_sock < 0)
1200 radius_client_disable_pmtu_discovery(radius->acct_serv_sock);
1205 radius->acct_serv_sock6 = socket(PF_INET6, SOCK_DGRAM, 0);
1206 if (radius->acct_serv_sock6 < 0)
1215 radius_change_server(radius, conf->acct_server, NULL,
1216 radius->acct_serv_sock, radius->acct_serv_sock6,
1219 if (radius->acct_serv_sock >= 0 &&
1220 eloop_register_read_sock(radius->acct_serv_sock,
1221 radius_client_receive, radius,
1229 if (radius->acct_serv_sock6 >= 0 &&
1230 eloop_register_read_sock(radius->acct_serv_sock6,
1231 radius_client_receive, radius,
1256 struct radius_client_data *radius;
1258 radius = os_zalloc(sizeof(struct radius_client_data));
1259 if (radius == NULL)
1262 radius->ctx = ctx;
1263 radius->conf = conf;
1264 radius->auth_serv_sock = radius->acct_serv_sock =
1265 radius->auth_serv_sock6 = radius->acct_serv_sock6 =
1266 radius->auth_sock = radius->acct_sock = -1;
1268 if (conf->auth_server && radius_client_init_auth(radius)) {
1269 radius_client_deinit(radius);
1273 if (conf->acct_server && radius_client_init_acct(radius)) {
1274 radius_client_deinit(radius);
1280 radius_retry_primary_timer, radius,
1283 return radius;
1289 * @radius: RADIUS client context from radius_client_init()
1291 void radius_client_deinit(struct radius_client_data *radius)
1293 if (!radius)
1296 if (radius->auth_serv_sock >= 0)
1297 eloop_unregister_read_sock(radius->auth_serv_sock);
1298 if (radius->acct_serv_sock >= 0)
1299 eloop_unregister_read_sock(radius->acct_serv_sock);
1301 if (radius->auth_serv_sock6 >= 0)
1302 eloop_unregister_read_sock(radius->auth_serv_sock6);
1303 if (radius->acct_serv_sock6 >= 0)
1304 eloop_unregister_read_sock(radius->acct_serv_sock6);
1307 eloop_cancel_timeout(radius_retry_primary_timer, radius, NULL);
1309 radius_client_flush(radius, 0);
1310 os_free(radius->auth_handlers);
1311 os_free(radius->acct_handlers);
1312 os_free(radius);
1318 * @radius: RADIUS client context from radius_client_init()
1326 void radius_client_flush_auth(struct radius_client_data *radius,
1332 entry = radius->msgs;
1336 hostapd_logger(radius->ctx, addr,
1345 radius->msgs = entry->next;
1350 radius->num_msgs--;
1457 * @radius: RADIUS client context from radius_client_init()
1462 int radius_client_get_mib(struct radius_client_data *radius, char *buf,
1465 struct hostapd_radius_servers *conf = radius->conf;
1476 radius : NULL);
1486 radius : NULL);