View | Details | Raw Unified | Return to bug 264238 | Differences between
and this patch

Collapse All | Expand All

(-)b/contrib/wpa/src/drivers/driver_bsd.c (-16 / +46 lines)
Lines 14-19 Link Here
14
#include "driver.h"
14
#include "driver.h"
15
#include "eloop.h"
15
#include "eloop.h"
16
#include "common/ieee802_11_defs.h"
16
#include "common/ieee802_11_defs.h"
17
#include "common/ieee802_11_common.h"
17
#include "common/wpa_common.h"
18
#include "common/wpa_common.h"
18
19
19
#include <ifaddrs.h>
20
#include <ifaddrs.h>
Lines 1208-1213 wpa_driver_bsd_associate(void *priv, struct wpa_driver_associate_params *params) Link Here
1208
	u32 mode;
1209
	u32 mode;
1209
	int privacy;
1210
	int privacy;
1210
	int ret = 0;
1211
	int ret = 0;
1212
	const u8 *wpa_ie, *rsn_ie;
1213
	size_t wpa_ie_len, rsn_ie_len;
1211
1214
1212
	wpa_printf(MSG_DEBUG,
1215
	wpa_printf(MSG_DEBUG,
1213
		"%s: ssid '%.*s' wpa ie len %u pairwise %u group %u key mgmt %u"
1216
		"%s: ssid '%.*s' wpa ie len %u pairwise %u group %u key mgmt %u"
Lines 1256-1278 wpa_driver_bsd_associate(void *priv, struct wpa_driver_associate_params *params) Link Here
1256
		ret = -1;
1259
		ret = -1;
1257
	if (wpa_driver_bsd_set_auth_alg(drv, params->auth_alg) < 0)
1260
	if (wpa_driver_bsd_set_auth_alg(drv, params->auth_alg) < 0)
1258
		ret = -1;
1261
		ret = -1;
1259
	/* XXX error handling is wrong but unclear what to do... */
1260
	if (wpa_driver_bsd_set_wpa_ie(drv, params->wpa_ie, params->wpa_ie_len) < 0)
1261
		return -1;
1262
1263
	privacy = !(params->pairwise_suite == WPA_CIPHER_NONE &&
1264
	    params->group_suite == WPA_CIPHER_NONE &&
1265
	    params->key_mgmt_suite == WPA_KEY_MGMT_NONE &&
1266
	    params->wpa_ie_len == 0);
1267
	wpa_printf(MSG_DEBUG, "%s: set PRIVACY %u", __func__, privacy);
1268
1269
	if (set80211param(drv, IEEE80211_IOC_PRIVACY, privacy) < 0)
1270
		return -1;
1271
1262
1272
	if (params->wpa_ie_len &&
1263
	if (params->wpa_ie_len) {
1273
	    set80211param(drv, IEEE80211_IOC_WPA,
1264
		rsn_ie = get_ie(params->wpa_ie, params->wpa_ie_len, WLAN_EID_RSN);
1274
			  params->wpa_ie[0] == WLAN_EID_RSN ? 2 : 1) < 0)
1265
		wpa_ie = get_vendor_ie(params->wpa_ie, params->wpa_ie_len,
1275
		return -1;
1266
			    WPA_IE_VENDOR_TYPE);
1267
		if (rsn_ie) {
1268
			rsn_ie_len = rsn_ie[1] ? rsn_ie[1] + 2 : 0;
1269
			/* XXX error handling is wrong but unclear what to do... */
1270
			if (wpa_driver_bsd_set_wpa_ie(drv, rsn_ie, rsn_ie_len) < 0)
1271
				return -1;
1272
1273
			privacy = !(params->pairwise_suite == WPA_CIPHER_NONE &&
1274
			    params->group_suite == WPA_CIPHER_NONE &&
1275
			    params->key_mgmt_suite == WPA_KEY_MGMT_NONE);
1276
			wpa_printf(MSG_DEBUG, "%s: set PRIVACY %u", __func__,
1277
			    privacy);
1278
1279
			if (set80211param(drv, IEEE80211_IOC_PRIVACY, privacy) < 0)
1280
				return -1;
1281
1282
			if (rsn_ie_len &&
1283
			    set80211param(drv, IEEE80211_IOC_WPA, 2) < 0)
1284
				return -1;
1285
		}
1286
		else if (wpa_ie) {
1287
			wpa_ie_len = wpa_ie[1] ? wpa_ie[1] + 2 : 0;
1288
			/* XXX error handling is wrong but unclear what to do... */
1289
			if (wpa_driver_bsd_set_wpa_ie(drv, wpa_ie, wpa_ie_len) < 0)
1290
				return -1;
1291
1292
			privacy = !(params->pairwise_suite == WPA_CIPHER_NONE &&
1293
			    params->group_suite == WPA_CIPHER_NONE &&
1294
			    params->key_mgmt_suite == WPA_KEY_MGMT_NONE);
1295
			wpa_printf(MSG_DEBUG, "%s: set PRIVACY %u", __func__,
1296
			    privacy);
1297
1298
			if (set80211param(drv, IEEE80211_IOC_PRIVACY, privacy) < 0)
1299
				return -1;
1300
1301
			if (wpa_ie_len &&
1302
			    set80211param(drv, IEEE80211_IOC_WPA, 1) < 0)
1303
				return -1;
1304
		}
1305
	}
1276
1306
1277
	/*
1307
	/*
1278
	 * NB: interface must be marked UP for association
1308
	 * NB: interface must be marked UP for association

Return to bug 264238