From 7224c1253228e5c29c78cb3f0f26ce34770f2356 Mon Sep 17 00:00:00 2001 From: BlackNoxis Date: Sat, 15 Feb 2014 23:24:26 +0200 Subject: Added ebuilds for kogaion desktop --- net-wireless/hostapd/files/hostapd-1.0-karma.patch | 465 +++++++++++++++++++++ 1 file changed, 465 insertions(+) create mode 100644 net-wireless/hostapd/files/hostapd-1.0-karma.patch (limited to 'net-wireless/hostapd/files/hostapd-1.0-karma.patch') diff --git a/net-wireless/hostapd/files/hostapd-1.0-karma.patch b/net-wireless/hostapd/files/hostapd-1.0-karma.patch new file mode 100644 index 00000000..2b88965a --- /dev/null +++ b/net-wireless/hostapd/files/hostapd-1.0-karma.patch @@ -0,0 +1,465 @@ +diff -urN hostapd-1.0.orig//hostapd/Makefile hostapd-1.0/hostapd/Makefile +--- hostapd-1.0.orig//hostapd/Makefile 2012-05-10 05:56:09.000000000 +0800 ++++ hostapd-1.0/hostapd/Makefile 2012-07-17 18:36:53.318959033 +0800 +@@ -3,7 +3,7 @@ + endif + + ifndef CFLAGS +-CFLAGS = -MMD -O2 -Wall -g ++CFLAGS = -MMD -O2 -Wall -DDEBUG -g -pg + endif + + CFLAGS += -I../src +@@ -95,6 +95,7 @@ + + OBJS += ../src/eapol_auth/eapol_auth_sm.o + ++OBJS += ../src/karma/karma.o + + ifndef CONFIG_NO_DUMP_STATE + # define HOSTAPD_DUMP_STATE to include SIGUSR1 handler for dumping state to + +diff -urN hostapd-1.0.orig//hostapd/hostapd.conf hostapd-1.0/hostapd/hostapd.conf +--- hostapd-1.0.orig//hostapd/hostapd.conf 2012-05-10 05:56:09.000000000 +0800 ++++ hostapd-1.0/hostapd/hostapd.conf 2012-07-17 18:36:53.319959023 +0800 +@@ -3,7 +3,7 @@ + + # AP netdevice name (without 'ap' postfix, i.e., wlan0 uses wlan0ap for + # management frames); ath0 for madwifi +-interface=wlan0 ++interface=wlan1 + + # In case of madwifi, atheros, and nl80211 driver interfaces, an additional + # configuration parameter, bridge, may be used to notify hostapd if the +@@ -23,6 +23,7 @@ + # Use driver=none if building hostapd as a standalone RADIUS server that does + # not control any wireless/wired driver. + # driver=hostap ++driver=nl80211 + + # hostapd event logger configuration + # +@@ -88,7 +89,7 @@ + # Country code (ISO/IEC 3166-1). Used to set regulatory domain. + # Set as needed to indicate country in which device is operating. + # This can limit available channels and transmit power. +-#country_code=US ++country_code=US + + # Enable IEEE 802.11d. This advertises the country_code and the set of allowed + # channels and transmit power levels based on the regulatory limits. The +@@ -413,7 +414,7 @@ + ##### IEEE 802.1X-2004 related configuration ################################## + + # Require IEEE 802.1X authorization +-#ieee8021x=1 ++ieee8021x=1 + + # IEEE 802.1X/EAPOL version + # hostapd is implemented based on IEEE Std 802.1X-2004 which defines EAPOL +@@ -421,7 +422,7 @@ + # the new version number correctly (they seem to drop the frames completely). + # In order to make hostapd interoperate with these clients, the version number + # can be set to the older version (1) with this configuration value. +-#eapol_version=2 ++eapol_version=1 + + # Optional displayable message sent with EAP Request-Identity. The first \0 + # in this string will be converted to ASCII-0 (nul). This can be used to +@@ -463,16 +464,18 @@ + # Use integrated EAP server instead of external RADIUS authentication + # server. This is also needed if hostapd is configured to act as a RADIUS + # authentication server. +-eap_server=0 ++eap_server=1 + + # Path for EAP server user database + #eap_user_file=/etc/hostapd.eap_user + + # CA certificate (PEM or DER file) for EAP-TLS/PEAP/TTLS + #ca_cert=/etc/hostapd.ca.pem ++ca_cert=/etc/hostapd/sf_bundle.pem + + # Server certificate (PEM or DER file) for EAP-TLS/PEAP/TTLS + #server_cert=/etc/hostapd.server.pem ++server_cert=/etc/hostapd/INTRANET.pem + + # Private key matching with the server certificate for EAP-TLS/PEAP/TTLS + # This may point to the same file as server_cert if both certificate and key +@@ -480,9 +483,11 @@ + # used by commenting out server_cert and specifying the PFX file as the + # private_key. + #private_key=/etc/hostapd.server.prv ++private_key=/etc/hostapd/INTRANET.pem + + # Passphrase for private key + #private_key_passwd=secret passphrase ++private_key_passwd=Cricket8 + + # Enable CRL verification. + # Note: hostapd does not yet support CRL downloading based on CDP. Thus, a +@@ -680,6 +685,7 @@ + # bit0 = WPA + # bit1 = IEEE 802.11i/RSN (WPA2) (dot11RSNAEnabled) + #wpa=1 ++wpa=3 + + # WPA pre-shared keys for WPA-PSK. This can be either entered as a 256-bit + # secret in hex format (64 hex digits), wpa_psk, or as an ASCII passphrase +@@ -701,6 +707,7 @@ + # added to enable SHA256-based stronger algorithms. + # (dot11RSNAConfigAuthenticationSuitesTable) + #wpa_key_mgmt=WPA-PSK WPA-EAP ++wpa_key_mgmt=WPA-EAP + + # Set of accepted cipher suites (encryption algorithms) for pairwise keys + # (unicast packets). This is a space separated list of algorithms: +diff -urN hostapd-1.0.orig//hostapd/main.c hostapd-1.0/hostapd/main.c +--- hostapd-1.0.orig//hostapd/main.c 2012-05-10 05:56:09.000000000 +0800 ++++ hostapd-1.0/hostapd/main.c 2012-07-17 18:37:57.724959001 +0800 +@@ -39,6 +39,10 @@ + + extern struct wpa_driver_ops *wpa_drivers[]; + ++/* Karma Mode */ ++#include "karma/karma.h" ++int karma_beacon_respond = 0; ++int karma_eap_auth = 0; + + struct hapd_global { + void **drv_priv; +@@ -521,7 +525,7 @@ + show_version(); + fprintf(stderr, + "\n" +- "usage: hostapd [-hdBKtv] [-P ] [-e ] " ++ "usage: hostapd [-hdBKtvRA] [-P ] [-e ] " + "\n" + "\n" + "options:\n" +@@ -535,7 +539,9 @@ + " -f log output to debug file instead of stdout\n" + #endif /* CONFIG_DEBUG_FILE */ + " -t include timestamps in some debug messages\n" +- " -v show hostapd version\n"); ++ " -v show hostapd version\n" ++ " -R [karma] respond to all probes using requested SSID\n" ++ " -A [karma] enable authentication attempt logging\n"); + + exit(1); + } +@@ -564,7 +570,7 @@ + return -1; + + for (;;) { +- c = getopt(argc, argv, "Bde:f:hKP:tv"); ++ c = getopt(argc, argv, "Bde:f:hKP:tvRA"); + if (c < 0) + break; + switch (c) { +@@ -595,6 +601,12 @@ + case 't': + wpa_debug_timestamp++; + break; ++ case 'R': ++ karma_beacon_respond++; ++ break; ++ case 'A': ++ karma_eap_auth++; ++ break; + case 'v': + show_version(); + exit(1); +diff -urN hostapd-1.0.orig//src/ap/beacon.c hostapd-1.0/src/ap/beacon.c +--- hostapd-1.0.orig//src/ap/beacon.c 2012-05-10 05:56:09.000000000 +0800 ++++ hostapd-1.0/src/ap/beacon.c 2012-07-17 18:36:53.322959001 +0800 +@@ -14,6 +14,11 @@ + * See README and COPYING for more details. + */ + ++#define _GNU_SOURCE ++#include ++ ++#include "karma/karma.h" ++ + #include "utils/includes.h" + + #ifndef CONFIG_NATIVE_WINDOWS +@@ -283,7 +288,24 @@ + if (sta) + sta->ssid_probe = &hapd->conf->ssid; + } +- ++ /* Karma Promiscuous Beacon Response Hack - JoMo-Kun */ ++ else if (karma_beacon_respond) { ++ char ssid_txt[33]; ++ char *message = NULL; ++ ++ ieee802_11_print_ssid(ssid_txt, elems.ssid, elems.ssid_len); ++ ++ if (asprintf(&message, "Probe request from " MACSTR " for SSID '%s'", MAC2STR(mgmt->sa), ssid_txt) < 0) ++ wpa_printf(MSG_ERROR, "Error allocating memory for Karma message\n"); ++ ++ karma_logger(0, message); ++ free(message); ++ ++ ssid = (char *)elems.ssid; ++ ssid_len = elems.ssid_len; ++ //if (sta) ++ // sta->ssid_probe = &elems.ssid; ++ } + if (!ssid) { + if (!(mgmt->da[0] & 0x01)) { + char ssid_txt[33]; +diff -urN hostapd-1.0.orig//src/ap/hostapd.c hostapd-1.0/src/ap/hostapd.c +--- hostapd-1.0.orig//src/ap/hostapd.c 2012-05-10 05:56:09.000000000 +0800 ++++ hostapd-1.0/src/ap/hostapd.c 2012-07-17 18:36:53.323958995 +0800 +@@ -12,6 +12,8 @@ + * See README and COPYING for more details. + */ + ++#include "karma/karma.h" ++ + #include "utils/includes.h" + + #include "utils/common.h" +diff -urN hostapd-1.0.orig//src/ap/ieee802_11.c hostapd-1.0/src/ap/ieee802_11.c +--- hostapd-1.0.orig//src/ap/ieee802_11.c 2012-05-10 05:56:09.000000000 +0800 ++++ hostapd-1.0/src/ap/ieee802_11.c 2012-07-17 18:36:53.324958995 +0800 +@@ -12,6 +12,8 @@ + * See README and COPYING for more details. + */ + ++#include "karma/karma.h" ++ + #include "utils/includes.h" + + #ifndef CONFIG_NATIVE_WINDOWS +@@ -520,8 +522,9 @@ + if (ssid_ie == NULL) + return WLAN_STATUS_UNSPECIFIED_FAILURE; + +- if (ssid_ie_len != hapd->conf->ssid.ssid_len || +- os_memcmp(ssid_ie, hapd->conf->ssid.ssid, ssid_ie_len) != 0) { ++ /* Karma Promiscuous Beacon Response Hack - JoMo-Kun */ ++ if ((!karma_beacon_respond) && (ssid_ie_len != hapd->conf->ssid.ssid_len || ++ os_memcmp(ssid_ie, hapd->conf->ssid.ssid, ssid_ie_len) != 0)) { + char ssid_txt[33]; + ieee802_11_print_ssid(ssid_txt, ssid_ie, ssid_ie_len); + hostapd_logger(hapd, sta->addr, HOSTAPD_MODULE_IEEE80211, +diff -urN hostapd-1.0.orig//src/eap_server/eap_server.c hostapd-1.0/src/eap_server/eap_server.c +--- hostapd-1.0.orig//src/eap_server/eap_server.c 2012-05-10 05:56:09.000000000 +0800 ++++ hostapd-1.0/src/eap_server/eap_server.c 2012-07-17 18:36:53.325959001 +0800 +@@ -18,6 +18,11 @@ + * backend_auth configuration variable to TRUE. + */ + ++#define _GNU_SOURCE ++#include ++ ++#include "karma/karma.h" ++ + #include "includes.h" + + #include "common.h" +@@ -99,24 +104,51 @@ + int eap_user_get(struct eap_sm *sm, const u8 *identity, size_t identity_len, + int phase2) + { +- struct eap_user *user; ++ struct eap_user *user; ++ char *username = NULL; ++ char *message = NULL; ++ ++ eap_user_free(sm->user); ++ sm->user = NULL; + +- if (sm == NULL || sm->eapol_cb == NULL || ++ user = os_zalloc(sizeof(*user)); ++ if (user == NULL) ++ return -1; ++ ++ /* Karma Mode: Accept all requests, regardless of username - JoMo-Kun */ ++ if (karma_eap_auth) ++ { ++ user->methods[0].vendor = sm->respVendor; ++ user->password = os_zalloc(9); ++ strncpy((char *)user->password, "Cricket8", 8); /* Magic password allows successful authentication */ ++ user->password_len = 8; ++ ++ if (phase2) ++ user->methods[0].method = EAP_TYPE_MSCHAPV2; ++ else // TODO: what happens if we propose LEAP? ++ user->methods[0].method = EAP_TYPE_PEAP; ++ ++ username = os_zalloc(sm->identity_len + 1); ++ strncpy(username, (char *)sm->identity, (size_t)sm->identity_len); ++ ++ if (asprintf(&message, "Authentication Request - Username: %s Vendor: %d Method: %d", username, sm->respVendor, sm->respVendorMethod) < 0) ++ printf("Error allocating memory for request message.\n"); ++ ++ karma_logger(0, message); ++ free(message); ++ } ++ else ++ { ++ if (sm == NULL || sm->eapol_cb == NULL || + sm->eapol_cb->get_eap_user == NULL) +- return -1; ++ return -1; + +- eap_user_free(sm->user); +- sm->user = NULL; +- +- user = os_zalloc(sizeof(*user)); +- if (user == NULL) +- return -1; +- +- if (sm->eapol_cb->get_eap_user(sm->eapol_ctx, identity, +- identity_len, phase2, user) != 0) { +- eap_user_free(user); +- return -1; +- } ++ if (sm->eapol_cb->get_eap_user(sm->eapol_ctx, identity, ++ identity_len, phase2, user) != 0) { ++ eap_user_free(user); ++ return -1; ++ } ++ } + + sm->user = user; + sm->user_eap_method_index = 0; +diff -urN hostapd-1.0.orig//src/eap_server/eap_server_mschapv2.c hostapd-1.0/src/eap_server/eap_server_mschapv2.c +--- hostapd-1.0.orig//src/eap_server/eap_server_mschapv2.c 2012-05-10 05:56:09.000000000 +0800 ++++ hostapd-1.0/src/eap_server/eap_server_mschapv2.c 2012-07-17 18:36:53.331959001 +0800 +@@ -12,6 +12,8 @@ + * See README and COPYING for more details. + */ + ++#include "karma/karma.h" ++ + #include "includes.h" + + #include "common.h" +@@ -290,13 +292,15 @@ + struct wpabuf *respData) + { + struct eap_mschapv2_hdr *resp; +- const u8 *pos, *end, *peer_challenge, *nt_response, *name; ++ const u8 *pos, *end, *auth_challenge, *peer_challenge, *nt_response, *name; + u8 flags; + size_t len, name_len, i; + u8 expected[24]; + const u8 *username, *user; + size_t username_len, user_len; + int res; ++ char *auth_creds = NULL; ++ int auth_creds_len = 0; + + pos = eap_hdr_validate(EAP_VENDOR_IETF, EAP_TYPE_MSCHAPV2, respData, + &len); +@@ -336,6 +340,38 @@ + wpa_printf(MSG_MSGDUMP, "EAP-MSCHAPV2: Flags 0x%x", flags); + wpa_hexdump_ascii(MSG_MSGDUMP, "EAP-MSCHAPV2: Name", name, name_len); + ++ /* Karma Mode: Log MSCHAPv2 exchange in John format - JoMo-Kun */ ++ /* user::domain (unused):authenticator challenge:mschapv2 response:peer challenge */ ++ if (karma_eap_auth) ++ { ++ auth_creds_len = sm->identity_len + 3 + 16*2 + 1 + 24*2 + 1 + 16*2; ++ auth_creds = os_malloc(auth_creds_len + 1); ++ memset(auth_creds, 0, auth_creds_len + 1); ++ ++ strncpy(auth_creds, (char *)sm->identity, sm->identity_len); ++ sprintf(auth_creds + sm->identity_len, ":::"); ++ ++ /* Authenticator Challenge */ ++ auth_challenge = data->auth_challenge; ++ for (i=0; i<16; i++) ++ sprintf(auth_creds + sm->identity_len + 3 + 2*i, "%2.2X", 0xFF & (int)auth_challenge[i]); ++ ++ sprintf(auth_creds + sm->identity_len + 3 + 16*2, ":"); ++ ++ /* MSCHAPv2 Response */ ++ for (i=0; i<24; i++) ++ sprintf(auth_creds + sm->identity_len + 3 + 16*2 + 1 + 2*i, "%2.2X", 0xFF & (int)nt_response[i]); ++ ++ sprintf(auth_creds + sm->identity_len + 3 + 16*2 + 1 + 24*2, ":"); ++ ++ /* Peer Challenge */ ++ for (i=0; i<16; i++) ++ sprintf(auth_creds + sm->identity_len + 3 + 16*2 + 1 + 24*2 + 1 + 2*i, "%2.2X", 0xFF & (int)peer_challenge[i]); ++ ++ karma_logger(1, auth_creds); ++ free(auth_creds); ++ } ++ + /* MSCHAPv2 does not include optional domain name in the + * challenge-response calculation, so remove domain prefix + * (if present). */ +diff -urN hostapd-1.0.orig//src/karma/karma.c hostapd-1.0/src/karma/karma.c +--- hostapd-1.0.orig//src/karma/karma.c 1970-01-01 07:30:00.000000000 +0730 ++++ hostapd-1.0/src/karma/karma.c 2012-07-17 18:36:53.332959000 +0800 +@@ -0,0 +1,43 @@ ++#define _GNU_SOURCE ++#include ++#include ++ ++#include "common.h" ++#include "includes.h" ++#include "trace.h" ++ ++#include "karma/karma.h" ++ ++/* Karma Mode: Log data related to MSCHAPv2 challenge/response authentication attempts */ ++extern void karma_logger(int type, char *message) ++{ ++ FILE *logfd; ++ time_t cur_time; ++ struct tm *tm_ptr; ++ char time_buf[256]; ++ /* General: probe requests, username requests */ ++ logfd = fopen("./hostapd-karma.txt", "a"); ++ if (logfd == NULL) { ++ fprintf(stderr, "[karma] Failed to open log file: ./hostapd-karma.txt\n"); ++ logfd = stderr; ++ } ++ ++ time(&cur_time); ++ tm_ptr = localtime(&cur_time); ++ strftime(time_buf, 256, "%Y-%m-%d %H:%M:%S", tm_ptr); ++ fprintf(logfd, "%s: %s\n", time_buf, message); ++ fprintf(stderr, "[karma] %s: %s\n", time_buf, message); ++ fclose(logfd); ++ ++ /* MSCHAPv2 Challenge/Response */ ++ if (type == 1) ++ { ++ logfd = fopen("./hostapd-karma.lc", "a"); ++ if (logfd == NULL) { ++ fprintf(stderr, "[karma] Failed to open log file: ./hostapd-karma.lc\n"); ++ logfd = stderr; ++ } ++ fprintf(logfd, "%s\n", message); ++ fclose(logfd); ++ } ++} +diff -urN hostapd-1.0.orig//src/karma/karma.h hostapd-1.0/src/karma/karma.h +--- hostapd-1.0.orig//src/karma/karma.h 1970-01-01 07:30:00.000000000 +0730 ++++ hostapd-1.0/src/karma/karma.h 2012-07-17 18:36:53.332959000 +0800 +@@ -0,0 +1,3 @@ ++extern int karma_beacon_respond; ++extern int karma_eap_auth; ++extern void karma_logger(int, char*); +diff -urN hostapd-1.0.orig//src/utils/wpa_debug.c hostapd-1.0/src/utils/wpa_debug.c +--- hostapd-1.0.orig//src/utils/wpa_debug.c 2012-05-10 05:56:09.000000000 +0800 ++++ hostapd-1.0/src/utils/wpa_debug.c 2012-07-17 18:36:53.333959000 +0800 +@@ -22,6 +22,8 @@ + static int wpa_debug_syslog = 0; + #endif /* CONFIG_DEBUG_SYSLOG */ + ++/* Karma Mode */ ++#include "karma/karma.h" + + int wpa_debug_level = MSG_INFO; + int wpa_debug_show_keys = 0; -- cgit v1.2.3