[pkg-wpa-devel] r1137 - in /wpasupplicant/trunk: debian/ src/ src/common/ src/drivers/ src/eap_common/ src/eap_peer/ src/eap_server/ src/radius/ src/rsn_supp/ src/wps/ wpa_supplicant/ wpa_supplicant/wpa_gui-qt4/

kelmo-guest at users.alioth.debian.org kelmo-guest at users.alioth.debian.org
Sat Feb 23 03:45:26 UTC 2008


Author: kelmo-guest
Date: Sat Feb 23 03:45:26 2008
New Revision: 1137

URL: http://svn.debian.org/wsvn/pkg-wpa/?sc=1&rev=1137
Log:
* New upstream release.

Removed:
    wpasupplicant/trunk/src/wps/
Modified:
    wpasupplicant/trunk/debian/changelog
    wpasupplicant/trunk/src/Makefile
    wpasupplicant/trunk/src/common/version.h
    wpasupplicant/trunk/src/common/wpa_ctrl.h
    wpasupplicant/trunk/src/drivers/Apple80211.h
    wpasupplicant/trunk/src/drivers/ndis_events.c
    wpasupplicant/trunk/src/eap_common/eap_defs.h
    wpasupplicant/trunk/src/eap_common/eap_tlv_common.h
    wpasupplicant/trunk/src/eap_peer/eap.h
    wpasupplicant/trunk/src/eap_peer/eap_fast.c
    wpasupplicant/trunk/src/eap_peer/eap_ikev2.c
    wpasupplicant/trunk/src/eap_peer/eap_peap.c
    wpasupplicant/trunk/src/eap_peer/eap_tlv.c
    wpasupplicant/trunk/src/eap_peer/eap_tlv.h
    wpasupplicant/trunk/src/eap_server/eap.c
    wpasupplicant/trunk/src/eap_server/eap.h
    wpasupplicant/trunk/src/eap_server/eap_fast.c
    wpasupplicant/trunk/src/eap_server/eap_i.h
    wpasupplicant/trunk/src/eap_server/eap_ikev2.c
    wpasupplicant/trunk/src/eap_server/eap_methods.c
    wpasupplicant/trunk/src/eap_server/eap_peap.c
    wpasupplicant/trunk/src/eap_server/ikev2.c
    wpasupplicant/trunk/src/radius/radius_server.c
    wpasupplicant/trunk/src/radius/radius_server.h
    wpasupplicant/trunk/src/rsn_supp/wpa.c
    wpasupplicant/trunk/wpa_supplicant/ChangeLog
    wpasupplicant/trunk/wpa_supplicant/Makefile
    wpasupplicant/trunk/wpa_supplicant/ctrl_iface_dbus_handlers.c
    wpasupplicant/trunk/wpa_supplicant/events.c
    wpasupplicant/trunk/wpa_supplicant/wpa_gui-qt4/eventhistory.cpp
    wpasupplicant/trunk/wpa_supplicant/wpa_gui-qt4/eventhistory.ui
    wpasupplicant/trunk/wpa_supplicant/wpa_supplicant.c
    wpasupplicant/trunk/wpa_supplicant/wpa_supplicant_i.h

Modified: wpasupplicant/trunk/debian/changelog
URL: http://svn.debian.org/wsvn/pkg-wpa/wpasupplicant/trunk/debian/changelog?rev=1137&op=diff
==============================================================================
--- wpasupplicant/trunk/debian/changelog (original)
+++ wpasupplicant/trunk/debian/changelog Sat Feb 23 03:45:26 2008
@@ -1,5 +1,6 @@
-wpasupplicant (0.6.2+git20080206.g8c0dad4-2) UNRELEASED; urgency=low
-
+wpasupplicant (0.6.3-1) UNRELEASED; urgency=low
+
+  * New upstream release.
   * Tidy up the clean target of debian/rules. Now that the madwifi headers are
     handled differently we no longer need to do any cleanup.
   * Add patch to fix sending of ie data through D-Bus interface.
@@ -14,7 +15,7 @@
     or wireless-tools, nor does it recommend dhcp3-client. These are not
     needed.
 
- -- Kel Modderman <kel at otaku42.de>  Fri, 15 Feb 2008 09:51:52 +1000
+ -- Kel Modderman <kel at otaku42.de>  Sat, 23 Feb 2008 13:45:00 +1000
 
 wpasupplicant (0.6.2+git20080206.g8c0dad4-1) unstable; urgency=low
 

Modified: wpasupplicant/trunk/src/Makefile
URL: http://svn.debian.org/wsvn/pkg-wpa/wpasupplicant/trunk/src/Makefile?rev=1137&op=diff
==============================================================================
--- wpasupplicant/trunk/src/Makefile (original)
+++ wpasupplicant/trunk/src/Makefile Sat Feb 23 03:45:26 2008
@@ -1,4 +1,4 @@
-SUBDIRS=common crypto drivers hlr_auc_gw eapol_supp eap_common eap_peer eap_server l2_packet radius rsn_supp tls utils wps
+SUBDIRS=common crypto drivers hlr_auc_gw eapol_supp eap_common eap_peer eap_server l2_packet radius rsn_supp tls utils
 
 all:
 	@echo Nothing to be made.

Modified: wpasupplicant/trunk/src/common/version.h
URL: http://svn.debian.org/wsvn/pkg-wpa/wpasupplicant/trunk/src/common/version.h?rev=1137&op=diff
==============================================================================
--- wpasupplicant/trunk/src/common/version.h (original)
+++ wpasupplicant/trunk/src/common/version.h Sat Feb 23 03:45:26 2008
@@ -1,6 +1,6 @@
 #ifndef VERSION_H
 #define VERSION_H
 
-#define VERSION_STR "0.6.2"
+#define VERSION_STR "0.6.3"
 
 #endif /* VERSION_H */

Modified: wpasupplicant/trunk/src/common/wpa_ctrl.h
URL: http://svn.debian.org/wsvn/pkg-wpa/wpasupplicant/trunk/src/common/wpa_ctrl.h?rev=1137&op=diff
==============================================================================
--- wpasupplicant/trunk/src/common/wpa_ctrl.h (original)
+++ wpasupplicant/trunk/src/common/wpa_ctrl.h Sat Feb 23 03:45:26 2008
@@ -48,11 +48,6 @@
 #define WPA_EVENT_EAP_FAILURE "CTRL-EVENT-EAP-FAILURE "
 /** New scan results available */
 #define WPA_EVENT_SCAN_RESULTS "CTRL-EVENT-SCAN-RESULTS "
-
-
-/* hostapd control interface - fixed message prefixes */
-#define WPS_EVENT_PIN_NEEDED "WPS-PIN-NEEDED "
-#define WPS_EVENT_NEW_AP_SETTINGS "WPS-NEW-AP-SETTINGS "
 
 
 /* wpa_supplicant/hostapd control interface access */

Modified: wpasupplicant/trunk/src/drivers/Apple80211.h
URL: http://svn.debian.org/wsvn/pkg-wpa/wpasupplicant/trunk/src/drivers/Apple80211.h?rev=1137&op=diff
==============================================================================
--- wpasupplicant/trunk/src/drivers/Apple80211.h (original)
+++ wpasupplicant/trunk/src/drivers/Apple80211.h Sat Feb 23 03:45:26 2008
@@ -105,13 +105,11 @@
  * channel: CFNumber(kCFNumberSInt32Type)
  * signal: CFNumber(kCFNumberSInt32Type)
  * appleIE: CFData
- * WPSNOPINRequired: CFBoolean
  * noise: CFNumber(kCFNumberSInt32Type)
  * capability: CFNumber(kCFNumberSInt32Type)
  * uniCipher: CFArray of CFNumber(kCFNumberSInt32Type)
  * appleIE_Version: CFNumber(kCFNumberSInt32Type)
  * appleIE_Robust: CFBoolean
- * WPSConfigured: CFBoolean
  * scanWasDirected: CFBoolean
  * appleIE_Product: CFNumber(kCFNumberSInt32Type)
  * authModes: CFArray of CFNumber(kCFNumberSInt32Type)

Modified: wpasupplicant/trunk/src/drivers/ndis_events.c
URL: http://svn.debian.org/wsvn/pkg-wpa/wpasupplicant/trunk/src/drivers/ndis_events.c?rev=1137&op=diff
==============================================================================
--- wpasupplicant/trunk/src/drivers/ndis_events.c (original)
+++ wpasupplicant/trunk/src/drivers/ndis_events.c Sat Feb 23 03:45:26 2008
@@ -40,6 +40,80 @@
 	char *ifname; /* {GUID..} */
 	WCHAR *adapter_desc;
 };
