struct radius_server_data * radius_server_init(struct radius_server_conf *conf) { struct radius_server_data *data; #ifndef CONFIG_IPV6 if (conf->ipv6) { fprintf(stderr, "RADIUS server compiled without IPv6 " "support.\n"); return NULL; } #endif /* CONFIG_IPV6 */ data = wpa_zalloc(sizeof(*data)); if (data == NULL) return NULL; os_get_time(&data->start_time); data->hostapd_conf = conf->hostapd_conf; data->eap_sim_db_priv = conf->eap_sim_db_priv; data->ssl_ctx = conf->ssl_ctx; data->ipv6 = conf->ipv6; data->clients = radius_server_read_clients(conf->client_file, conf->ipv6); if (data->clients == NULL) { printf("No RADIUS clients configured.\n"); radius_server_deinit(data); return NULL; } #ifdef CONFIG_IPV6 if (conf->ipv6) data->auth_sock = radius_server_open_socket6(conf->auth_port); else #endif /* CONFIG_IPV6 */ data->auth_sock = radius_server_open_socket(conf->auth_port); if (data->auth_sock < 0) { printf("Failed to open UDP socket for RADIUS authentication " "server\n"); radius_server_deinit(data); return NULL; } if (eloop_register_read_sock(data->auth_sock, radius_server_receive_auth, data, NULL)) { radius_server_deinit(data); return NULL; } return data; }
struct radius_server_data * radius_server_init(struct radius_server_conf *conf) { struct radius_server_data *data; data = malloc(sizeof(*data)); if (data == NULL) { return NULL; } memset(data, 0, sizeof(*data)); data->hostapd_conf = conf->hostapd_conf; data->eap_sim_db_priv = conf->eap_sim_db_priv; data->ssl_ctx = conf->ssl_ctx; data->clients = radius_server_read_clients(conf->client_file); if (data->clients == NULL) { printf("No RADIUS clients configured.\n"); radius_server_deinit(data); return NULL; } data->auth_sock = radius_server_open_socket(conf->auth_port); if (data->auth_sock < 0) { printf("Failed to open UDP socket for RADIUS authentication " "server\n"); radius_server_deinit(data); return NULL; } if (eloop_register_read_sock(data->auth_sock, radius_server_receive_auth, data, NULL)) { radius_server_deinit(data); return NULL; } return data; }
void authsrv_deinit(struct hostapd_data *hapd) { #ifdef RADIUS_SERVER radius_server_deinit(hapd->radius_srv); hapd->radius_srv = NULL; #endif /* RADIUS_SERVER */ #ifdef EAP_TLS_FUNCS if (hapd->ssl_ctx) { tls_deinit(hapd->ssl_ctx); hapd->ssl_ctx = NULL; } #endif /* EAP_TLS_FUNCS */ #ifdef EAP_SIM_DB if (hapd->eap_sim_db_priv) { eap_sim_db_deinit(hapd->eap_sim_db_priv); hapd->eap_sim_db_priv = NULL; } #endif /* EAP_SIM_DB */ }
static void hostapd_cleanup(struct hostapd_data *hapd) { hostapd_ctrl_iface_deinit(hapd); free(hapd->default_wep_key); hapd->default_wep_key = NULL; iapp_deinit(hapd->iapp); accounting_deinit(hapd); wpa_deinit(hapd); #ifdef SIMPLE_CONFIG wsc_ie_deinit(hapd); #endif ieee802_1x_deinit(hapd); hostapd_acl_deinit(hapd); radius_client_deinit(hapd->radius); hapd->radius = NULL; radius_server_deinit(hapd->radius_srv); hapd->radius_srv = NULL; hostapd_wireless_event_deinit(hapd); if (hapd->driver) hostapd_driver_deinit(hapd); hostapd_config_free(hapd->conf); hapd->conf = NULL; free(hapd->config_fname); #ifdef EAP_TLS_FUNCS if (hapd->ssl_ctx) { tls_deinit(hapd->ssl_ctx); hapd->ssl_ctx = NULL; } #endif /* EAP_TLS_FUNCS */ if (hapd->eap_sim_db_priv) eap_sim_db_deinit(hapd->eap_sim_db_priv); }
struct radius_server_data * radius_server_init(struct radius_server_conf *conf) { struct radius_server_data *data; #ifndef CONFIG_IPV6 if (conf->ipv6) { fprintf(stderr, "RADIUS server compiled without IPv6 " "support.\n"); return NULL; } #endif /* CONFIG_IPV6 */ data = os_zalloc(sizeof(*data)); if (data == NULL) return NULL; os_get_time(&data->start_time); data->conf_ctx = conf->conf_ctx; data->eap_sim_db_priv = conf->eap_sim_db_priv; data->ssl_ctx = conf->ssl_ctx; data->ipv6 = conf->ipv6; if (conf->pac_opaque_encr_key) { data->pac_opaque_encr_key = os_malloc(16); os_memcpy(data->pac_opaque_encr_key, conf->pac_opaque_encr_key, 16); } if (conf->eap_fast_a_id) { data->eap_fast_a_id = os_malloc(conf->eap_fast_a_id_len); if (data->eap_fast_a_id) { os_memcpy(data->eap_fast_a_id, conf->eap_fast_a_id, conf->eap_fast_a_id_len); data->eap_fast_a_id_len = conf->eap_fast_a_id_len; } } if (conf->eap_fast_a_id_info) data->eap_fast_a_id_info = os_strdup(conf->eap_fast_a_id_info); data->eap_fast_prov = conf->eap_fast_prov; data->pac_key_lifetime = conf->pac_key_lifetime; data->pac_key_refresh_time = conf->pac_key_refresh_time; data->get_eap_user = conf->get_eap_user; data->eap_sim_aka_result_ind = conf->eap_sim_aka_result_ind; data->tnc = conf->tnc; data->wps = conf->wps; if (conf->eap_req_id_text) { data->eap_req_id_text = os_malloc(conf->eap_req_id_text_len); if (data->eap_req_id_text) { os_memcpy(data->eap_req_id_text, conf->eap_req_id_text, conf->eap_req_id_text_len); data->eap_req_id_text_len = conf->eap_req_id_text_len; } } data->clients = radius_server_read_clients(conf->client_file, conf->ipv6); if (data->clients == NULL) { printf("No RADIUS clients configured.\n"); radius_server_deinit(data); return NULL; } #ifdef CONFIG_IPV6 if (conf->ipv6) data->auth_sock = radius_server_open_socket6(conf->auth_port); else #endif /* CONFIG_IPV6 */ data->auth_sock = radius_server_open_socket(conf->auth_port); if (data->auth_sock < 0) { printf("Failed to open UDP socket for RADIUS authentication " "server\n"); radius_server_deinit(data); return NULL; } if (eloop_register_read_sock(data->auth_sock, radius_server_receive_auth, data, NULL)) { radius_server_deinit(data); return NULL; } return data; }