int eap_example_peer_init(void) { if (eap_peer_register_methods() < 0) return -1; os_memset(&eap_ctx, 0, sizeof(eap_ctx)); eap_ctx.eap_config.identity = (u8 *) os_strdup("user"); eap_ctx.eap_config.identity_len = 4; eap_ctx.eap_config.password = (u8 *) os_strdup("password"); eap_ctx.eap_config.password_len = 8; eap_ctx.eap_config.ca_cert = (u8 *) os_strdup("ca.pem"); eap_ctx.eap_config.fragment_size = 1398; os_memset(&eap_cb, 0, sizeof(eap_cb)); eap_cb.get_config = peer_get_config; eap_cb.get_bool = peer_get_bool; eap_cb.set_bool = peer_set_bool; eap_cb.get_int = peer_get_int; eap_cb.set_int = peer_set_int; eap_cb.get_eapReqData = peer_get_eapReqData; eap_cb.set_config_blob = peer_set_config_blob; eap_cb.get_config_blob = peer_get_config_blob; eap_cb.notify_pending = peer_notify_pending; os_memset(&eap_conf, 0, sizeof(eap_conf)); eap_ctx.eap = eap_peer_sm_init(&eap_ctx, &eap_cb, &eap_ctx, &eap_conf); if (eap_ctx.eap == NULL) return -1; /* Enable "port" to allow authentication */ eap_ctx.portEnabled = TRUE; return 0; }
struct gct_config * gct_config_read(const char *name) { FILE *f; // char buf[256], *pos; int errors = 0, line = 0; struct gct_config *config; config = gct_config_alloc_empty(); if (config == NULL) return NULL; if (eap_peer_register_methods() < 0) return NULL; wmlog_msg(3, "Reading configuration file '%s'", name); f = fopen(name, "r"); if (f == NULL) { free(config); wmlog_msg(0, "Configuration file error: %s",strerror(errno)); return NULL; } // while (gct_config_get_line(buf, sizeof(buf), f, &line, &pos)) { errors += gct_config_read_network(config, f, &line); // } fclose(f); if (errors) { gct_config_free(config); config = NULL; } eap_peer_unregister_methods(); return config; }
int eap_peer_init(struct gct_config *config) { wpa_debug_level = config->wpa_debug_level; if (eap_peer_register_methods() < 0) return -1; os_memset(&eap_ctx, 0, sizeof(eap_ctx)); eap_ctx.eap_config.anonymous_identity = config->anonymous_identity; eap_ctx.eap_config.anonymous_identity_len = config->anonymous_identity_len; eap_ctx.eap_config.identity = config->identity; eap_ctx.eap_config.identity_len = config->identity_len; eap_ctx.eap_config.password = config->password; eap_ctx.eap_config.password_len = config->password_len; eap_ctx.eap_config.private_key_passwd = config->private_key_passwd; eap_ctx.eap_config.client_cert = config->client_cert; eap_ctx.eap_config.private_key = config->private_key; eap_ctx.eap_config.ca_cert = config->ca_cert; eap_ctx.eap_config.eap_methods = config->eap_methods; eap_ctx.eap_config.phase1 = config->phase1; eap_ctx.eap_config.phase2 = config->phase2; //flags!! eap_ctx.eap_config.fragment_size = 1300; os_memset(&eap_cb, 0, sizeof(eap_cb)); eap_cb.get_config = peer_get_config; eap_cb.get_bool = peer_get_bool; eap_cb.set_bool = peer_set_bool; eap_cb.get_int = peer_get_int; eap_cb.set_int = peer_set_int; eap_cb.get_eapReqData = peer_get_eapReqData; eap_cb.set_config_blob = peer_set_config_blob; eap_cb.get_config_blob = peer_get_config_blob; eap_cb.notify_pending = peer_notify_pending; os_memset(&eap_conf, 0, sizeof(eap_conf)); eap_ctx.eap = eap_peer_sm_init(&eap_ctx, &eap_cb, &eap_ctx, &eap_conf); if (eap_ctx.eap == NULL) return -1; /* Enable "port" to allow authentication */ eap_ctx.portEnabled = TRUE; return 0; }
int main(int argc, char *argv[]) { struct wpa_supplicant wpa_s; int c, ret = 1, wait_for_monitor = 0, save_config = 0; char *as_addr = "127.0.0.1"; int as_port = 1812; char *as_secret = "radius"; char *conf = NULL; int timeout = 30; if (os_program_init()) return -1; os_memset(&eapol_test, 0, sizeof(eapol_test)); eapol_test.connect_info = "CONNECT 11Mbps 802.11b"; os_memcpy(eapol_test.own_addr, "\x02\x00\x00\x00\x00\x01", ETH_ALEN); wpa_debug_level = 0; wpa_debug_show_keys = 1; for (;;) { c = getopt(argc, argv, "a:c:C:M:np:r:s:St:W"); if (c < 0) break; switch (c) { case 'a': as_addr = optarg; break; case 'c': conf = optarg; break; case 'C': eapol_test.connect_info = optarg; break; case 'M': if (hwaddr_aton(optarg, eapol_test.own_addr)) { usage(); return -1; } break; case 'n': eapol_test.no_mppe_keys++; break; case 'p': as_port = atoi(optarg); break; case 'r': eapol_test.eapol_test_num_reauths = atoi(optarg); break; case 's': as_secret = optarg; break; case 'S': save_config++; break; case 't': timeout = atoi(optarg); break; case 'W': wait_for_monitor++; break; default: usage(); return -1; } } if (argc > optind && os_strcmp(argv[optind], "scard") == 0) { return scard_test(); } if (argc > optind && os_strcmp(argv[optind], "sim") == 0) { return scard_get_triplets(argc - optind - 1, &argv[optind + 1]); } if (conf == NULL) { usage(); printf("Configuration file is required.\n"); return -1; } if (eap_peer_register_methods()) { wpa_printf(MSG_ERROR, "Failed to register EAP methods"); return -1; } if (eloop_init(&wpa_s)) { wpa_printf(MSG_ERROR, "Failed to initialize event loop"); return -1; } os_memset(&wpa_s, 0, sizeof(wpa_s)); eapol_test.wpa_s = &wpa_s; wpa_s.conf = wpa_config_read(conf); if (wpa_s.conf == NULL) { printf("Failed to parse configuration file '%s'.\n", conf); return -1; } if (wpa_s.conf->ssid == NULL) { printf("No networks defined.\n"); return -1; } wpa_init_conf(&eapol_test, &wpa_s, as_addr, as_port, as_secret); wpa_s.ctrl_iface = wpa_supplicant_ctrl_iface_init(&wpa_s); if (wpa_s.ctrl_iface == NULL) { printf("Failed to initialize control interface '%s'.\n" "You may have another eapol_test process already " "running or the file was\n" "left by an unclean termination of eapol_test in " "which case you will need\n" "to manually remove this file before starting " "eapol_test again.\n", wpa_s.conf->ctrl_interface); return -1; } if (wpa_supplicant_scard_init(&wpa_s, wpa_s.conf->ssid)) return -1; if (test_eapol(&eapol_test, &wpa_s, wpa_s.conf->ssid)) return -1; if (wait_for_monitor) wpa_supplicant_ctrl_iface_wait(wpa_s.ctrl_iface); eloop_register_timeout(timeout, 0, eapol_test_timeout, &eapol_test, NULL); eloop_register_timeout(0, 0, send_eap_request_identity, &wpa_s, NULL); eloop_register_signal_terminate(eapol_test_terminate, NULL); eloop_register_signal_reconfig(eapol_test_terminate, NULL); eloop_run(); if (eapol_test_compare_pmk(&eapol_test) == 0 || eapol_test.no_mppe_keys) ret = 0; if (eapol_test.auth_timed_out) ret = -2; if (eapol_test.radius_access_reject_received) ret = -3; if (save_config) wpa_config_write(conf, wpa_s.conf); test_eapol_clean(&eapol_test, &wpa_s); eap_peer_unregister_methods(); eloop_destroy(); printf("MPPE keys OK: %d mismatch: %d\n", eapol_test.num_mppe_ok, eapol_test.num_mppe_mismatch); if (eapol_test.num_mppe_mismatch) ret = -4; if (ret) printf("FAILURE\n"); else printf("SUCCESS\n"); os_program_deinit(); return ret; }
int main(int argc, char *argv[]) { struct wpa_supplicant wpa_s; int ret = 1; u8 bssid[ETH_ALEN]; struct preauth_test_data preauth_test; if (os_program_init()) return -1; os_memset(&preauth_test, 0, sizeof(preauth_test)); wpa_debug_level = 0; wpa_debug_show_keys = 1; if (argc != 4) { printf("usage: preauth_test <conf> <target MAC address> " "<ifname>\n"); return -1; } if (hwaddr_aton(argv[2], bssid)) { printf("Failed to parse target address '%s'.\n", argv[2]); return -1; } if (eap_peer_register_methods()) { wpa_printf(MSG_ERROR, "Failed to register EAP methods"); return -1; } if (eloop_init(&wpa_s)) { wpa_printf(MSG_ERROR, "Failed to initialize event loop"); return -1; } os_memset(&wpa_s, 0, sizeof(wpa_s)); wpa_s.conf = wpa_config_read(argv[1]); if (wpa_s.conf == NULL) { printf("Failed to parse configuration file '%s'.\n", argv[1]); return -1; } if (wpa_s.conf->ssid == NULL) { printf("No networks defined.\n"); return -1; } wpa_init_conf(&wpa_s, argv[3]); wpa_s.ctrl_iface = wpa_supplicant_ctrl_iface_init(&wpa_s); if (wpa_s.ctrl_iface == NULL) { printf("Failed to initialize control interface '%s'.\n" "You may have another preauth_test process already " "running or the file was\n" "left by an unclean termination of preauth_test in " "which case you will need\n" "to manually remove this file before starting " "preauth_test again.\n", wpa_s.conf->ctrl_interface); return -1; } if (wpa_supplicant_scard_init(&wpa_s, wpa_s.conf->ssid)) return -1; if (rsn_preauth_init(wpa_s.wpa, bssid, &wpa_s.conf->ssid->eap)) return -1; eloop_register_timeout(30, 0, eapol_test_timeout, &preauth_test, NULL); eloop_register_timeout(0, 100000, eapol_test_poll, &wpa_s, NULL); eloop_register_signal_terminate(eapol_test_terminate, NULL); eloop_register_signal_reconfig(eapol_test_terminate, NULL); eloop_register_signal_reassociate(eapol_test_terminate, NULL); eloop_run(); if (preauth_test.auth_timed_out) ret = -2; else { ret = pmksa_cache_set_current(wpa_s.wpa, NULL, bssid, NULL, 0) ? 0 : -3; } test_eapol_clean(&wpa_s); eap_peer_unregister_methods(); eloop_destroy(); os_program_deinit(); return ret; }