+
+#define BstrAlloc(x) (x) ? SysAllocString(x) : NULL
+#define BstrFree(x) if (x) SysFreeString(x)
+
+/* WBEM / WMI wrapper functions, to perform in-place conversion of WCHARs to
+ * BSTRs */
+HRESULT STDMETHODCALLTYPE call_IWbemServices_ExecQuery(
+	IWbemServices *pSvc, LPCWSTR strQueryLanguage, LPCWSTR strQuery,
+	long lFlags, IWbemContext *pCtx, IEnumWbemClassObject **ppEnum)
+{
+	BSTR bsQueryLanguage, bsQuery;
+	HRESULT hr;
+
+	bsQueryLanguage = BstrAlloc(strQueryLanguage);
+	bsQuery = BstrAlloc(strQuery);
+
+	hr = IWbemServices_ExecQuery(pSvc, bsQueryLanguage, bsQuery, lFlags,
+				     pCtx, ppEnum);
+
+	BstrFree(bsQueryLanguage);
+	BstrFree(bsQuery);
+
+	return hr;
+}
+
+
+HRESULT STDMETHODCALLTYPE call_IWbemServices_ExecNotificationQueryAsync(
+	IWbemServices *pSvc, LPCWSTR strQueryLanguage, LPCWSTR strQuery,
+	long lFlags, IWbemContext *pCtx, IWbemObjectSink *pResponseHandler)
+{
+	BSTR bsQueryLanguage, bsQuery;
+	HRESULT hr;
+
+	bsQueryLanguage = BstrAlloc(strQueryLanguage);
+	bsQuery = BstrAlloc(strQuery);
+
+	hr = IWbemServices_ExecNotificationQueryAsync(pSvc, bsQueryLanguage,
+						      bsQuery, lFlags, pCtx,
+						      pResponseHandler);
+
+	BstrFree(bsQueryLanguage);
+	BstrFree(bsQuery);
+
+	return hr;
+}
+
+
+HRESULT STDMETHODCALLTYPE call_IWbemLocator_ConnectServer(
+	IWbemLocator *pLoc, LPCWSTR strNetworkResource, LPCWSTR strUser,
+	LPCWSTR strPassword, LPCWSTR strLocale, long lSecurityFlags,
+	LPCWSTR strAuthority, IWbemContext *pCtx, IWbemServices **ppNamespace)
+{
+	BSTR bsNetworkResource, bsUser, bsPassword, bsLocale, bsAuthority;
+	HRESULT hr;
+
+	bsNetworkResource = BstrAlloc(strNetworkResource);
+	bsUser = BstrAlloc(strUser);
+	bsPassword = BstrAlloc(strPassword);
+	bsLocale = BstrAlloc(strLocale);
+	bsAuthority = BstrAlloc(strAuthority);
+
+	hr = IWbemLocator_ConnectServer(pLoc, bsNetworkResource, bsUser,
+					bsPassword, bsLocale, lSecurityFlags,
+					bsAuthority, pCtx, ppNamespace);
+
+	BstrFree(bsNetworkResource);
+	BstrFree(bsUser);
+	BstrFree(bsPassword);
+	BstrFree(bsLocale);
+	BstrFree(bsAuthority);
+
+	return hr;
+}
+
 
 enum event_types { EVENT_CONNECT, EVENT_DISCONNECT, EVENT_MEDIA_SPECIFIC,
 		   EVENT_ADAPTER_ARRIVAL, EVENT_ADAPTER_REMOVAL };
@@ -332,8 +406,8 @@
 	_snwprintf(query, 256,
 		  L"SELECT * FROM %S", class_name);
 	wpa_printf(MSG_DEBUG, "ndis_events: WMI: %S", query);
