PERFORCE change 137035 for review
Sam Leffler
sam at FreeBSD.org
Thu Mar 6 23:46:46 UTC 2008
http://perforce.freebsd.org/chv.cgi?CH=137035
Change 137035 by sam at sam_ebb on 2008/03/06 23:46:20
import wpa_supplicant 0.5.10
Affected files ...
.. //depot/projects/vap/contrib/wpa_supplicant/ChangeLog#3 edit
.. //depot/projects/vap/contrib/wpa_supplicant/Makefile#3 edit
.. //depot/projects/vap/contrib/wpa_supplicant/README#3 edit
.. //depot/projects/vap/contrib/wpa_supplicant/aes_wrap.c#3 edit
.. //depot/projects/vap/contrib/wpa_supplicant/aes_wrap.h#3 edit
.. //depot/projects/vap/contrib/wpa_supplicant/asn1.c#3 edit
.. //depot/projects/vap/contrib/wpa_supplicant/common.c#3 edit
.. //depot/projects/vap/contrib/wpa_supplicant/common.h#3 edit
.. //depot/projects/vap/contrib/wpa_supplicant/config.c#3 edit
.. //depot/projects/vap/contrib/wpa_supplicant/config_ssid.h#3 edit
.. //depot/projects/vap/contrib/wpa_supplicant/ctrl_iface.c#3 edit
.. //depot/projects/vap/contrib/wpa_supplicant/ctrl_iface_dbus.c#3 edit
.. //depot/projects/vap/contrib/wpa_supplicant/ctrl_iface_dbus_handlers.c#3 edit
.. //depot/projects/vap/contrib/wpa_supplicant/ctrl_iface_dbus_handlers.h#3 edit
.. //depot/projects/vap/contrib/wpa_supplicant/ctrl_iface_unix.c#3 edit
.. //depot/projects/vap/contrib/wpa_supplicant/dbus-wpa_supplicant.conf#3 edit
.. //depot/projects/vap/contrib/wpa_supplicant/defconfig#3 edit
.. //depot/projects/vap/contrib/wpa_supplicant/doc/ctrl_iface.doxygen#3 edit
.. //depot/projects/vap/contrib/wpa_supplicant/doc/docbook/wpa_background.8#3 edit
.. //depot/projects/vap/contrib/wpa_supplicant/doc/docbook/wpa_cli.8#3 edit
.. //depot/projects/vap/contrib/wpa_supplicant/doc/docbook/wpa_cli.sgml#3 edit
.. //depot/projects/vap/contrib/wpa_supplicant/doc/docbook/wpa_passphrase.8#3 edit
.. //depot/projects/vap/contrib/wpa_supplicant/doc/docbook/wpa_supplicant.8#3 edit
.. //depot/projects/vap/contrib/wpa_supplicant/doc/docbook/wpa_supplicant.conf.5#3 edit
.. //depot/projects/vap/contrib/wpa_supplicant/doc/docbook/wpa_supplicant.conf.sgml#3 edit
.. //depot/projects/vap/contrib/wpa_supplicant/doc/docbook/wpa_supplicant.sgml#3 edit
.. //depot/projects/vap/contrib/wpa_supplicant/driver_ndis.c#3 edit
.. //depot/projects/vap/contrib/wpa_supplicant/eap_gpsk.c#3 edit
.. //depot/projects/vap/contrib/wpa_supplicant/eap_gpsk_common.c#3 edit
.. //depot/projects/vap/contrib/wpa_supplicant/eap_gpsk_common.h#3 edit
.. //depot/projects/vap/contrib/wpa_supplicant/eap_peap.c#3 edit
.. //depot/projects/vap/contrib/wpa_supplicant/eap_sim.c#3 edit
.. //depot/projects/vap/contrib/wpa_supplicant/eap_sim_common.c#3 edit
.. //depot/projects/vap/contrib/wpa_supplicant/eap_tlv.c#3 edit
.. //depot/projects/vap/contrib/wpa_supplicant/eap_tlv.h#3 edit
.. //depot/projects/vap/contrib/wpa_supplicant/eapol_sm.c#3 edit
.. //depot/projects/vap/contrib/wpa_supplicant/eapol_test.c#3 edit
.. //depot/projects/vap/contrib/wpa_supplicant/events.c#3 edit
.. //depot/projects/vap/contrib/wpa_supplicant/main.c#3 edit
.. //depot/projects/vap/contrib/wpa_supplicant/os.h#3 edit
.. //depot/projects/vap/contrib/wpa_supplicant/os_unix.c#3 edit
.. //depot/projects/vap/contrib/wpa_supplicant/pcsc_funcs.c#3 edit
.. //depot/projects/vap/contrib/wpa_supplicant/radius.c#3 edit
.. //depot/projects/vap/contrib/wpa_supplicant/radius.h#3 edit
.. //depot/projects/vap/contrib/wpa_supplicant/radius_client.c#3 edit
.. //depot/projects/vap/contrib/wpa_supplicant/tls_openssl.c#3 edit
.. //depot/projects/vap/contrib/wpa_supplicant/version.h#3 edit
.. //depot/projects/vap/contrib/wpa_supplicant/wpa.c#3 edit
.. //depot/projects/vap/contrib/wpa_supplicant/wpa_cli.c#3 edit
.. //depot/projects/vap/contrib/wpa_supplicant/wpa_ctrl.c#3 edit
.. //depot/projects/vap/contrib/wpa_supplicant/wpa_gui-qt4/networkconfig.cpp#3 edit
.. //depot/projects/vap/contrib/wpa_supplicant/wpa_gui-qt4/wpagui.cpp#3 edit
.. //depot/projects/vap/contrib/wpa_supplicant/wpa_gui/networkconfig.ui.h#3 edit
.. //depot/projects/vap/contrib/wpa_supplicant/wpa_gui/setup-mingw-cross-compiling#3 edit
.. //depot/projects/vap/contrib/wpa_supplicant/wpa_gui/wpagui.ui.h#3 edit
.. //depot/projects/vap/contrib/wpa_supplicant/wpa_supplicant.c#3 edit
.. //depot/projects/vap/contrib/wpa_supplicant/wpa_supplicant.conf#3 edit
.. //depot/projects/vap/contrib/wpa_supplicant/wpa_supplicant_i.h#3 edit
.. //depot/projects/vap/contrib/wpa_supplicant/x509v3.c#3 edit
Differences ...
==== //depot/projects/vap/contrib/wpa_supplicant/ChangeLog#3 (text+ko) ====
@@ -1,5 +1,46 @@
ChangeLog for wpa_supplicant
+2008-02-19 - v0.5.10
+ * added support for Makefile builds to include debug-log-to-a-file
+ functionality (CONFIG_DEBUG_FILE=y and -f<path> on command line)
+ * added network configuration parameter 'frequency' for setting
+ initial channel for IBSS (adhoc) networks
+ * fixed EAP-SIM and EAP-AKA message parser to validate attribute
+ lengths properly to avoid potential crash caused by invalid messages
+ * added driver_wext workaround for race condition between scanning and
+ association with drivers that take very long time to scan all
+ channels (e.g., madwifi with dual-band cards); wpa_supplicant is now
+ using a longer hardcoded timeout for the scan if the driver supports
+ notifications for scan completion (SIOCGIWSCAN event); this helps,
+ e.g., in cases where wpa_supplicant and madwifi driver ended up in
+ loop where the driver did not even try to associate
+ * fixed EAP-SIM not to include AT_NONCE_MT and AT_SELECTED_VERSION
+ attributes in EAP-SIM Start/Response when using fast reauthentication
+ * fixed problems in getting NDIS events from WMI on Windows 2000
+
+2007-12-02 - v0.5.9
+ * fixed an integer overflow issue in the ASN.1 parser used by the
+ (experimental) internal TLS implementation to avoid a potential
+ buffer read overflow
+ * fixed a race condition with -W option (wait for a control interface
+ monitor before starting) that could have caused the first messages to
+ be lost
+ * updated EAP Generalized Pre-Shared Key (EAP-GPSK) to use the latest
+ draft (draft-ietf-emu-eap-gpsk-07.txt)
+ * added ctrl_iface RECONNECT (wpa_cli reconnect) command
+ (like reassociate, but only takes effect if already associated)
+ * fixed a possible race condition between wpa_cli reassociate and
+ wpa_cli disconnect
+ * return a non-zero exit code from non-interactive wpa_cli if the
+ command is not recognized or fails
+ * fixed 0.5.8 regressions in BSS selection that prevented wildcard SSID
+ from being used with non-WPA networks and disabled workaround for
+ ignoring bogus WPA/RSN IE in non-WPA configuration
+ * fixed OpenSSL TLS wrapper to clear trusted CA list to allow
+ network blocks to use different trusted CA configurations
+ * fixed a potential EAP state machine loop when mloving from PSK to EAP
+ configuration without restarting wpa_supplicant
+
2007-05-28 - v0.5.8
* updated driver_wext.c to build with the current wireless-dev.git tree
and net/d80211 changes
==== //depot/projects/vap/contrib/wpa_supplicant/Makefile#3 (text+ko) ====
@@ -654,8 +654,25 @@
ifdef CONFIG_CTRL_IFACE_DBUS
CFLAGS += -DCONFIG_CTRL_IFACE_DBUS -DDBUS_API_SUBJECT_TO_CHANGE
OBJS += ctrl_iface_dbus.o ctrl_iface_dbus_handlers.o dbus_dict_helpers.o
-LIBS += `pkg-config --libs dbus-1`
-CFLAGS += `pkg-config --cflags dbus-1`
+ifndef DBUS_LIBS
+DBUS_LIBS := $(shell pkg-config --libs dbus-1)
+endif
+LIBS += $(DBUS_LIBS)
+ifndef DBUS_INCLUDE
+DBUS_INCLUDE := $(shell pkg-config --cflags dbus-1)
+endif
+dbus_version=$(subst ., ,$(shell pkg-config --modversion dbus-1))
+DBUS_VERSION_MAJOR=$(word 1,$(dbus_version))
+DBUS_VERSION_MINOR=$(word 2,$(dbus_version))
+ifeq ($(DBUS_VERSION_MAJOR),)
+DBUS_VERSION_MAJOR=0
+endif
+ifeq ($(DBUS_VERSION_MINOR),)
+DBUS_VERSION_MINOR=0
+endif
+DBUS_INCLUDE += -DDBUS_VERSION_MAJOR=$(DBUS_VERSION_MAJOR)
+DBUS_INCLUDE += -DDBUS_VERSION_MINOR=$(DBUS_VERSION_MINOR)
+CFLAGS += $(DBUS_INCLUDE)
endif
ifdef CONFIG_READLINE
@@ -724,6 +741,10 @@
CONFIG_MAIN=main
endif
+ifdef CONFIG_DEBUG_FILE
+CFLAGS += -DCONFIG_DEBUG_FILE
+endif
+
OBJS += wpa_supplicant.o events.o
OBJS_t := $(OBJS) eapol_test.o radius.o radius_client.o
OBJS_t2 := $(OBJS) preauth_test.o
==== //depot/projects/vap/contrib/wpa_supplicant/README#3 (text+ko) ====
@@ -1,7 +1,7 @@
WPA Supplicant
==============
-Copyright (c) 2003-2007, Jouni Malinen <j at w1.fi> and contributors
+Copyright (c) 2003-2008, Jouni Malinen <j at w1.fi> and contributors
All Rights Reserved.
This program is dual-licensed under both the GPL version 2 and BSD
@@ -481,7 +481,7 @@
--------------------
usage:
- wpa_supplicant [-BddehLqqvwW] [-P<pid file>] [-g<global ctrl>] \
+ wpa_supplicant [-BddfhKLqqtuvwW] [-P<pid file>] [-g<global ctrl>] \
-i<ifname> -c<config file> [-C<ctrl>] [-D<driver>] [-p<driver_param>] \
[-b<br_ifname> [-N -i<ifname> -c<conf> [-C<ctrl>] [-D<driver>] \
[-p<driver_param>] [-b<br_ifname>] ...]
@@ -494,6 +494,7 @@
-i = interface name
-d = increase debugging verbosity (-dd even more)
-D = driver name
+ -f = Log output to default log location (normally /tmp)
-g = global ctrl_interface
-K = include keys (passwords, etc.) in debug output
-t = include timestamp in debug messages
==== //depot/projects/vap/contrib/wpa_supplicant/aes_wrap.c#3 (text+ko) ====
@@ -7,7 +7,7 @@
* - AES-128 EAX mode encryption/decryption
* - AES-128 CBC
*
- * Copyright (c) 2003-2005, Jouni Malinen <j at w1.fi>
+ * Copyright (c) 2003-2007, 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
@@ -34,10 +34,11 @@
/**
* aes_wrap - Wrap keys with AES Key Wrap Algorithm (128-bit KEK) (RFC3394)
- * @kek: Key encryption key (KEK)
- * @n: Length of the wrapped key in 64-bit units; e.g., 2 = 128-bit = 16 bytes
- * @plain: Plaintext key to be wrapped, n * 64 bit
- * @cipher: Wrapped key, (n + 1) * 64 bit
+ * @kek: 16-octet Key encryption key (KEK)
+ * @n: Length of the plaintext key in 64-bit units; e.g., 2 = 128-bit = 16
+ * bytes
+ * @plain: Plaintext key to be wrapped, n * 64 bits
+ * @cipher: Wrapped key, (n + 1) * 64 bits
* Returns: 0 on success, -1 on failure
*/
int aes_wrap(const u8 *kek, int n, const u8 *plain, u8 *cipher)
@@ -93,9 +94,10 @@
/**
* aes_unwrap - Unwrap key with AES Key Wrap Algorithm (128-bit KEK) (RFC3394)
* @kek: Key encryption key (KEK)
- * @n: Length of the wrapped key in 64-bit units; e.g., 2 = 128-bit = 16 bytes
- * @cipher: Wrapped key to be unwrapped, (n + 1) * 64 bit
- * @plain: Plaintext key, n * 64 bit
+ * @n: Length of the plaintext key in 64-bit units; e.g., 2 = 128-bit = 16
+ * bytes
+ * @cipher: Wrapped key to be unwrapped, (n + 1) * 64 bits
+ * @plain: Plaintext key, n * 64 bits
* Returns: 0 on success, -1 on failure (e.g., integrity verification failed)
*/
int aes_unwrap(const u8 *kek, int n, const u8 *cipher, u8 *plain)
@@ -167,28 +169,45 @@
/**
- * omac1_aes_128 - One-Key CBC MAC (OMAC1) hash with AES-128 (aka AES-CMAC)
+ * omac1_aes_128_vector - One-Key CBC MAC (OMAC1) hash with AES-128
* @key: 128-bit key for the hash operation
- * @data: Data buffer for which a MAC is determined
- * @data: Length of data buffer in bytes
+ * @num_elem: Number of elements in the data vector
+ * @addr: Pointers to the data areas
+ * @len: Lengths of the data blocks
* @mac: Buffer for MAC (128 bits, i.e., 16 bytes)
* Returns: 0 on success, -1 on failure
*/
-int omac1_aes_128(const u8 *key, const u8 *data, size_t data_len, u8 *mac)
+int omac1_aes_128_vector(const u8 *key, size_t num_elem,
+ const u8 *addr[], const size_t *len, u8 *mac)
{
void *ctx;
u8 cbc[BLOCK_SIZE], pad[BLOCK_SIZE];
- const u8 *pos = data;
- size_t i, left = data_len;
+ const u8 *pos, *end;
+ size_t i, e, left, total_len;
ctx = aes_encrypt_init(key, 16);
if (ctx == NULL)
return -1;
os_memset(cbc, 0, BLOCK_SIZE);
+ total_len = 0;
+ for (e = 0; e < num_elem; e++)
+ total_len += len[e];
+ left = total_len;
+
+ e = 0;
+ pos = addr[0];
+ end = pos + len[0];
+
while (left >= BLOCK_SIZE) {
- for (i = 0; i < BLOCK_SIZE; i++)
+ for (i = 0; i < BLOCK_SIZE; i++) {
cbc[i] ^= *pos++;
+ if (pos >= end) {
+ e++;
+ pos = addr[e];
+ end = pos + len[e];
+ }
+ }
if (left > BLOCK_SIZE)
aes_encrypt(ctx, cbc, cbc);
left -= BLOCK_SIZE;
@@ -198,9 +217,15 @@
aes_encrypt(ctx, pad, pad);
gf_mulx(pad);
- if (left || data_len == 0) {
- for (i = 0; i < left; i++)
+ if (left || total_len == 0) {
+ for (i = 0; i < left; i++) {
cbc[i] ^= *pos++;
+ if (pos >= end) {
+ e++;
+ pos = addr[e];
+ end = pos + len[e];
+ }
+ }
cbc[left] ^= 0x80;
gf_mulx(pad);
}
@@ -212,6 +237,24 @@
return 0;
}
+
+/**
+ * omac1_aes_128 - One-Key CBC MAC (OMAC1) hash with AES-128 (aka AES-CMAC)
+ * @key: 128-bit key for the hash operation
+ * @data: Data buffer for which a MAC is determined
+ * @data_len: Length of data buffer in bytes
+ * @mac: Buffer for MAC (128 bits, i.e., 16 bytes)
+ * Returns: 0 on success, -1 on failure
+ *
+ * This is a mode for using block cipher (AES in this case) for authentication.
+ * OMAC1 was standardized with the name CMAC by NIST in a Special Publication
+ * (SP) 800-38B.
+ */
+int omac1_aes_128(const u8 *key, const u8 *data, size_t data_len, u8 *mac)
+{
+ return omac1_aes_128_vector(key, 1, &data, &data_len, mac);
+}
+
#endif /* CONFIG_NO_AES_OMAC1 */
==== //depot/projects/vap/contrib/wpa_supplicant/aes_wrap.h#3 (text+ko) ====
@@ -7,7 +7,7 @@
* - AES-128 EAX mode encryption/decryption
* - AES-128 CBC
*
- * Copyright (c) 2003-2005, Jouni Malinen <j at w1.fi>
+ * Copyright (c) 2003-2007, 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
@@ -24,6 +24,8 @@
int aes_wrap(const u8 *kek, int n, const u8 *plain, u8 *cipher);
int aes_unwrap(const u8 *kek, int n, const u8 *cipher, u8 *plain);
+int omac1_aes_128_vector(const u8 *key, size_t num_elem,
+ const u8 *addr[], const size_t *len, u8 *mac);
int omac1_aes_128(const u8 *key, const u8 *data, size_t data_len, u8 *mac);
int aes_128_encrypt_block(const u8 *key, const u8 *in, u8 *out);
int aes_128_ctr_encrypt(const u8 *key, const u8 *nonce,
==== //depot/projects/vap/contrib/wpa_supplicant/asn1.c#3 (text+ko) ====
@@ -58,6 +58,10 @@
}
tmp &= 0x7f; /* number of subsequent octets */
hdr->length = 0;
+ if (tmp > 4) {
+ wpa_printf(MSG_DEBUG, "ASN.1: Too long length field");
+ return -1;
+ }
while (tmp--) {
if (pos >= end) {
wpa_printf(MSG_DEBUG, "ASN.1: Length "
@@ -71,7 +75,7 @@
hdr->length = tmp;
}
- if (pos + hdr->length > end) {
+ if (end < pos || hdr->length > (unsigned int) (end - pos)) {
wpa_printf(MSG_DEBUG, "ASN.1: Contents underflow");
return -1;
}
==== //depot/projects/vap/contrib/wpa_supplicant/common.c#3 (text+ko) ====
@@ -20,7 +20,6 @@
#ifdef CONFIG_DEBUG_FILE
static FILE *out_file = NULL;
#endif /* CONFIG_DEBUG_FILE */
-int wpa_debug_use_file = 0;
int wpa_debug_level = MSG_INFO;
int wpa_debug_show_keys = 0;
int wpa_debug_timestamp = 0;
@@ -344,32 +343,29 @@
}
-int wpa_debug_open_file(void)
+int wpa_debug_open_file(const char *path)
{
#ifdef CONFIG_DEBUG_FILE
- static int count = 0;
- char fname[64];
- if (!wpa_debug_use_file)
+ if (!path)
return 0;
-#ifdef _WIN32
- os_snprintf(fname, sizeof(fname), "\\Temp\\wpa_supplicant-log-%d.txt",
- count++);
-#else /* _WIN32 */
- os_snprintf(fname, sizeof(fname), "/tmp/wpa_supplicant-log-%d.txt",
- count++);
+ out_file = fopen(path, "a");
+ if (out_file == NULL) {
+ wpa_printf(MSG_ERROR, "wpa_debug_open_file: Failed to open "
+ "output file, using standard output");
+ return -1;
+ }
+#ifndef _WIN32
+ setvbuf(out_file, NULL, _IOLBF, 0);
#endif /* _WIN32 */
- out_file = fopen(fname, "w");
- return out_file == NULL ? -1 : 0;
-#else /* CONFIG_DEBUG_FILE */
+#endif /* CONFIG_DEBUG_FILE */
return 0;
-#endif /* CONFIG_DEBUG_FILE */
}
void wpa_debug_close_file(void)
{
#ifdef CONFIG_DEBUG_FILE
- if (!wpa_debug_use_file)
+ if (!out_file)
return;
fclose(out_file);
out_file = NULL;
==== //depot/projects/vap/contrib/wpa_supplicant/common.h#3 (text+ko) ====
@@ -10,8 +10,6 @@
* license.
*
* See README and COPYING for more details.
- *
- * $FreeBSD: src/contrib/wpa_supplicant/common.h,v 1.4 2007/07/11 15:58:51 sam Exp $
*/
#ifndef COMMON_H
@@ -266,12 +264,12 @@
#define wpa_hexdump_key(l,t,b,le) do { } while (0)
#define wpa_hexdump_ascii(l,t,b,le) do { } while (0)
#define wpa_hexdump_ascii_key(l,t,b,le) do { } while (0)
-#define wpa_debug_open_file() do { } while (0)
+#define wpa_debug_open_file(p) do { } while (0)
#define wpa_debug_close_file() do { } while (0)
#else /* CONFIG_NO_STDOUT_DEBUG */
-int wpa_debug_open_file(void);
+int wpa_debug_open_file(const char *path);
void wpa_debug_close_file(void);
/**
==== //depot/projects/vap/contrib/wpa_supplicant/config.c#3 (text+ko) ====
@@ -66,17 +66,19 @@
return os_strdup(value);
} else {
u8 *str;
- size_t hlen = os_strlen(value);
+ size_t tlen, hlen = os_strlen(value);
if (hlen & 1)
return NULL;
- *len = hlen / 2;
- str = os_malloc(*len);
+ tlen = hlen / 2;
+ str = os_malloc(tlen + 1);
if (str == NULL)
return NULL;
- if (hexstr2bin(value, str, *len)) {
+ if (hexstr2bin(value, str, tlen)) {
os_free(str);
return NULL;
}
+ str[tlen] = '\0';
+ *len = tlen;
return (char *) str;
}
}
@@ -1157,7 +1159,8 @@
{ INT_RANGE(ieee80211w, 0, 2) },
#endif /* CONFIG_IEEE80211W */
{ INT_RANGE(peerkey, 0, 1) },
- { INT_RANGE(mixed_cell, 0, 1) }
+ { INT_RANGE(mixed_cell, 0, 1) },
+ { INT_RANGE(frequency, 0, 10000) }
};
#undef OFFSET
==== //depot/projects/vap/contrib/wpa_supplicant/config_ssid.h#3 (text+ko) ====
@@ -851,6 +851,18 @@
IEEE80211W_REQUIRED = 2
} ieee80211w;
#endif /* CONFIG_IEEE80211W */
+
+ /**
+ * frequency - Channel frequency in megahertz (MHz) for IBSS
+ *
+ * This value is used to configure the initial channel for IBSS (adhoc)
+ * networks, e.g., 2412 = IEEE 802.11b/g channel 1. It is ignored in
+ * the infrastructure mode. In addition, this value is only used by the
+ * station that creates the IBSS. If an IBSS network with the
+ * configured SSID is already present, the frequency of the network
+ * will be used instead of this configured value.
+ */
+ int frequency;
};
int wpa_config_allowed_eap_method(struct wpa_ssid *ssid, int vendor,
==== //depot/projects/vap/contrib/wpa_supplicant/ctrl_iface.c#3 (text+ko) ====
@@ -1120,6 +1120,12 @@
wpa_s->disconnected = 0;
wpa_s->reassociate = 1;
wpa_supplicant_req_scan(wpa_s, 0, 0);
+ } else if (os_strcmp(buf, "RECONNECT") == 0) {
+ if (wpa_s->disconnected) {
+ wpa_s->disconnected = 0;
+ wpa_s->reassociate = 1;
+ wpa_supplicant_req_scan(wpa_s, 0, 0);
+ }
} else if (os_strncmp(buf, "PREAUTH ", 8) == 0) {
if (wpa_supplicant_ctrl_iface_preauth(wpa_s, buf + 8))
reply_len = -1;
@@ -1147,6 +1153,7 @@
reply_len = wpa_supplicant_ctrl_iface_list_networks(
wpa_s, reply, reply_size);
} else if (os_strcmp(buf, "DISCONNECT") == 0) {
+ wpa_s->reassociate = 0;
wpa_s->disconnected = 1;
wpa_supplicant_disassociate(wpa_s, REASON_DEAUTH_LEAVING);
} else if (os_strcmp(buf, "SCAN") == 0) {
==== //depot/projects/vap/contrib/wpa_supplicant/ctrl_iface_dbus.c#3 (text+ko) ====
@@ -30,6 +30,14 @@
#include "wpa_ctrl.h"
#include "eap.h"
+#define DBUS_VERSION (DBUS_VERSION_MAJOR << 8 | DBUS_VERSION_MINOR)
+#define DBUS_VER(major, minor) ((major) << 8 | (minor))
+
+#if DBUS_VERSION < DBUS_VER(1,1)
+#define dbus_watch_get_unix_fd dbus_watch_get_fd
+#endif
+
+
struct ctrl_iface_dbus_priv {
DBusConnection *con;
int should_dispatch;
@@ -92,7 +100,7 @@
return;
flags = dbus_watch_get_flags(watch);
- fd = dbus_watch_get_fd(watch);
+ fd = dbus_watch_get_unix_fd(watch);
eloop_register_sock(fd, EVENT_TYPE_EXCEPTION, process_watch_exception,
iface, watch);
@@ -117,7 +125,7 @@
int fd;
flags = dbus_watch_get_flags(watch);
- fd = dbus_watch_get_fd(watch);
+ fd = dbus_watch_get_unix_fd(watch);
eloop_unregister_sock(fd, EVENT_TYPE_EXCEPTION);
@@ -536,6 +544,10 @@
reply = wpas_dbus_iface_set_ap_scan(message, wpa_s);
else if (!strcmp(method, "state"))
reply = wpas_dbus_iface_get_state(message, wpa_s);
+ else if (!strcmp(method, "setBlobs"))
+ reply = wpas_dbus_iface_set_blobs(message, wpa_s);
+ else if (!strcmp(method, "removeBlobs"))
+ reply = wpas_dbus_iface_remove_blobs(message, wpa_s);
}
/* If the message was handled, send back the reply */
@@ -645,6 +657,7 @@
return;
}
dbus_connection_send(iface->con, signal, NULL);
+ dbus_message_unref(signal);
}
@@ -662,7 +675,7 @@
wpa_states old_state)
{
struct ctrl_iface_dbus_priv *iface;
- DBusMessage *signal;
+ DBusMessage *signal = NULL;
const char *path;
const char *new_state_str, *old_state_str;
@@ -707,7 +720,7 @@
wpa_printf(MSG_ERROR,
"wpa_supplicant_dbus_notify_state_change[dbus]: "
"couldn't convert state strings.");
- return;
+ goto out;
}
if (!dbus_message_append_args(signal,
@@ -720,8 +733,12 @@
"wpa_supplicant_dbus_notify_state_change[dbus]: "
"not enough memory to construct state change "
"signal.");
+ goto out;
}
dbus_connection_send(iface->con, signal, NULL);
+
+out:
+ dbus_message_unref(signal);
}
==== //depot/projects/vap/contrib/wpa_supplicant/ctrl_iface_dbus_handlers.c#3 (text+ko) ====
@@ -1203,3 +1203,129 @@
return reply;
}
+
+
+/**
+ * wpas_dbus_iface_set_blobs - Store named binary blobs (ie, for certificates)
+ * @message: Pointer to incoming dbus message
+ * @global: %wpa_supplicant global data structure
+ * Returns: A dbus message containing a UINT32 indicating success (1) or
+ * failure (0)
+ *
+ * Asks wpa_supplicant to internally store a one or more binary blobs.
+ */
+DBusMessage * wpas_dbus_iface_set_blobs(DBusMessage *message,
+ struct wpa_supplicant *wpa_s)
+{
+ DBusMessage *reply = NULL;
+ struct wpa_dbus_dict_entry entry = { .type = DBUS_TYPE_STRING };
+ DBusMessageIter iter, iter_dict;
+
+ dbus_message_iter_init(message, &iter);
+
+ if (!wpa_dbus_dict_open_read(&iter, &iter_dict))
+ return wpas_dbus_new_invalid_opts_error(message, NULL);
+
+ while (wpa_dbus_dict_has_dict_entry(&iter_dict)) {
+ struct wpa_config_blob *blob;
+
+ if (!wpa_dbus_dict_get_entry(&iter_dict, &entry)) {
+ reply = wpas_dbus_new_invalid_opts_error(message,
+ NULL);
+ break;
+ }
+
+ if (entry.type != DBUS_TYPE_ARRAY ||
+ entry.array_type != DBUS_TYPE_BYTE) {
+ reply = wpas_dbus_new_invalid_opts_error(
+ message, "Byte array expected.");
+ break;
+ }
+
+ if ((entry.array_len <= 0) || (entry.array_len > 65536) ||
+ !strlen(entry.key)) {
+ reply = wpas_dbus_new_invalid_opts_error(
+ message, "Invalid array size.");
+ break;
+ }
+
+ blob = os_zalloc(sizeof(*blob));
+ if (blob == NULL) {
+ reply = dbus_message_new_error(
+ message, WPAS_ERROR_ADD_ERROR,
+ "Not enough memory to add blob.");
+ break;
+ }
+ blob->data = os_zalloc(entry.array_len);
+ if (blob->data == NULL) {
+ reply = dbus_message_new_error(
+ message, WPAS_ERROR_ADD_ERROR,
+ "Not enough memory to add blob data.");
+ os_free(blob);
+ break;
+ }
+
+ blob->name = os_strdup(entry.key);
+ blob->len = entry.array_len;
+ os_memcpy(blob->data, (u8 *) entry.bytearray_value,
+ entry.array_len);
+ if (blob->name == NULL || blob->data == NULL) {
+ wpa_config_free_blob(blob);
+ reply = dbus_message_new_error(
+ message, WPAS_ERROR_ADD_ERROR,
+ "Error adding blob.");
+ break;
+ }
+
+ /* Success */
+ wpa_config_remove_blob(wpa_s->conf, blob->name);
+ wpa_config_set_blob(wpa_s->conf, blob);
+ wpa_dbus_dict_entry_clear(&entry);
+ }
+ wpa_dbus_dict_entry_clear(&entry);
+
+ return reply ? reply : wpas_dbus_new_success_reply(message);
+}
+
+
+/**
+ * wpas_dbus_iface_remove_blob - Remove named binary blobs
+ * @message: Pointer to incoming dbus message
+ * @global: %wpa_supplicant global data structure
+ * Returns: A dbus message containing a UINT32 indicating success (1) or
+ * failure (0)
+ *
+ * Asks wpa_supplicant to remove one or more previously stored binary blobs.
+ */
+DBusMessage * wpas_dbus_iface_remove_blobs(DBusMessage *message,
+ struct wpa_supplicant *wpa_s)
+{
+ DBusMessageIter iter, array;
+ char *err_msg = NULL;
+
+ dbus_message_iter_init(message, &iter);
+
+ if ((dbus_message_iter_get_arg_type (&iter) != DBUS_TYPE_ARRAY) ||
+ (dbus_message_iter_get_element_type (&iter) != DBUS_TYPE_STRING))
+ return wpas_dbus_new_invalid_opts_error(message, NULL);
+
+ dbus_message_iter_recurse(&iter, &array);
+ while (dbus_message_iter_get_arg_type(&array) == DBUS_TYPE_STRING) {
+ const char *name;
+
+ dbus_message_iter_get_basic(&array, &name);
+ if (!strlen(name))
+ err_msg = "Invalid blob name.";
+
+ if (wpa_config_remove_blob(wpa_s->conf, name) != 0)
+ err_msg = "Error removing blob.";
+ dbus_message_iter_next(&array);
+ }
+
+ if (err_msg) {
+ return dbus_message_new_error(message, WPAS_ERROR_REMOVE_ERROR,
+ err_msg);
+ }
+
+ return wpas_dbus_new_success_reply(message);
+}
==== //depot/projects/vap/contrib/wpa_supplicant/ctrl_iface_dbus_handlers.h#3 (text+ko) ====
@@ -71,6 +71,12 @@
DBusMessage * wpas_dbus_iface_get_state(DBusMessage *message,
struct wpa_supplicant *wpa_s);
+DBusMessage * wpas_dbus_iface_set_blobs(DBusMessage *message,
+ struct wpa_supplicant *wpa_s);
+
+DBusMessage * wpas_dbus_iface_remove_blobs(DBusMessage *message,
+ struct wpa_supplicant *wpa_s);
+
#endif /* CONFIG_CTRL_IFACE_DBUS */
#endif /* CTRL_IFACE_DBUS_HANDLERS_H */
==== //depot/projects/vap/contrib/wpa_supplicant/ctrl_iface_unix.c#3 (text+ko) ====
@@ -522,9 +522,42 @@
void wpa_supplicant_ctrl_iface_wait(struct ctrl_iface_priv *priv)
{
- wpa_printf(MSG_DEBUG, "CTRL_IFACE - %s - wait for monitor",
- priv->wpa_s->ifname);
- eloop_wait_for_read_sock(priv->sock);
+ char buf[256];
+ int res;
+ struct sockaddr_un from;
+ socklen_t fromlen = sizeof(from);
+
+ for (;;) {
+ wpa_printf(MSG_DEBUG, "CTRL_IFACE - %s - wait for monitor to "
+ "attach", priv->wpa_s->ifname);
+ eloop_wait_for_read_sock(priv->sock);
+
+ res = recvfrom(priv->sock, buf, sizeof(buf) - 1, 0,
+ (struct sockaddr *) &from, &fromlen);
+ if (res < 0) {
+ perror("recvfrom(ctrl_iface)");
+ continue;
+ }
+ buf[res] = '\0';
+
+ if (os_strcmp(buf, "ATTACH") == 0) {
+ /* handle ATTACH signal of first monitor interface */
+ if (!wpa_supplicant_ctrl_iface_attach(priv, &from,
+ fromlen)) {
+ sendto(priv->sock, "OK\n", 3, 0,
+ (struct sockaddr *) &from, fromlen);
+ /* OK to continue */
+ return;
+ } else {
+ sendto(priv->sock, "FAIL\n", 5, 0,
+ (struct sockaddr *) &from, fromlen);
+ }
+ } else {
+ /* return FAIL for all other signals */
+ sendto(priv->sock, "FAIL\n", 5, 0,
+ (struct sockaddr *) &from, fromlen);
+ }
+ }
}
==== //depot/projects/vap/contrib/wpa_supplicant/dbus-wpa_supplicant.conf#3 (text+ko) ====
@@ -8,10 +8,6 @@
<allow send_destination="fi.epitest.hostap.WPASupplicant"/>
<allow send_interface="fi.epitest.hostap.WPASupplicant"/>
</policy>
- <policy at_console="true">
- <allow send_destination="fi.epitest.hostap.WPASupplicant"/>
- <allow send_interface="fi.epitest.hostap.WPASupplicant"/>
- </policy>
<policy context="default">
<deny own="fi.epitest.hostap.WPASupplicant"/>
<deny send_destination="fi.epitest.hostap.WPASupplicant"/>
==== //depot/projects/vap/contrib/wpa_supplicant/defconfig#3 (text+ko) ====
@@ -209,7 +209,9 @@
#CONFIG_NO_AES_EXTRAS=y
# Select configuration backend:
-# file = text file (e.g., wpa_supplicant.conf)
+# file = text file (e.g., wpa_supplicant.conf; note: the configuration file
+# path is given on command line, not here; this option is just used to
+# select the backend that allows configuration files to be used)
# winreg = Windows registry (see win_example.reg for an example)
CONFIG_BACKEND=file
@@ -316,3 +318,6 @@
# wireless-dev.git tree).
#WIRELESS_DEV=/usr/src/wireless-dev
#CFLAGS += -I$(WIRELESS_DEV)/net/mac80211
+
+# Add support for writing debug log to a file (/tmp/wpa_supplicant-log-#.txt)
+#CONFIG_DEBUG_FILE=y
==== //depot/projects/vap/contrib/wpa_supplicant/doc/ctrl_iface.doxygen#3 (text) ====
@@ -203,6 +203,12 @@
Force reassociation.
+\subsection ctrl_iface_RECONNECT RECONNECT
+
+Connect if disconnected (i.e., like \c REASSOCIATE, but only connect
+if in disconnected state).
+
+
\subsection ctrl_iface_PREAUTH PREAUTH <BSSID>
Start pre-authentication with the given BSSID.
@@ -255,7 +261,8 @@
\subsection ctrl_iface_DISCONNECT DISCONNECT
-Disconnect and wait for \c REASSOCIATE command before connecting.
+Disconnect and wait for \c REASSOCIATE or \c RECONNECT command before
+connecting.
\subsection ctrl_iface_SCAN SCAN
==== //depot/projects/vap/contrib/wpa_supplicant/doc/docbook/wpa_background.8#3 (text) ====
@@ -3,7 +3,7 @@
.\" <http://shell.ipoline.com/~elmert/comp/docbook2X/>
.\" Please send any bug reports, improvements, comments, patches,
.\" etc. to Steve Cheng <steve at ggi-project.org>.
-.TH "WPA_BACKGROUND" "8" "28 May 2007" "" ""
+.TH "WPA_BACKGROUND" "8" "19 February 2008" "" ""
.SH NAME
wpa_background \- Background information on Wi-Fi Protected Access and IEEE 802.11i
==== //depot/projects/vap/contrib/wpa_supplicant/doc/docbook/wpa_cli.8#3 (text) ====
@@ -3,7 +3,7 @@
.\" <http://shell.ipoline.com/~elmert/comp/docbook2X/>
.\" Please send any bug reports, improvements, comments, patches,
.\" etc. to Steve Cheng <steve at ggi-project.org>.
-.TH "WPA_CLI" "8" "28 May 2007" "" ""
+.TH "WPA_CLI" "8" "19 February 2008" "" ""
.SH NAME
wpa_cli \- WPA command line client
@@ -112,7 +112,7 @@
Run in daemon mode executing the action file
based on events from wpa_supplicant. The specified file will
be executed with the first argument set to interface name and
-second to "CONNECT" or "DISCONNECT" depending on the event.
+second to "CONNECTED" or "DISCONNECTED" depending on the event.
This can be used to execute networking tools required to configure
the interface.
==== //depot/projects/vap/contrib/wpa_supplicant/doc/docbook/wpa_cli.sgml#3 (text) ====
@@ -140,7 +140,7 @@
<listitem><para>Run in daemon mode executing the action file
based on events from wpa_supplicant. The specified file will
be executed with the first argument set to interface name and
- second to "CONNECT" or "DISCONNECT" depending on the event.
+ second to "CONNECTED" or "DISCONNECTED" depending on the event.
This can be used to execute networking tools required to configure
the interface.</para>
==== //depot/projects/vap/contrib/wpa_supplicant/doc/docbook/wpa_passphrase.8#3 (text) ====
@@ -3,7 +3,7 @@
.\" <http://shell.ipoline.com/~elmert/comp/docbook2X/>
.\" Please send any bug reports, improvements, comments, patches,
.\" etc. to Steve Cheng <steve at ggi-project.org>.
-.TH "WPA_PASSPHRASE" "8" "28 May 2007" "" ""
+.TH "WPA_PASSPHRASE" "8" "19 February 2008" "" ""
.SH NAME
wpa_passphrase \- Generate a WPA PSK from an ASCII passphrase for a SSID
==== //depot/projects/vap/contrib/wpa_supplicant/doc/docbook/wpa_supplicant.8#3 (text) ====
@@ -3,13 +3,13 @@
.\" <http://shell.ipoline.com/~elmert/comp/docbook2X/>
.\" Please send any bug reports, improvements, comments, patches,
.\" etc. to Steve Cheng <steve at ggi-project.org>.
-.TH "WPA_SUPPLICANT" "8" "28 May 2007" "" ""
+.TH "WPA_SUPPLICANT" "8" "19 February 2008" "" ""
.SH NAME
wpa_supplicant \- Wi-Fi Protected Access client and IEEE 802.1X supplicant
.SH SYNOPSIS
-\fBwpa_supplicant\fR [ \fB-BddehLqqvw\fR ] [ \fB-i\fIifname\fB\fR ] [ \fB-c\fIconfig file\fB\fR ] [ \fB-D\fIdriver\fB\fR ] [ \fB-P\fIPID_file\fB\fR ]
+\fBwpa_supplicant\fR [ \fB-BddfhKLqqtuvwW\fR ] [ \fB-i\fIifname\fB\fR ] [ \fB-c\fIconfig file\fB\fR ] [ \fB-D\fIdriver\fB\fR ] [ \fB-P\fIPID_file\fB\fR ] [ \fB-f\fIoutput file\fB\fR ]
.SH "OVERVIEW"
.PP
@@ -272,6 +272,9 @@
\fB-D driver\fR
Driver to use. See the available options below.
.TP
+\fB-f output file\fR
+Log output to specified file instead of stdout.
+.TP
\fB-d\fR
Increase debugging verbosity (-dd even more).
.TP
==== //depot/projects/vap/contrib/wpa_supplicant/doc/docbook/wpa_supplicant.conf.5#3 (text) ====
@@ -3,7 +3,7 @@
.\" <http://shell.ipoline.com/~elmert/comp/docbook2X/>
.\" Please send any bug reports, improvements, comments, patches,
.\" etc. to Steve Cheng <steve at ggi-project.org>.
-.TH "WPA_SUPPLICANT.CONF" "5" "28 May 2007" "" ""
+.TH "WPA_SUPPLICANT.CONF" "5" "19 February 2008" "" ""
.SH NAME
wpa_supplicant.conf \- configuration file for wpa_supplicant
==== //depot/projects/vap/contrib/wpa_supplicant/doc/docbook/wpa_supplicant.conf.sgml#3 (text) ====
==== //depot/projects/vap/contrib/wpa_supplicant/doc/docbook/wpa_supplicant.sgml#3 (text) ====
@@ -12,11 +12,12 @@
<refsynopsisdiv>
<cmdsynopsis>
<command>wpa_supplicant</command>
- <arg>-BddehLqqvw</arg>
+ <arg>-BddfhKLqqtuvwW</arg>
<arg>-i<replaceable>ifname</replaceable></arg>
<arg>-c<replaceable>config file</replaceable></arg>
<arg>-D<replaceable>driver</replaceable></arg>
<arg>-P<replaceable>PID_file</replaceable></arg>
+ <arg>-f<replaceable>output file</replaceable></arg>
</cmdsynopsis>
</refsynopsisdiv>
<refsect1>
@@ -376,6 +377,13 @@
>>> TRUNCATED FOR MAIL (1000 lines) <<<
More information about the p4-projects
mailing list