-	hr = IWbemServices_ExecNotificationQueryAsync(pSvc, L"WQL", query, 0,
-						      0, pDestSink);
+	hr = call_IWbemServices_ExecNotificationQueryAsync(
+		pSvc, L"WQL", query, 0, 0, pDestSink);
 	if (FAILED(hr)) {
 		wpa_printf(MSG_DEBUG, "ExecNotificationQueryAsync for %s "
 			   "failed with hresult of 0x%x",
@@ -434,8 +508,8 @@
 	os_free(events->adapter_desc);
 	events->adapter_desc = NULL;
 
-	hr = IWbemLocator_ConnectServer(events->pLoc, L"ROOT\\CIMV2", NULL,
-					NULL, 0, 0, 0, 0, &pSvc);
+	hr = call_IWbemLocator_ConnectServer(
+		events->pLoc, L"ROOT\\CIMV2", NULL, NULL, 0, 0, 0, 0, &pSvc);
 	if (FAILED(hr)) {
 		wpa_printf(MSG_ERROR, "ndis_events: Could not connect to WMI "
 			   "server (ROOT\\CIMV2) - error 0x%x", (int) hr);
@@ -448,10 +522,10 @@
 		  L"WHERE SettingID='%S'", ifname);
 	wpa_printf(MSG_DEBUG, "ndis_events: WMI: %S", query);
 
-	hr = IWbemServices_ExecQuery(pSvc, L"WQL", query,
-				     WBEM_FLAG_FORWARD_ONLY |
-				     WBEM_FLAG_RETURN_IMMEDIATELY,
-				     NULL, &pEnumerator);
+	hr = call_IWbemServices_ExecQuery(
+		pSvc, L"WQL", query,
+		WBEM_FLAG_FORWARD_ONLY | WBEM_FLAG_RETURN_IMMEDIATELY,
+		NULL, &pEnumerator);
 	if (!SUCCEEDED(hr)) {
 		wpa_printf(MSG_DEBUG, "ndis_events: Failed to query interface "
 			   "GUID from Win32_NetworkAdapterConfiguration: "
@@ -491,10 +565,10 @@
 	VariantClear(&vt);
 	IWbemClassObject_Release(pObj);
 
-	hr = IWbemServices_ExecQuery(pSvc, L"WQL", query,
-				     WBEM_FLAG_FORWARD_ONLY |
-				     WBEM_FLAG_RETURN_IMMEDIATELY,
-				     NULL, &pEnumerator);
+	hr = call_IWbemServices_ExecQuery(
+		pSvc, L"WQL", query,
+		WBEM_FLAG_FORWARD_ONLY | WBEM_FLAG_RETURN_IMMEDIATELY,
+		NULL, &pEnumerator);
 	if (!SUCCEEDED(hr)) {
 		wpa_printf(MSG_DEBUG, "ndis_events: Failed to query interface "
 			   "from Win32_NetworkAdapter: 0x%x", (int) hr);
@@ -575,10 +649,10 @@
 	IWbemClassObject_Release(pObj);
 	wpa_printf(MSG_DEBUG, "ndis_events: WMI: %S", query);
 
-	hr = IWbemServices_ExecQuery(pSvc, L"WQL", query,
-				     WBEM_FLAG_FORWARD_ONLY |
-				     WBEM_FLAG_RETURN_IMMEDIATELY,
-				     NULL, &pEnumerator);
+	hr = call_IWbemServices_ExecQuery(
+		pSvc, L"WQL", query,
+		WBEM_FLAG_FORWARD_ONLY | WBEM_FLAG_RETURN_IMMEDIATELY,
+		NULL, &pEnumerator);
 	if (!SUCCEEDED(hr)) {
 		wpa_printf(MSG_DEBUG, "ndis_events: Failed to query interface "
 			   "Name from Win32_PnPEntity: 0x%x", (int) hr);
@@ -695,8 +769,9 @@
 	wpa_printf(MSG_DEBUG, "ndis_events: use adapter descriptor '%S'",
 		   events->adapter_desc);
 
-	hr = IWbemLocator_ConnectServer(events->pLoc, L"ROOT\\WMI", NULL, NULL,
-					0, 0, 0, 0, &events->pSvc);
+	hr = call_IWbemLocator_ConnectServer(
+		events->pLoc, L"ROOT\\WMI", NULL, NULL,
+		0, 0, 0, 0, &events->pSvc);
 	if (FAILED(hr)) {
 		wpa_printf(MSG_ERROR, "Could not connect to server - error "
 			   "0x%x", (int) hr);

Modified: wpasupplicant/trunk/src/eap_common/eap_defs.h
URL: http://svn.debian.org/wsvn/pkg-wpa/wpasupplicant/trunk/src/eap_common/eap_defs.h?rev=1137&op=diff
==============================================================================
--- wpasupplicant/trunk/src/eap_common/eap_defs.h (original)
+++ wpasupplicant/trunk/src/eap_common/eap_defs.h Sat Feb 23 03:45:26 2008
@@ -65,7 +65,7 @@
 	EAP_TYPE_PAX = 46 /* RFC 4746 */,
 	EAP_TYPE_PSK = 47 /* RFC 4764 */,
 	EAP_TYPE_SAKE = 48 /* RFC 4763 */,
-	EAP_TYPE_IKEV2 = 49 /* draft-tschofenig-eap-ikev2-15.txt */,
+	EAP_TYPE_IKEV2 = 49 /* RFC 5106 */,
 	EAP_TYPE_EXPANDED = 254 /* RFC 3748 */,
 	EAP_TYPE_GPSK = 255 /* EXPERIMENTAL - type not yet allocated
 			     * draft-ietf-emu-eap-gpsk-01.txt */

Modified: wpasupplicant/trunk/src/eap_common/eap_tlv_common.h
URL: http://svn.debian.org/wsvn/pkg-wpa/wpasupplicant/trunk/src/eap_common/eap_tlv_common.h?rev=1137&op=diff
==============================================================================
--- wpasupplicant/trunk/src/eap_common/eap_tlv_common.h (original)
+++ wpasupplicant/trunk/src/eap_common/eap_tlv_common.h Sat Feb 23 03:45:26 2008
@@ -1,6 +1,6 @@
 /*
- * EAP-TLV definitions (draft-josefsson-pppext-eap-tls-eap-07.txt)
- * Copyright (c) 2004-2007, Jouni Malinen <j at w1.fi>
+ * EAP-TLV definitions (draft-josefsson-pppext-eap-tls-eap-10.txt)
+ * Copyright (c) 2004-2008, Jouni Malinen <j at w1.fi>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License version 2 as
@@ -15,11 +15,10 @@
 #ifndef EAP_TLV_COMMON_H
 #define EAP_TLV_COMMON_H
 
-/* EAP-TLV TLVs (draft-josefsson-ppext-eap-tls-eap-07.txt) */
+/* EAP-TLV TLVs (draft-josefsson-ppext-eap-tls-eap-10.txt) */
 #define EAP_TLV_RESULT_TLV 3 /* Acknowledged Result */
 #define EAP_TLV_NAK_TLV 4
-/* Note: RFC 4851, Section 4.2.4 defines 5 as Error TLV */
-#define EAP_TLV_CRYPTO_BINDING_TLV 5
+#define EAP_TLV_ERROR_CODE_TLV 5
 #define EAP_TLV_CONNECTION_BINDING_TLV 6
 #define EAP_TLV_VENDOR_SPECIFIC_TLV 7
 #define EAP_TLV_URI_TLV 8
@@ -27,17 +26,21 @@
 #define EAP_TLV_INTERMEDIATE_RESULT_TLV 10
 #define EAP_TLV_PAC_TLV 11 /* draft-cam-winget-eap-fast-provisioning-04.txt,
 			    * Section 4.2 */
-#define EAP_TLV_CRYPTO_BINDING_TLV_ 12 /* RFC 4851, Section 4.2.8 */
-/* draft-cam-winget-eap-fast-provisiong-04.txt, Section 4.3.1 */
+#define EAP_TLV_CRYPTO_BINDING_TLV 12
+#define EAP_TLV_CALLING_STATION_ID_TLV 13
+#define EAP_TLV_CALLED_STATION_ID_TLV 14
+#define EAP_TLV_NAS_PORT_TYPE_TLV 15
+#define EAP_TLV_SERVER_IDENTIFIER_TLV 16
+#define EAP_TLV_IDENTITY_TYPE_TLV 17
 #define EAP_TLV_SERVER_TRUSTED_ROOT_TLV 18
-#define EAP_TLV_REQUEST_ACTION_TLV 19 /* RFC 4851, Section 4.2.9 */
-/* draft-cam-winget-eap-fast-provisiong-04.txt, Section 4.3.2 */
+#define EAP_TLV_REQUEST_ACTION_TLV 19
 #define EAP_TLV_PKCS7_TLV 20
 
 #define EAP_TLV_RESULT_SUCCESS 1
 #define EAP_TLV_RESULT_FAILURE 2
 
 #define EAP_TLV_TYPE_MANDATORY 0x8000
+#define EAP_TLV_TYPE_MASK 0x3fff
 
 #ifdef _MSC_VER
 #pragma pack(push, 1)

Modified: wpasupplicant/trunk/src/eap_peer/eap.h
URL: http://svn.debian.org/wsvn/pkg-wpa/wpasupplicant/trunk/src/eap_peer/eap.h?rev=1137&op=diff
==============================================================================
--- wpasupplicant/trunk/src/eap_peer/eap.h (original)
+++ wpasupplicant/trunk/src/eap_peer/eap.h Sat Feb 23 03:45:26 2008
@@ -248,7 +248,7 @@
 	/**
 	 * mac_addr - MAC address of the peer
 	 *
-	 * This is only used by EAP-WSC and can be left %NULL if not available.
+	 * This can be left %NULL if not available.
 	 */
 	const u8 *mac_addr;
 };

Modified: wpasupplicant/trunk/src/eap_peer/eap_fast.c
URL: http://svn.debian.org/wsvn/pkg-wpa/wpasupplicant/trunk/src/eap_peer/eap_fast.c?rev=1137&op=diff
==============================================================================
--- wpasupplicant/trunk/src/eap_peer/eap_fast.c (original)
+++ wpasupplicant/trunk/src/eap_peer/eap_fast.c Sat Feb 23 03:45:26 2008
@@ -691,7 +691,7 @@
 	struct eap_tlv_crypto_binding__tlv *_bind, const u8 *cmk)
 {
 	rbind->tlv_type = host_to_be16(EAP_TLV_TYPE_MANDATORY |
-				       EAP_TLV_CRYPTO_BINDING_TLV_);
+				       EAP_TLV_CRYPTO_BINDING_TLV);
 	rbind->length = host_to_be16(sizeof(*rbind) -
 				     sizeof(struct eap_tlv_hdr));
 	rbind->version = EAP_FAST_VERSION;
@@ -1230,7 +1230,7 @@
 			   tlv->iresult == EAP_TLV_RESULT_SUCCESS ?
 			   "Success" : "Failure");
 		break;
-	case EAP_TLV_CRYPTO_BINDING_TLV_:
+	case EAP_TLV_CRYPTO_BINDING_TLV:
 		wpa_hexdump(MSG_MSGDUMP, "EAP-FAST: Crypto-Binding TLV",
 			    pos, len);
 		tlv->crypto_binding_len = sizeof(struct eap_tlv_hdr) + len;

Modified: wpasupplicant/trunk/src/eap_peer/eap_ikev2.c
URL: http://svn.debian.org/wsvn/pkg-wpa/wpasupplicant/trunk/src/eap_peer/eap_ikev2.c?rev=1137&op=diff
==============================================================================
--- wpasupplicant/trunk/src/eap_peer/eap_ikev2.c (original)
+++ wpasupplicant/trunk/src/eap_peer/eap_ikev2.c Sat Feb 23 03:45:26 2008
@@ -1,5 +1,5 @@
 /*
- * EAP-IKEv2 peer (draft-tschofenig-eap-ikev2-15.txt)
+ * EAP-IKEv2 peer (RFC 5106)
  * Copyright (c) 2007, Jouni Malinen <j at w1.fi>
  *
  * This program is free software; you can redistribute it and/or modify

Modified: wpasupplicant/trunk/src/eap_peer/eap_peap.c
URL: http://svn.debian.org/wsvn/pkg-wpa/wpasupplicant/trunk/src/eap_peer/eap_peap.c?rev=1137&op=diff
==============================================================================
--- wpasupplicant/trunk/src/eap_peer/eap_peap.c (original)
+++ wpasupplicant/trunk/src/eap_peer/eap_peap.c Sat Feb 23 03:45:26 2008
@@ -1,5 +1,5 @@
 /*
- * EAP peer method: EAP-PEAP (draft-josefsson-pppext-eap-tls-eap-07.txt)
+ * EAP peer method: EAP-PEAP (draft-josefsson-pppext-eap-tls-eap-10.txt)
  * Copyright (c) 2004-2008, Jouni Malinen <j at w1.fi>
  *
  * This program is free software; you can redistribute it and/or modify
@@ -25,7 +25,7 @@
 /* Maximum supported PEAP version
  * 0 = Microsoft's PEAP version 0; draft-kamath-pppext-peapv0-00.txt
  * 1 = draft-josefsson-ppext-eap-tls-eap-05.txt
- * 2 = draft-josefsson-ppext-eap-tls-eap-07.txt
+ * 2 = draft-josefsson-ppext-eap-tls-eap-10.txt
  */
 #define EAP_PEAP_VERSION 1
 
@@ -41,6 +41,8 @@
 	const struct eap_method *phase2_method;
 	void *phase2_priv;
 	int phase2_success;
+	int phase2_eap_success;
+	int phase2_eap_started;
 
 	struct eap_method_type phase2_type;
 	struct eap_method_type *phase2_types;
@@ -152,6 +154,33 @@
 }
 
 
+static struct wpabuf * eap_peapv2_tlv_eap_payload(struct wpabuf *buf)
+{
+	struct wpabuf *e;
+	struct eap_tlv_hdr *tlv;
+
+	if (buf == NULL)
+		return NULL;
+
+	/* Encapsulate EAP packet in EAP-Payload TLV */
+	wpa_printf(MSG_DEBUG, "EAP-PEAPv2: Add EAP-Payload TLV");
+	e = wpabuf_alloc(sizeof(*tlv) + wpabuf_len(buf));
+	if (e == NULL) {
+		wpa_printf(MSG_DEBUG, "EAP-PEAPv2: Failed to allocate memory "
+			   "for TLV encapsulation");
+		wpabuf_free(buf);
+		return NULL;
+	}
+	tlv = wpabuf_put(e, sizeof(*tlv));
+	tlv->tlv_type = host_to_be16(EAP_TLV_TYPE_MANDATORY |
+				     EAP_TLV_EAP_PAYLOAD_TLV);
+	tlv->length = host_to_be16(wpabuf_len(buf));
+	wpabuf_put_buf(e, buf);
+	wpabuf_free(buf);
+	return e;
+}
+
+
 static int eap_peap_phase2_request(struct eap_sm *sm,
 				   struct eap_peap_data *data,
 				   struct eap_method_ret *ret,
@@ -177,7 +206,9 @@
 		break;
 	case EAP_TYPE_TLV:
 		os_memset(&iret, 0, sizeof(iret));
-		if (eap_tlv_process(sm, &iret, req, resp)) {
+		if (eap_tlv_process(sm, &iret, req, resp,
+				    data->phase2_eap_started &&
+				    !data->phase2_eap_success)) {
 			ret->methodState = METHOD_DONE;
 			ret->decision = DECISION_FAIL;
 			return -1;
@@ -237,6 +268,7 @@
 			ret->decision = DECISION_FAIL;
 			return -1;
 		}
+		data->phase2_eap_started = 1;
 		os_memset(&iret, 0, sizeof(iret));
 		*resp = data->phase2_method->process(sm, data->phase2_priv,
 						     &iret, req);
@@ -244,6 +276,7 @@
 		     iret.methodState == METHOD_MAY_CONT) &&
 		    (iret.decision == DECISION_UNCOND_SUCC ||
 		     iret.decision == DECISION_COND_SUCC)) {
+			data->phase2_eap_success = 1;
 			data->phase2_success = 1;
 		}
 		break;
@@ -344,6 +377,50 @@
 		wpabuf_free(in_decrypted);
 		in_decrypted = nmsg;
 	}
+
+	if (data->peap_version >= 2) {
+		struct eap_tlv_hdr *tlv;
+		struct wpabuf *nmsg;
+
+		if (wpabuf_len(in_decrypted) < sizeof(*tlv) + sizeof(*hdr)) {
+			wpa_printf(MSG_INFO, "EAP-PEAPv2: Too short Phase 2 "
+				   "EAP TLV");
+			wpabuf_free(in_decrypted);
+			return 0;
+		}
+		tlv = wpabuf_mhead(in_decrypted);
+		if ((be_to_host16(tlv->tlv_type) & 0x3fff) !=
+		    EAP_TLV_EAP_PAYLOAD_TLV) {
+			wpa_printf(MSG_INFO, "EAP-PEAPv2: Not an EAP TLV");
+			wpabuf_free(in_decrypted);
+			return 0;
+		}
+		if (sizeof(*tlv) + be_to_host16(tlv->length) >
+		    wpabuf_len(in_decrypted)) {
+			wpa_printf(MSG_INFO, "EAP-PEAPv2: Invalid EAP TLV "
+				   "length");
+			wpabuf_free(in_decrypted);
+			return 0;
+		}
+		hdr = (struct eap_hdr *) (tlv + 1);
+		if (be_to_host16(hdr->length) > be_to_host16(tlv->length)) {
+			wpa_printf(MSG_INFO, "EAP-PEAPv2: No room for full "
+				   "EAP packet in EAP TLV");
+			wpabuf_free(in_decrypted);
+			return 0;
+		}
+
+		nmsg = wpabuf_alloc(be_to_host16(hdr->length));
+		if (nmsg == NULL) {
+			wpabuf_free(in_decrypted);
+			return 0;
+		}
+
+		wpabuf_put_data(nmsg, hdr, be_to_host16(hdr->length));
+		wpabuf_free(in_decrypted);
+		in_decrypted = nmsg;
+	}
+
 	hdr = wpabuf_mhead(in_decrypted);
 	if (wpabuf_len(in_decrypted) < sizeof(*hdr)) {
 		wpa_printf(MSG_INFO, "EAP-PEAP: Too short Phase 2 "
@@ -387,6 +464,17 @@
 			/* EAP-Success within TLS tunnel is used to indicate
 			 * shutdown of the TLS channel. The authentication has
 			 * been completed. */
+			if (data->phase2_eap_started &&
+			    !data->phase2_eap_success) {
+				wpa_printf(MSG_DEBUG, "EAP-PEAP: Phase 2 "
+					   "Success used to indicate success, "
+					   "but Phase 2 EAP was not yet "
+					   "completed successfully");
+				ret->methodState = METHOD_DONE;
+				ret->decision = DECISION_FAIL;
+				wpabuf_free(in_decrypted);
+				return 0;
+			}
 			wpa_printf(MSG_DEBUG, "EAP-PEAP: Version 1 - "
 				   "EAP-Success within TLS tunnel - "
 				   "authentication completed");
@@ -449,6 +537,11 @@
 		wpa_hexdump_buf_key(MSG_DEBUG,
 				    "EAP-PEAP: Encrypting Phase 2 data", resp);
 		/* PEAP version changes */
+		if (data->peap_version >= 2) {
+			resp = eap_peapv2_tlv_eap_payload(resp);
+			if (resp == NULL)
+				return -1;
+		}
 		if (wpabuf_len(resp) >= 5 &&
 		    wpabuf_head_u8(resp)[0] == EAP_CODE_RESPONSE &&
 		    eap_get_type(resp) == EAP_TYPE_TLV)
@@ -636,6 +729,8 @@
 	    data->phase2_method->init_for_reauth)
 		data->phase2_method->init_for_reauth(sm, data->phase2_priv);
 	data->phase2_success = 0;
+	data->phase2_eap_success = 0;
+	data->phase2_eap_started = 0;
 	data->resuming = 1;
 	sm->peap_done = FALSE;
 	return priv;

Modified: wpasupplicant/trunk/src/eap_peer/eap_tlv.c
URL: http://svn.debian.org/wsvn/pkg-wpa/wpasupplicant/trunk/src/eap_peer/eap_tlv.c?rev=1137&op=diff
==============================================================================
--- wpasupplicant/trunk/src/eap_peer/eap_tlv.c (original)
+++ wpasupplicant/trunk/src/eap_peer/eap_tlv.c Sat Feb 23 03:45:26 2008
@@ -1,6 +1,6 @@
 /*
  * EAP peer method: EAP-TLV (draft-josefsson-pppext-eap-tls-eap-07.txt)
- * Copyright (c) 2004-2006, Jouni Malinen <j at w1.fi>
+ * Copyright (c) 2004-2008, Jouni Malinen <j at w1.fi>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License version 2 as
@@ -85,10 +85,12 @@
  * field should be initialized to %NULL before the call. The value will be
  * updated if a response message is generated. The caller is responsible for
  * freeing the allocated message.
+ * @force_failure: Force negotiation to fail
  * Returns: 0 on success, -1 on failure
  */
 int eap_tlv_process(struct eap_sm *sm, struct eap_method_ret *ret,
-		    const struct wpabuf *req, struct wpabuf **resp)
+		    const struct wpabuf *req, struct wpabuf **resp,
+		    int force_failure)
 {
 	size_t left, tlv_len;
 	const u8 *pos;
@@ -159,8 +161,15 @@
 		if (status == EAP_TLV_RESULT_SUCCESS) {
 			wpa_printf(MSG_INFO, "EAP-TLV: TLV Result - Success "
 				   "- EAP-TLV/Phase2 Completed");
-			resp_status = EAP_TLV_RESULT_SUCCESS;
-			ret->decision = DECISION_UNCOND_SUCC;
+			if (force_failure) {
+				wpa_printf(MSG_INFO, "EAP-TLV: Earlier failure"
+					   " - force failed Phase 2");
+				resp_status = EAP_TLV_RESULT_FAILURE;
+				ret->decision = DECISION_FAIL;
+			} else {
+				resp_status = EAP_TLV_RESULT_SUCCESS;
+				ret->decision = DECISION_UNCOND_SUCC;
+			}
 		} else if (status == EAP_TLV_RESULT_FAILURE) {
 			wpa_printf(MSG_INFO, "EAP-TLV: TLV Result - Failure");
 			resp_status = EAP_TLV_RESULT_FAILURE;

Modified: wpasupplicant/trunk/src/eap_peer/eap_tlv.h
URL: http://svn.debian.org/wsvn/pkg-wpa/wpasupplicant/trunk/src/eap_peer/eap_tlv.h?rev=1137&op=diff
==============================================================================
--- wpasupplicant/trunk/src/eap_peer/eap_tlv.h (original)
+++ wpasupplicant/trunk/src/eap_peer/eap_tlv.h Sat Feb 23 03:45:26 2008
@@ -1,6 +1,6 @@
 /*
  * EAP peer method: EAP-TLV (draft-josefsson-pppext-eap-tls-eap-07.txt)
- * Copyright (c) 2004-2007, Jouni Malinen <j at w1.fi>
+ * Copyright (c) 2004-2008, Jouni Malinen <j at w1.fi>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License version 2 as
@@ -20,6 +20,7 @@
 struct wpabuf * eap_tlv_build_nak(int id, u16 nak_type);
 struct wpabuf * eap_tlv_build_result(int id, u16 status);
 int eap_tlv_process(struct eap_sm *sm, struct eap_method_ret *ret,
-		    const struct wpabuf *req, struct wpabuf **resp);
+		    const struct wpabuf *req, struct wpabuf **resp,
+		    int force_failure);
 
 #endif /* EAP_TLV_H */

Modified: wpasupplicant/trunk/src/eap_server/eap.c
URL: http://svn.debian.org/wsvn/pkg-wpa/wpasupplicant/trunk/src/eap_server/eap.c?rev=1137&op=diff
==============================================================================
--- wpasupplicant/trunk/src/eap_server/eap.c (original)
+++ wpasupplicant/trunk/src/eap_server/eap.c Sat Feb 23 03:45:26 2008
@@ -1154,7 +1154,6 @@
 	if (conf->eap_fast_a_id)
 		sm->eap_fast_a_id = os_strdup(conf->eap_fast_a_id);
 	sm->eap_sim_aka_result_ind = conf->eap_sim_aka_result_ind;
-	sm->wps = conf->wps;
 
 	wpa_printf(MSG_DEBUG, "EAP: Server state machine created");
 

Modified: wpasupplicant/trunk/src/eap_server/eap.h
URL: http://svn.debian.org/wsvn/pkg-wpa/wpasupplicant/trunk/src/eap_server/eap.h?rev=1137&op=diff
==============================================================================
--- wpasupplicant/trunk/src/eap_server/eap.h (original)
+++ wpasupplicant/trunk/src/eap_server/eap.h Sat Feb 23 03:45:26 2008
@@ -97,7 +97,6 @@
 	u8 *pac_opaque_encr_key;
 	char *eap_fast_a_id;
 	int eap_sim_aka_result_ind;
-	struct wps_context *wps;
 };
 
 

Modified: wpasupplicant/trunk/src/eap_server/eap_fast.c
URL: http://svn.debian.org/wsvn/pkg-wpa/wpasupplicant/trunk/src/eap_server/eap_fast.c?rev=1137&op=diff
==============================================================================
--- wpasupplicant/trunk/src/eap_server/eap_fast.c (original)
+++ wpasupplicant/trunk/src/eap_server/eap_fast.c Sat Feb 23 03:45:26 2008
@@ -711,7 +711,7 @@
 	/* Crypto-Binding TLV */
 	binding = wpabuf_put(buf, sizeof(*binding));
 	binding->tlv_type = host_to_be16(EAP_TLV_TYPE_MANDATORY |
-					 EAP_TLV_CRYPTO_BINDING_TLV_);
+					 EAP_TLV_CRYPTO_BINDING_TLV);
 	binding->length = host_to_be16(sizeof(*binding) -
 				       sizeof(struct eap_tlv_hdr));
 	binding->version = EAP_FAST_VERSION;
@@ -1165,7 +1165,7 @@
 			   tlv->iresult == EAP_TLV_RESULT_SUCCESS ?
 			   "Success" : "Failure");
 		break;
-	case EAP_TLV_CRYPTO_BINDING_TLV_:
+	case EAP_TLV_CRYPTO_BINDING_TLV:
 		wpa_hexdump(MSG_MSGDUMP, "EAP-FAST: Crypto-Binding TLV",
 			    pos, len);
 		if (tlv->crypto_binding) {

Modified: wpasupplicant/trunk/src/eap_server/eap_i.h
URL: http://svn.debian.org/wsvn/pkg-wpa/wpasupplicant/trunk/src/eap_server/eap_i.h?rev=1137&op=diff
==============================================================================
--- wpasupplicant/trunk/src/eap_server/eap_i.h (original)
+++ wpasupplicant/trunk/src/eap_server/eap_i.h Sat Feb 23 03:45:26 2008
@@ -172,7 +172,6 @@
 	u8 *pac_opaque_encr_key;
 	char *eap_fast_a_id;
 	int eap_sim_aka_result_ind;
-	struct wps_context *wps;
 };
 
 int eap_user_get(struct eap_sm *sm, const u8 *identity, size_t identity_len,

Modified: wpasupplicant/trunk/src/eap_server/eap_ikev2.c
URL: http://svn.debian.org/wsvn/pkg-wpa/wpasupplicant/trunk/src/eap_server/eap_ikev2.c?rev=1137&op=diff
==============================================================================
--- wpasupplicant/trunk/src/eap_server/eap_ikev2.c (original)
+++ wpasupplicant/trunk/src/eap_server/eap_ikev2.c Sat Feb 23 03:45:26 2008
@@ -1,5 +1,5 @@
 /*
- * EAP-IKEv2 server (draft-tschofenig-eap-ikev2-15.txt)
+ * EAP-IKEv2 server (RFC 5106)
  * Copyright (c) 2007, Jouni Malinen <j at w1.fi>
  *
  * This program is free software; you can redistribute it and/or modify

Modified: wpasupplicant/trunk/src/eap_server/eap_methods.c
URL: http://svn.debian.org/wsvn/pkg-wpa/wpasupplicant/trunk/src/eap_server/eap_methods.c?rev=1137&op=diff
==============================================================================
--- wpasupplicant/trunk/src/eap_server/eap_methods.c (original)
+++ wpasupplicant/trunk/src/eap_server/eap_methods.c Sat Feb 23 03:45:26 2008
@@ -254,13 +254,6 @@
 	}
 #endif /* EAP_FAST */
 
-#ifdef EAP_WSC
-	if (ret == 0) {
-		int eap_server_wsc_register(void);
-		ret = eap_server_wsc_register();
-	}
-#endif /* EAP_WSC */
-
 #ifdef EAP_IKEV2
 	if (ret == 0) {
 		int eap_server_ikev2_register(void);

Modified: wpasupplicant/trunk/src/eap_server/eap_peap.c
URL: http://svn.debian.org/wsvn/pkg-wpa/wpasupplicant/trunk/src/eap_server/eap_peap.c?rev=1137&op=diff
==============================================================================
--- wpasupplicant/trunk/src/eap_server/eap_peap.c (original)
+++ wpasupplicant/trunk/src/eap_server/eap_peap.c Sat Feb 23 03:45:26 2008
@@ -1,5 +1,5 @@
 /*
- * hostapd / EAP-PEAP (draft-josefsson-pppext-eap-tls-eap-07.txt)
+ * hostapd / EAP-PEAP (draft-josefsson-pppext-eap-tls-eap-10.txt)
  * Copyright (c) 2004-2008, Jouni Malinen <j at w1.fi>
  *
  * This program is free software; you can redistribute it and/or modify
@@ -17,13 +17,14 @@
 #include "common.h"
 #include "eap_i.h"
 #include "eap_tls_common.h"
+#include "eap_common/eap_tlv_common.h"
 #include "tls.h"
 
 
 /* Maximum supported PEAP version
  * 0 = Microsoft's PEAP version 0; draft-kamath-pppext-peapv0-00.txt
  * 1 = draft-josefsson-ppext-eap-tls-eap-05.txt
- * 2 = draft-josefsson-ppext-eap-tls-eap-07.txt
+ * 2 = draft-josefsson-ppext-eap-tls-eap-10.txt
  */
 #define EAP_PEAP_VERSION 1
 
@@ -34,7 +35,8 @@
 struct eap_peap_data {
 	struct eap_ssl_data ssl;
 	enum {
-		START, PHASE1, PHASE2_START, PHASE2_ID, PHASE2_METHOD,
+		START, PHASE1, PHASE1_ID2, PHASE2_START, PHASE2_ID,
+		PHASE2_METHOD,
 		PHASE2_TLV, SUCCESS_REQ, FAILURE_REQ, SUCCESS, FAILURE
 	} state;
 
@@ -53,6 +55,8 @@
 		return "START";
 	case PHASE1:
 		return "PHASE1";
+	case PHASE1_ID2:
+		return "PHASE1_ID2";
 	case PHASE2_START:
 		return "PHASE2_START";
 	case PHASE2_ID:
@@ -84,6 +88,33 @@
 }
 
 
+static struct wpabuf * eap_peapv2_tlv_eap_payload(struct wpabuf *buf)
+{
+	struct wpabuf *e;
+	struct eap_tlv_hdr *tlv;
+
+	if (buf == NULL)
+		return NULL;
+
+	/* Encapsulate EAP packet in EAP-Payload TLV */
+	wpa_printf(MSG_DEBUG, "EAP-PEAPv2: Add EAP-Payload TLV");
+	e = wpabuf_alloc(sizeof(*tlv) + wpabuf_len(buf));
+	if (e == NULL) {
+		wpa_printf(MSG_DEBUG, "EAP-PEAPv2: Failed to allocate memory "
+			   "for TLV encapsulation");
+		wpabuf_free(buf);
+		return NULL;
+	}
+	tlv = wpabuf_put(e, sizeof(*tlv));
+	tlv->tlv_type = host_to_be16(EAP_TLV_TYPE_MANDATORY |
+				     EAP_TLV_EAP_PAYLOAD_TLV);
+	tlv->length = host_to_be16(wpabuf_len(buf));
+	wpabuf_put_buf(e, buf);
+	wpabuf_free(buf);
+	return e;
+}
+
+
 static EapType eap_peap_req_success(struct eap_sm *sm,
 				    struct eap_peap_data *data)
 {
@@ -196,7 +227,8 @@
 	res = eap_server_tls_buildReq_helper(sm, &data->ssl, EAP_TYPE_PEAP,
 					     data->peap_version, id, &req);
 
-	if (tls_connection_established(sm->ssl_ctx, data->ssl.conn)) {
+	if (data->peap_version < 2 &&
+	    tls_connection_established(sm->ssl_ctx, data->ssl.conn)) {
 		wpa_printf(MSG_DEBUG, "EAP-PEAP: Phase1 done, starting "
 			   "Phase2");
 		eap_peap_state(data, PHASE2_START);
@@ -253,6 +285,8 @@
 	size_t req_len;
 
 	buf = data->phase2_method->buildReq(sm, data->phase2_priv, id);
+	if (data->peap_version >= 2 && buf)
+		buf = eap_peapv2_tlv_eap_payload(buf);
 	if (buf == NULL)
 		return NULL;
 
@@ -309,6 +343,7 @@
 	case START:
 		return eap_peap_build_start(sm, data, id);
 	case PHASE1:
+	case PHASE1_ID2:
 		return eap_peap_build_req(sm, data, id);
 	case PHASE2_ID:
 	case PHASE2_METHOD:
@@ -425,6 +460,7 @@
 	}
 
 	switch (data->state) {
+	case PHASE1_ID2:
 	case PHASE2_ID:
 		if (eap_user_get(sm, sm->identity, sm->identity_len, 1) != 0) {
 			wpa_hexdump_ascii(MSG_DEBUG, "EAP_PEAP: Phase2 "
@@ -547,7 +583,49 @@
 		wpabuf_free(in_decrypted);
 
 		in_decrypted = nbuf;
-	}
+	} else if (data->peap_version >= 2) {
+		struct eap_tlv_hdr *tlv;
+		struct wpabuf *nmsg;
+
+		if (wpabuf_len(in_decrypted) < sizeof(*tlv) + sizeof(*hdr)) {
+			wpa_printf(MSG_INFO, "EAP-PEAPv2: Too short Phase 2 "
+				   "EAP TLV");
+			wpabuf_free(in_decrypted);
+			return;
+		}
+		tlv = wpabuf_mhead(in_decrypted);
+		if ((be_to_host16(tlv->tlv_type) & EAP_TLV_TYPE_MASK) !=
+		    EAP_TLV_EAP_PAYLOAD_TLV) {
+			wpa_printf(MSG_INFO, "EAP-PEAPv2: Not an EAP TLV");
+			wpabuf_free(in_decrypted);
+			return;
+		}
+		if (sizeof(*tlv) + be_to_host16(tlv->length) >
+		    wpabuf_len(in_decrypted)) {
+			wpa_printf(MSG_INFO, "EAP-PEAPv2: Invalid EAP TLV "
+				   "length");
+			wpabuf_free(in_decrypted);
+			return;
+		}
+		hdr = (struct eap_hdr *) (tlv + 1);
+		if (be_to_host16(hdr->length) > be_to_host16(tlv->length)) {
+			wpa_printf(MSG_INFO, "EAP-PEAPv2: No room for full "
+				   "EAP packet in EAP TLV");
+			wpabuf_free(in_decrypted);
+			return;
+		}
+
+		nmsg = wpabuf_alloc(be_to_host16(hdr->length));
+		if (nmsg == NULL) {
+			wpabuf_free(in_decrypted);
+			return;
+		}
+
+		wpabuf_put_data(nmsg, hdr, be_to_host16(hdr->length));
+		wpabuf_free(in_decrypted);
+		in_decrypted = nmsg;
+	}
+
 	hdr = wpabuf_head(in_decrypted);
 	if (wpabuf_len(in_decrypted) < (int) sizeof(*hdr)) {
 		wpa_printf(MSG_INFO, "EAP-PEAP: Too short Phase 2 "
@@ -591,6 +669,72 @@
 	}
 
 	os_free(in_decrypted);
+}
+
+
+static int eap_peapv2_start_phase2(struct eap_sm *sm,
+				   struct eap_peap_data *data)
+{
+	struct wpabuf *buf, *buf2;
+	int res;
+	u8 *tls_out;
+
+	wpa_printf(MSG_DEBUG, "EAP-PEAPv2: Phase1 done, include first Phase2 "
+		   "payload in the same message");
+	eap_peap_state(data, PHASE1_ID2);
+	if (eap_peap_phase2_init(sm, data, EAP_TYPE_IDENTITY))
+		return -1;
+
+	/* TODO: which Id to use here? */
+	buf = data->phase2_method->buildReq(sm, data->phase2_priv, 6);
+	if (buf == NULL)
+		return -1;
+
+	buf2 = eap_peapv2_tlv_eap_payload(buf);
+	if (buf2 == NULL)
+		return -1;
+
+	wpa_hexdump_buf(MSG_DEBUG, "EAP-PEAPv2: Identity Request", buf2);
+
+	buf = wpabuf_alloc(data->ssl.tls_out_limit);
+	if (buf == NULL) {
+		wpabuf_free(buf2);
+		return -1;
+	}
+
+	res = tls_connection_encrypt(sm->ssl_ctx, data->ssl.conn,
+				     wpabuf_head(buf2), wpabuf_len(buf2),
+				     wpabuf_put(buf, 0),
+				     data->ssl.tls_out_limit);
+	wpabuf_free(buf2);
+
+	if (res < 0) {
+		wpa_printf(MSG_INFO, "EAP-PEAPv2: Failed to encrypt Phase 2 "
+			   "data");
+		wpabuf_free(buf);
+		return -1;
+	}
+
+	wpabuf_put(buf, res);
+	wpa_hexdump_buf(MSG_DEBUG, "EAP-PEAPv2: Encrypted Identity Request",
+			buf);
+
+	/* Append TLS data into the pending buffer after the Server Finished */
+	tls_out = os_realloc(data->ssl.tls_out,
+			     data->ssl.tls_out_len + wpabuf_len(buf));
+	if (tls_out == NULL) {
+		wpabuf_free(buf);
+		return -1;
+	}
+
+	os_memcpy(tls_out + data->ssl.tls_out_len, wpabuf_head(buf),
+		  wpabuf_len(buf));
+	data->ssl.tls_out = tls_out;
+	data->ssl.tls_out_len += wpabuf_len(buf);
+
+	wpabuf_free(buf);
+
+	return 0;
 }
 
 
@@ -655,12 +799,22 @@
 			wpa_printf(MSG_INFO, "EAP-PEAP: TLS processing "
 				   "failed");
 			eap_peap_state(data, FAILURE);
+			break;
+		}
+
+		if (data->peap_version >= 2 &&
+		    tls_connection_established(sm->ssl_ctx, data->ssl.conn)) {
+			if (eap_peapv2_start_phase2(sm, data)) {
+				eap_peap_state(data, FAILURE);
+				break;
+			}
 		}
 		break;
 	case PHASE2_START:
 		eap_peap_state(data, PHASE2_ID);
 		eap_peap_phase2_init(sm, data, EAP_TYPE_IDENTITY);
 		break;
+	case PHASE1_ID2:
 	case PHASE2_ID:
 	case PHASE2_METHOD:
 	case PHASE2_TLV:

Modified: wpasupplicant/trunk/src/eap_server/ikev2.c
URL: http://svn.debian.org/wsvn/pkg-wpa/wpasupplicant/trunk/src/eap_server/ikev2.c?rev=1137&op=diff
==============================================================================
--- wpasupplicant/trunk/src/eap_server/ikev2.c (original)
+++ wpasupplicant/trunk/src/eap_server/ikev2.c Sat Feb 23 03:45:26 2008
@@ -1138,7 +1138,7 @@
 	if (secret == NULL) {
 		wpa_printf(MSG_INFO, "IKEV2: Could not get shared secret - "
 			   "use fake value");
-		/* draft-tschofenig-eap-ikev2-15.txt, Sect. 7:
+		/* RFC 5106, Sect. 7:
 		 * Use a random key to fake AUTH generation in order to prevent
 		 * probing of user identities.
 		 */

Modified: wpasupplicant/trunk/src/radius/radius_server.c
URL: http://svn.debian.org/wsvn/pkg-wpa/wpasupplicant/trunk/src/radius/radius_server.c?rev=1137&op=diff
==============================================================================
--- wpasupplicant/trunk/src/radius/radius_server.c (original)
+++ wpasupplicant/trunk/src/radius/radius_server.c Sat Feb 23 03:45:26 2008
@@ -87,7 +87,6 @@
 	u8 *pac_opaque_encr_key;
 	char *eap_fast_a_id;
 	int eap_sim_aka_result_ind;
-	struct wps_context *wps;
 	int ipv6;
 	struct os_time start_time;
 	struct radius_server_counters counters;
@@ -312,7 +311,6 @@
 	eap_conf.pac_opaque_encr_key = data->pac_opaque_encr_key;
 	eap_conf.eap_fast_a_id = data->eap_fast_a_id;
 	eap_conf.eap_sim_aka_result_ind = data->eap_sim_aka_result_ind;
-	eap_conf.wps = data->wps;
 	sess->eap = eap_server_sm_init(sess, &radius_server_eapol_cb,
 				       &eap_conf);
 	if (sess->eap == NULL) {
@@ -1018,7 +1016,6 @@
 		data->eap_fast_a_id = os_strdup(conf->eap_fast_a_id);
 	data->get_eap_user = conf->get_eap_user;
 	data->eap_sim_aka_result_ind = conf->eap_sim_aka_result_ind;
-	data->wps = conf->wps;
 
 	data->clients = radius_server_read_clients(conf->client_file,
 						   conf->ipv6);

Modified: wpasupplicant/trunk/src/radius/radius_server.h
URL: http://svn.debian.org/wsvn/pkg-wpa/wpasupplicant/trunk/src/radius/radius_server.h?rev=1137&op=diff
==============================================================================
--- wpasupplicant/trunk/src/radius/radius_server.h (original)
+++ wpasupplicant/trunk/src/radius/radius_server.h Sat Feb 23 03:45:26 2008
@@ -27,7 +27,6 @@
 	u8 *pac_opaque_encr_key;
 	char *eap_fast_a_id;
 	int eap_sim_aka_result_ind;
-	struct wps_context *wps;
 	int ipv6;
 	int (*get_eap_user)(void *ctx, const u8 *identity, size_t identity_len,
 			    int phase2, struct eap_user *user);

Modified: wpasupplicant/trunk/src/rsn_supp/wpa.c
URL: http://svn.debian.org/wsvn/pkg-wpa/wpasupplicant/trunk/src/rsn_supp/wpa.c?rev=1137&op=diff
==============================================================================
--- wpasupplicant/trunk/src/rsn_supp/wpa.c (original)
+++ wpasupplicant/trunk/src/rsn_supp/wpa.c Sat Feb 23 03:45:26 2008
@@ -2187,10 +2187,6 @@
  * @wpa_ie: Pointer to buffer for WPA/RSN IE
  * @wpa_ie_len: Pointer to the length of the wpa_ie buffer
  * Returns: 0 on success, -1 on failure
- *
- * Inform WPA state machine about the WPA/RSN IE used in (Re)Association
- * Request frame. The IE will be used to override the default value generated
- * with wpa_sm_set_assoc_wpa_ie_default().
  */
 int wpa_sm_set_assoc_wpa_ie_default(struct wpa_sm *sm, u8 *wpa_ie,
 				    size_t *wpa_ie_len)

Modified: wpasupplicant/trunk/wpa_supplicant/ChangeLog
URL: http://svn.debian.org/wsvn/pkg-wpa/wpasupplicant/trunk/wpa_supplicant/ChangeLog?rev=1137&op=diff
==============================================================================
--- wpasupplicant/trunk/wpa_supplicant/ChangeLog (original)
+++ wpasupplicant/trunk/wpa_supplicant/ChangeLog Sat Feb 23 03:45:26 2008
@@ -1,6 +1,6 @@
 ChangeLog for wpa_supplicant
 
-????-??-?? - v0.6.3
+2008-02-22 - v0.6.3
 	* removed 'nai' and 'eappsk' network configuration variables that were
 	  previously used for configuring user identity and key for EAP-PSK,
 	  EAP-PAX, EAP-SAKE, and EAP-GPSK. 'identity' field is now used as the
@@ -23,6 +23,7 @@
 	  attributes in EAP-SIM Start/Response when using fast reauthentication
 	* fixed EAPOL not to end up in infinite loop when processing dynamic
 	  WEP keys with IEEE 802.1X
+	* fixed problems in getting NDIS events from WMI on Windows 2000
 
 2008-01-01 - v0.6.2
 	* added support for Makefile builds to include debug-log-to-a-file

Modified: wpasupplicant/trunk/wpa_supplicant/Makefile
URL: http://svn.debian.org/wsvn/pkg-wpa/wpasupplicant/trunk/wpa_supplicant/Makefile?rev=1137&op=diff
==============================================================================
--- wpasupplicant/trunk/wpa_supplicant/Makefile (original)
+++ wpasupplicant/trunk/wpa_supplicant/Makefile Sat Feb 23 03:45:26 2008
@@ -823,7 +823,7 @@
 CFLAGS += -DCONFIG_NATIVE_WINDOWS
 LIBS += -lws2_32 -lgdi32 -lcrypt32
 LIBS_c += -lws2_32
-LIBS_p += -lws2_32
+LIBS_p += -lws2_32 -lgdi32
 ifeq ($(CONFIG_CRYPTO), cryptoapi)
 LIBS_p += -lcrypt32
 endif

Modified: wpasupplicant/trunk/wpa_supplicant/ctrl_iface_dbus_handlers.c
URL: http://svn.debian.org/wsvn/pkg-wpa/wpasupplicant/trunk/wpa_supplicant/ctrl_iface_dbus_handlers.c?rev=1137&op=diff
==============================================================================
--- wpasupplicant/trunk/wpa_supplicant/ctrl_iface_dbus_handlers.c (original)
+++ wpasupplicant/trunk/wpa_supplicant/ctrl_iface_dbus_handlers.c Sat Feb 23 03:45:26 2008
@@ -379,15 +379,8 @@
 					 struct wpa_scan_res *res)
 {
 	DBusMessage *reply = NULL;
-	char *bssid_data;
 	DBusMessageIter iter, iter_dict;
 	const u8 *ie;
-	size_t len;
-
-	/* dbus needs the address of a pointer to the actual value
-	 * for array types, not the address of the value itself.
-	 */
-	bssid_data = (char *) &res->bssid;
 
 	/* Dump the properties into a dbus message */
 	reply = dbus_message_new_method_return(message);
@@ -397,37 +390,31 @@
 		goto error;
 
 	if (!wpa_dbus_dict_append_byte_array(&iter_dict, "bssid",
-					     bssid_data, ETH_ALEN))
+					     (const char *) res->bssid,
+					     ETH_ALEN))
 		goto error;
 
 	ie = wpa_scan_get_ie(res, WLAN_EID_SSID);
 	if (ie) {
-		const char *ssid_data;
-		len = ie[1];
-		ie += 2;
-		ssid_data = (const char *) &ie;
 		if (!wpa_dbus_dict_append_byte_array(&iter_dict, "ssid",
-						     ssid_data, len))
+						     (const char *) (ie + 2),
+						     ie[1]))
 		goto error;
 	}
 
 	ie = wpa_scan_get_vendor_ie(res, WPA_IE_VENDOR_TYPE);
 	if (ie) {
-		const char *wpa_ie_data;
-		len = 2 + ie[1];
-		wpa_ie_data = (const char *) &ie;
 		if (!wpa_dbus_dict_append_byte_array(&iter_dict, "wpaie",
-						     wpa_ie_data, len))
+						     (const char *) ie,
+						     ie[1] + 2))
 			goto error;
 	}
 
 	ie = wpa_scan_get_ie(res, WLAN_EID_RSN);
 	if (ie) {
-		const char *rsn_ie_data;
-		len = 2 + ie[1];
-		rsn_ie_data = (const char *) &ie;
 		if (!wpa_dbus_dict_append_byte_array(&iter_dict, "rsnie",
-						     rsn_ie_data, len))
+						     (const char *) ie,
+						     ie[1] + 2))
 			goto error;
 	}
 

Modified: wpasupplicant/trunk/wpa_supplicant/events.c
URL: http://svn.debian.org/wsvn/pkg-wpa/wpasupplicant/trunk/wpa_supplicant/events.c?rev=1137&op=diff
==============================================================================
--- wpasupplicant/trunk/wpa_supplicant/events.c (original)
+++ wpasupplicant/trunk/wpa_supplicant/events.c Sat Feb 23 03:45:26 2008
@@ -1,6 +1,6 @@
 /*
  * WPA Supplicant - Driver event processing
- * Copyright (c) 2003-2007, Jouni Malinen <j at w1.fi>
+ * Copyright (c) 2003-2008, Jouni Malinen <j at w1.fi>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License version 2 as
@@ -40,6 +40,8 @@
 	if (wpa_s->conf->ap_scan == 1 && wpa_s->current_ssid)
 		return 0;
 
+	wpa_printf(MSG_DEBUG, "Select network based on association "
+		   "information");
 	ssid = wpa_supplicant_get_ssid(wpa_s);
 	if (ssid == NULL) {
 		wpa_printf(MSG_INFO, "No network configuration found for the "
@@ -100,6 +102,7 @@
 	if (wpa_s->key_mgmt == WPA_KEY_MGMT_PSK ||
 	    wpa_s->key_mgmt == WPA_KEY_MGMT_FT_PSK)
 		eapol_sm_notify_eap_success(wpa_s->eapol, FALSE);
+	wpa_s->ap_ies_from_associnfo = 0;
 }
 
 
@@ -690,6 +693,8 @@
 		wpa_sm_set_ap_wpa_ie(wpa_s->wpa, NULL, 0);
 	if (!rsn_found && data->assoc_info.beacon_ies)
 		wpa_sm_set_ap_rsn_ie(wpa_s->wpa, NULL, 0);
+	if (wpa_found || rsn_found)
+		wpa_s->ap_ies_from_associnfo = 1;
 }
 
 

Modified: wpasupplicant/trunk/wpa_supplicant/wpa_gui-qt4/eventhistory.cpp
URL: http://svn.debian.org/wsvn/pkg-wpa/wpasupplicant/trunk/wpa_supplicant/wpa_gui-qt4/eventhistory.cpp?rev=1137&op=diff
==============================================================================
--- wpasupplicant/trunk/wpa_supplicant/wpa_gui-qt4/eventhistory.cpp (original)
+++ wpasupplicant/trunk/wpa_supplicant/wpa_gui-qt4/eventhistory.cpp Sat Feb 23 03:45:26 2008
@@ -13,6 +13,7 @@
  */
 
 #include <QHeaderView>
+#include <QScrollBar>
 
 #include "eventhistory.h"
 
@@ -115,6 +116,15 @@
 
 void EventHistory::addEvent(WpaMsg msg)
 {
+	bool scroll = true;
+
+	if (eventListView->verticalScrollBar()->value() <
+	    eventListView->verticalScrollBar()->maximum())
+	    	scroll = false;
+
 	elm->addEvent(msg.getTimestamp().toString("yyyy-MM-dd hh:mm:ss.zzz"),
 		      msg.getMsg());
+
+	if (scroll)
+		eventListView->scrollToBottom();
 }

Modified: wpasupplicant/trunk/wpa_supplicant/wpa_gui-qt4/eventhistory.ui
URL: http://svn.debian.org/wsvn/pkg-wpa/wpasupplicant/trunk/wpa_supplicant/wpa_gui-qt4/eventhistory.ui?rev=1137&op=diff
==============================================================================
--- wpasupplicant/trunk/wpa_supplicant/wpa_gui-qt4/eventhistory.ui (original)
+++ wpasupplicant/trunk/wpa_supplicant/wpa_gui-qt4/eventhistory.ui Sat Feb 23 03:45:26 2008
@@ -1,93 +1,61 @@
-<ui version="4.0" stdsetdef="1" >
-  <author></author>
-  <comment></comment>
-  <exportmacro></exportmacro>
-  <class>EventHistory</class>
-  <widget class="QDialog" name="EventHistory" >
-    <property name="geometry" >
-      <rect>
-        <x>0</x>
-        <y>0</y>
-        <width>533</width>
-        <height>285</height>
-      </rect>
-    </property>
-    <property name="windowTitle" >
-      <string>Event history</string>
-    </property>
-    <layout class="QVBoxLayout" >
-      <item>
-        <widget class="QTreeView" name="eventListView" >
-          <property name="sizePolicy" >
-            <sizepolicy>
-              <hsizetype>7</hsizetype>
-              <vsizetype>7</vsizetype>
-              <horstretch>0</horstretch>
-              <verstretch>0</verstretch>
-            </sizepolicy>
-          </property>
-          <property name="selectionMode" >
-            <enum>QAbstractItemView::NoSelection</enum>
-          </property>
-          <column>
-            <property name="text" >
-              <string>Timestamp</string>
-            </property>
-            <property name="clickable" >
-              <bool>true</bool>
-            </property>
-            <property name="resizable" >
-              <bool>true</bool>
-            </property>
-          </column>
-          <column>
-            <property name="text" >
-              <string>Message</string>
-            </property>
-            <property name="clickable" >
-              <bool>true</bool>
-            </property>
-            <property name="resizable" >
-              <bool>true</bool>
-            </property>
-          </column>
-        </widget>
-      </item>
-      <item>
-        <layout class="QHBoxLayout" >
-          <property name="margin" >
-            <number>0</number>
-          </property>
-          <item>
-            <spacer name="spacer3" >
-              <property name="sizeHint" >
-                <size>
-                  <width>20</width>
-                  <height>20</height>
-                </size>
-              </property>
-              <property name="sizeType" >
-                <enum>Expanding</enum>
-              </property>
-              <property name="orientation" >
-                <enum>Horizontal</enum>
-              </property>
-            </spacer>
-          </item>
-          <item>
-            <widget class="QPushButton" name="closeButton" >
-              <property name="text" >
-                <string>Close</string>
-              </property>
-            </widget>
-          </item>
-        </layout>
-      </item>
-    </layout>
-  </widget>
-  <layoutdefault spacing="6" margin="11" />
-  <pixmapfunction>qPixmapFromMimeSource</pixmapfunction>
-  <includes>
-    <include location="local" >wpamsg.h</include>
-  </includes>
+<ui version="4.0" >
+ <class>EventHistory</class>
+ <widget class="QDialog" name="EventHistory" >
+  <property name="geometry" >
+   <rect>
+    <x>0</x>
+    <y>0</y>
+    <width>533</width>
+    <height>285</height>
+   </rect>
+  </property>
+  <property name="windowTitle" >
+   <string>Event history</string>
+  </property>
+  <layout class="QGridLayout" >
+   <item row="0" column="0" colspan="2" >
+    <widget class="QTreeView" name="eventListView" >
+     <property name="sizePolicy" >
+      <sizepolicy vsizetype="Expanding" hsizetype="Expanding" >
+       <horstretch>0</horstretch>
+       <verstretch>0</verstretch>
+      </sizepolicy>
+     </property>
+     <property name="verticalScrollBarPolicy" >
+      <enum>Qt::ScrollBarAlwaysOn</enum>
+     </property>
+     <property name="selectionMode" >
+      <enum>QAbstractItemView::NoSelection</enum>
+     </property>
+    </widget>
+   </item>
+   <item row="1" column="0" >
+    <spacer>
+     <property name="orientation" >
+      <enum>Qt::Horizontal</enum>
+     </property>
+     <property name="sizeHint" >
+      <size>
+       <width>40</width>
+       <height>20</height>
+      </size>
+     </property>
+    </spacer>
+   </item>
+   <item row="1" column="1" >
+    <widget class="QPushButton" name="closeButton" >
+     <property name="text" >
+      <string>Close</string>
+     </property>
+    </widget>
+   </item>
+  </layout>
+ </widget>
+ <layoutdefault spacing="6" margin="11" />
+ <pixmapfunction>qPixmapFromMimeSource</pixmapfunction>
+ <includes>
+  <include location="local" >wpamsg.h</include>
+ </includes>
+ <resources/>
+ <connections/>
 </ui>

Modified: wpasupplicant/trunk/wpa_supplicant/wpa_supplicant.c
URL: http://svn.debian.org/wsvn/pkg-wpa/wpasupplicant/trunk/wpa_supplicant/wpa_supplicant.c?rev=1137&op=diff
==============================================================================
--- wpasupplicant/trunk/wpa_supplicant/wpa_supplicant.c (original)
+++ wpasupplicant/trunk/wpa_supplicant/wpa_supplicant.c Sat Feb 23 03:45:26 2008
@@ -770,11 +770,13 @@
 	wpa_sm_set_param(wpa_s->wpa, WPA_PARAM_RSN_ENABLED,
 			 !!(ssid->proto & WPA_PROTO_RSN));
 
-	if (wpa_sm_set_ap_wpa_ie(wpa_s->wpa, bss_wpa,
-				 bss_wpa ? 2 + bss_wpa[1] : 0) ||
-	    wpa_sm_set_ap_rsn_ie(wpa_s->wpa, bss_rsn,
-				 bss_rsn ? 2 + bss_rsn[1] : 0))
-		return -1;
+	if (bss || !wpa_s->ap_ies_from_associnfo) {
+		if (wpa_sm_set_ap_wpa_ie(wpa_s->wpa, bss_wpa,
+					 bss_wpa ? 2 + bss_wpa[1] : 0) ||
+		    wpa_sm_set_ap_rsn_ie(wpa_s->wpa, bss_rsn,
+					 bss_rsn ? 2 + bss_rsn[1] : 0))
+			return -1;
+	}
 
 	sel = ie.group_cipher & ssid->group_cipher;
 	if (sel & WPA_CIPHER_CCMP) {

Modified: wpasupplicant/trunk/wpa_supplicant/wpa_supplicant_i.h
URL: http://svn.debian.org/wsvn/pkg-wpa/wpasupplicant/trunk/wpa_supplicant/wpa_supplicant_i.h?rev=1137&op=diff
==============================================================================
--- wpasupplicant/trunk/wpa_supplicant/wpa_supplicant_i.h (original)
+++ wpasupplicant/trunk/wpa_supplicant/wpa_supplicant_i.h Sat Feb 23 03:45:26 2008
@@ -281,6 +281,7 @@
 	int disconnected; /* all connections disabled; i.e., do no reassociate
 			   * before this has been cleared */
 	struct wpa_ssid *current_ssid;
+	int ap_ies_from_associnfo;
 
 	/* Selected configuration (based on Beacon/ProbeResp WPA IE) */
 	int pairwise_cipher;




More information about the Pkg-wpa-devel mailing list