wpa_supplicant: Adjust master for the 2.9 upgrade.
authorDaniel Fojt <df@neosystem.org>
Sun, 3 May 2020 11:20:47 +0000 (13:20 +0200)
committerSascha Wildner <saw@online.de>
Thu, 21 May 2020 19:32:12 +0000 (21:32 +0200)
- update README.DRAGONFLY and README.DELETED
- apply local modifications to contrib/wpa_supplicant
- adapt build to vendor update
- update manpages wpa_cli(8), wpa_passphrase(8) and wpa_supplicant(8)
- update /etc/wpa_supplicant.conf

Adapt rc script:

- add is_wired_interface() and is_ndis_interface() to network.subr (taken
  from FreeBSD)
- remove "security" warning
- don't consider DPorts wpa_supplicant anymore
- allow wpa_supplicant to be launched either for a single interface or in
  interface matching mode, ie. single daemon handling multiple interfaces
- add wpa_supplicant_* variables to /etc/defaults/rc.conf

25 files changed:
contrib/wpa_supplicant/README.DELETED
contrib/wpa_supplicant/README.DRAGONFLY
contrib/wpa_supplicant/src/common/dhcp.h
contrib/wpa_supplicant/src/crypto/crypto_openssl.c
contrib/wpa_supplicant/src/drivers/driver_ndis.c
contrib/wpa_supplicant/src/l2_packet/l2_packet_freebsd.c
contrib/wpa_supplicant/wpa_supplicant/main.c
contrib/wpa_supplicant/wpa_supplicant/op_classes.c
etc/defaults/rc.conf
etc/network.subr
etc/rc.d/wpa_supplicant
etc/wpa_supplicant.conf
share/man/man5/rc.conf.5
usr.sbin/802_11/Makefile.crypto
usr.sbin/802_11/Makefile.inc
usr.sbin/802_11/l2_packet.c [deleted file]
usr.sbin/802_11/wpa_cli/Makefile
usr.sbin/802_11/wpa_cli/wpa_cli.8
usr.sbin/802_11/wpa_passphrase/Makefile
usr.sbin/802_11/wpa_passphrase/wpa_passphrase.8
usr.sbin/802_11/wpa_supplicant/Makefile
usr.sbin/802_11/wpa_supplicant/Packet32.c [deleted file]
usr.sbin/802_11/wpa_supplicant/Packet32.h [deleted file]
usr.sbin/802_11/wpa_supplicant/ntddndis.h [deleted file]
usr.sbin/802_11/wpa_supplicant/wpa_supplicant.8

index 7e01475..cdaca86 100644 (file)
@@ -1,3 +1,5 @@
+CONTRIBUTIONS
+hs20/
 src/Makefile
 src/ap/Makefile
 src/common/Makefile
@@ -12,9 +14,11 @@ src/eap_peer/Makefile
 src/eap_server/Makefile
 src/eapol_auth/Makefile
 src/eapol_supp/Makefile
+src/fst/Makefile
 src/l2_packet/Makefile
 src/lib.rules
 src/p2p/Makefile
+src/pae/Makefile
 src/radius/.gitignore
 src/radius/Makefile
 src/rsn_supp/Makefile
@@ -31,7 +35,6 @@ wpa_supplicant/android.config
 wpa_supplicant/dbus/.gitignore
 wpa_supplicant/dbus/Makefile
 wpa_supplicant/dbus/dbus-wpa_supplicant.conf
-wpa_supplicant/dbus/fi.epitest.hostap.WPASupplicant.service.in
 wpa_supplicant/dbus/fi.w1.wpa_supplicant1.service.in
 wpa_supplicant/defconfig
 wpa_supplicant/doc/
@@ -39,9 +42,8 @@ wpa_supplicant/eap_proxy_dummy.mk
 wpa_supplicant/examples/
 wpa_supplicant/nmake.mak
 wpa_supplicant/systemd/
-wpa_supplicant/tests/
 wpa_supplicant/todo.txt
-wpa_supplicant/utils/log2pcap.py
+wpa_supplicant/utils/
 wpa_supplicant/vs2005/
 wpa_supplicant/win_example.reg
 wpa_supplicant/wpa_gui-qt4/
index 399c3d6..68e2570 100644 (file)
@@ -1,22 +1,29 @@
-WPA SUPPLICANT 2.1
+WPA SUPPLICANT 2.9
 ==================
 
-This directory contains a selected set of files from wpa_supplicant-2.1.
+This directory contains a selected set of files from wpa_supplicant-2.9.
 Original source can be downloaded from:
 
-       http://hostap.epitest.fi/wpa_supplicant/
+       https://w1.fi/wpa_supplicant/
 
-file = wpa_supplicant-2.1.tar.gz
-date = 23 May 2014
-size = 2222066
-sha1 = 25b9cb997cd9d2e84cf1ab73fac71b717cbb5f65
+file = wpa_supplicant-2.9.tar.gz
+date = 7 Aug 2019
+size = 3231785
+sha1 = b784c0e5e56889c81d027757a4623659bf15f9a8
 
 A list of files and directories removed is in README.DELETED
 
-The following files have been added or patched:
-===============================================
-       modified:   src/crypto/tls_openssl.c
-       modified:   src/drivers/driver_bsd.c
-       modified:   src/wps/wps_upnp.c
+The following files have been patched:
+======================================
+
+       modified:   src/common/dhcp.h
+       modified:   src/crypto/crypto_openssl.c
+       modified:   src/drivers/driver_ndis.c
+       modified:   src/l2_packet/l2_packet_freebsd.c
        modified:   wpa_supplicant/main.c
+       modified:   wpa_supplicant/op_classes.c
        modified:   wpa_supplicant/wpa_supplicant.c
+       modified:   wps/wps_upnp.c
+
+Note: modifications mostly taken from dports/security/wpa_supplicant/files/
+      (as of commit 13b53940+)
index e38512c..42b9297 100644 (file)
@@ -9,6 +9,22 @@
 #ifndef DHCP_H
 #define DHCP_H
 
+/*
+ * Translate Linux to DragonFly
+ */
+#define iphdr          ip
+#define ihl            ip_hl
+#define verson         ip_v
+#define tos            ip_tos
+#define tot_len                ip_len
+#define id             ip_id
+#define frag_off       ip_off
+#define ttl            ip_ttl
+#define protocol       ip_p
+#define check          ip_sum
+#define saddr          ip_src
+#define daddr          ip_dst
+
 #include <netinet/ip.h>
 #if __FAVOR_BSD
 #include <netinet/udp.h>
index bab33a5..df8f7a1 100644 (file)
@@ -438,7 +438,7 @@ int aes_wrap(const u8 *kek, size_t kek_len, int n, const u8 *plain, u8 *cipher)
        if (AES_set_encrypt_key(kek, kek_len << 3, &actx))
                return -1;
        res = AES_wrap_key(&actx, NULL, cipher, plain, n * 8);
-       OPENSSL_cleanse(&actx, sizeof(actx));
+       memset(&actx, 0, sizeof(actx));
        return res <= 0 ? -1 : 0;
 }
 
@@ -454,7 +454,7 @@ int aes_unwrap(const u8 *kek, size_t kek_len, int n, const u8 *cipher,
        if (AES_set_decrypt_key(kek, kek_len << 3, &actx))
                return -1;
        res = AES_unwrap_key(&actx, NULL, plain, cipher, (n + 1) * 8);
-       OPENSSL_cleanse(&actx, sizeof(actx));
+       memset(&actx, 0, sizeof(actx));
        return res <= 0 ? -1 : 0;
 }
 
index 5b4b924..6233c29 100644 (file)
@@ -2106,7 +2106,11 @@ static int wpa_driver_ndis_get_names(struct wpa_driver_ndis_data *drv)
                dlen = dpos - desc;
        else
                dlen = os_strlen(desc);
-       drv->adapter_desc = dup_binstr(desc, dlen);
+       drv->adapter_desc = os_malloc(dlen + 1);
+       if (drv->adapter_desc) {
+               os_memcpy(drv->adapter_desc, desc, dlen);
+               drv->adapter_desc[dlen] = '\0';
+       }
        os_free(b);
        if (drv->adapter_desc == NULL)
                return -1;
@@ -2274,7 +2278,11 @@ static int wpa_driver_ndis_get_names(struct wpa_driver_ndis_data *drv)
        } else {
                dlen = os_strlen(desc[i]);
        }
-       drv->adapter_desc = dup_binstr(desc[i], dlen);
+       drv->adapter_desc = os_malloc(dlen + 1);
+       if (drv->adapter_desc) {
+               os_memcpy(drv->adapter_desc, desc[i], dlen);
+               drv->adapter_desc[dlen] = '\0';
+       }
        os_free(names);
        if (drv->adapter_desc == NULL)
                return -1;
index aa83648..028bd22 100644 (file)
@@ -8,7 +8,8 @@
  */
 
 #include "includes.h"
-#if defined(__APPLE__) || defined(__GLIBC__)
+#include <sys/param.h>
+#if defined(__APPLE__) || defined(__GLIBC__) || defined(__DragonFly__)
 #include <net/bpf.h>
 #endif /* __APPLE__ */
 #include <pcap.h>
index 745eebe..30286af 100644 (file)
@@ -66,7 +66,7 @@ static void usage(void)
               "  -c = Configuration file\n"
               "  -C = ctrl_interface parameter (only used if -c is not)\n"
               "  -d = increase debugging verbosity (-dd even more)\n"
-              "  -D = driver name (can be multiple drivers: nl80211,wext)\n"
+              "  -D = driver name (can be multiple drivers: bsd,wired)\n"
               "  -e = entropy file\n"
 #ifdef CONFIG_DEBUG_FILE
               "  -f = log output to debug file instead of stdout\n"
@@ -105,8 +105,7 @@ static void usage(void)
               "  -W = wait for a control interface monitor before starting\n");
 
        printf("example:\n"
-              "  wpa_supplicant -D%s -iwlan0 -c/etc/wpa_supplicant.conf\n",
-              wpa_drivers[0] ? wpa_drivers[0]->name : "nl80211");
+                "  wpa_supplicant -Dbsd -iwlan0 -c/etc/wpa_supplicant.conf\n");
 #endif /* CONFIG_NO_STDOUT_DEBUG */
 }
 
index 6a85af4..d4170d1 100644 (file)
@@ -372,7 +372,7 @@ size_t wpas_supp_op_class_ie(struct wpa_supplicant *wpa_s,
 
        *ie_len = wpabuf_len(buf) - 2;
        if (*ie_len < 2 || wpabuf_len(buf) > len) {
-               wpa_printf(MSG_ERROR,
+               wpa_printf(MSG_WARNING,
                           "Failed to add supported operating classes IE");
                res = 0;
        } else {
index 4d6e913..b745c40 100644 (file)
@@ -157,6 +157,10 @@ sshd_flags=""                      # Additional flags for sshd.
 ftpd_enable="NO"               # Run stand-alone ftp daemon (or NO).
 ftpd_flags=""                  # Flags for ftpd, -D added implicitly.
 
+wpa_supplicant_enable="NO"             # Run wpa_supplicant.
+wpa_supplicant_program="/usr/sbin/wpa_supplicant"
+wpa_supplicant_flags="-c /etc/wpa_supplicant.conf"
+
 ### Network File System (NFS): ###
 ### Server-side options also need rpcbind_enable="YES" ###
 ###
index fe4e566..e382e2b 100644 (file)
@@ -639,6 +639,24 @@ hexprint()
        echo ${str}
 }
 
+is_wired_interface()
+{
+       local media
+
+       case `ifconfig $1 2>/dev/null` in
+               *media:?Ethernet*) media=Ethernet ;;
+       esac
+
+       test "$media" = "Ethernet"
+}
+
+is_ndis_interface()
+{
+       case `sysctl -n net.wlan.${1#wlan}.%parent 2>/dev/null` in
+               ndis*) true ;;
+               *) false ;;
+       esac
+}
 
 #
 # IPv6-specific setup subroutines
index bd5eeb8..b7d2962 100644 (file)
@@ -5,67 +5,39 @@
 
 # PROVIDE: wpa_supplicant
 # REQUIRE: mountcritremote
-# KEYWORD: nojail nostart
+# KEYWORD: nojail
 
 . /etc/rc.subr
 . /etc/network.subr
 
 name="wpa_supplicant"
-rcvar=
-command="/usr/sbin/wpa_supplicant"
-conf_file="/etc/wpa_supplicant.conf"
-start_postcmd="wpa_supplicant_postcmd"
+rcvar=`set_rcvar`
 
-wpa_supplicant_postcmd()
-{
-       if [ "${command}" = "/usr/sbin/wpa_supplicant" ];
-       then
-               cat << EOF
-         ==============================================================
-         =              WARNING  *  SECURITY  *  WARNING              =
-         ==============================================================
-
-The base wpa_supplicant is running.  This version is several releases behind
-and is not patched for security vulnerabilities.  It is highly recommended
-that the DPorts version be run instead.  Instructions to switch here:
-
-http://www.dragonflybsd.org/docs/docs/newhandbook/WirelessNetwork/#index1h2
-
-EOF
-               sleep 10
-       fi
-}
+load_rc_config $name
 
 ifn="$2"
-if [ -z "$ifn" ]; then
-       return 1
-fi
 
-is_ndis_interface()
-{
-       case `${SYSCTL_N} -q net.wlan.${1#wlan}.%parent` in
-               ndis*) true ;;
-               *) false ;;
+if [ -z "${ifn}" ]; then
+       # got no interface, run single daemon for multiple matching interfaces
+       # but ensure the feature is supported first
+       case `${wpa_supplicant_program} -h 2>/dev/null` in
+               *-M*) match_iface=1 ;;
+               *) return 1 ;;
        esac
-}
-
-if is_ndis_interface ${ifn}; then
-       driver="ndis"
+       flags="-M -i wlan* -D bsd -P /var/run/${name}.pid ${wpa_supplicant_flags}"
 else
-       driver="bsd"
-fi
-
-# For the moment, prefer the DPorts wpa_supplicant if it exists.
-# Since '/etc/defaults/rc.conf' does not set 'wpa_supplicant_program',
-# the following 'command' assignment is enough.
-if [ -x "/usr/local/sbin/wpa_supplicant" ]; then
-       command="/usr/local/sbin/wpa_supplicant"
+       # got particular interface, possibly called from ifconfig_up() in network.subr
+       # force "enable" to ensure run_rc_command below runs daemon for the interface
+       wpa_supplicant_enable="YES"
+       if is_wired_interface ${ifn} ; then
+               driver="wired"
+       elif is_ndis_interface ${ifn} ; then
+               driver="ndis"
+       else
+               driver="bsd"
+       fi
+       flags="-i ${ifn} -D ${driver} -P /var/run/${name}/${ifn}.pid ${wpa_supplicant_flags}"
 fi
 
-load_rc_config $name
-
-pid_file="/var/run/${name}/${ifn}.pid"
-command_args="-B -q -i $ifn -c $conf_file -D $driver -P $pid_file"
-required_files=$conf_file
-
+flags="-B -s ${flags}"
 run_rc_command "$1"
index 8e2d660..f685dab 100644 (file)
@@ -81,6 +81,8 @@ ctrl_interface=/var/run/wpa_supplicant
 # to make wpa_supplicant interoperate with these APs, the version number is set
 # to 1 by default. This configuration value can be used to set it to the new
 # version (2).
+# Note: When using MACsec, eapol_version shall be set to 3, which is
+# defined in IEEE Std 802.1X-2010.
 eapol_version=1
 
 # AP scanning/selection
@@ -96,7 +98,7 @@ eapol_version=1
 #    parameters (e.g., WPA IE generation); this mode can also be used with
 #    non-WPA drivers when using IEEE 802.1X mode; do not try to associate with
 #    APs (i.e., external program needs to control association). This mode must
-#    also be used when using wired Ethernet drivers.
+#    also be used when using wired Ethernet drivers (including MACsec).
 # 2: like 0, but associate with APs using security policy and SSID (but not
 #    BSSID); this can be used, e.g., with ndiswrapper and NDIS drivers to
 #    enable operation with hidden SSIDs and optimized roaming; in this mode,
@@ -104,12 +106,59 @@ eapol_version=1
 #    the driver reports successful association; each network block should have
 #    explicit security policy (i.e., only one option in the lists) for
 #    key_mgmt, pairwise, group, proto variables
+# Note: ap_scan=2 should not be used with the nl80211 driver interface (the
+# current Linux interface). ap_scan=1 is optimized work working with nl80211.
+# For finding networks using hidden SSID, scan_ssid=1 in the network block can
+# be used with nl80211.
 # When using IBSS or AP mode, ap_scan=2 mode can force the new network to be
 # created immediately regardless of scan results. ap_scan=1 mode will first try
 # to scan for existing networks and only if no matches with the enabled
 # networks are found, a new IBSS or AP mode network is created.
 ap_scan=1
 
+# Whether to force passive scan for network connection
+#
+# By default, scans will send out Probe Request frames on channels that allow
+# active scanning. This advertise the local station to the world. Normally this
+# is fine, but users may wish to do passive scanning where the radio should only
+# listen quietly for Beacon frames and not send any Probe Request frames. Actual
+# functionality may be driver dependent.
+#
+# This parameter can be used to force only passive scanning to be used
+# for network connection cases. It should be noted that this will slow
+# down scan operations and reduce likelihood of finding the AP. In
+# addition, some use cases will override this due to functional
+# requirements, e.g., for finding an AP that uses hidden SSID
+# (scan_ssid=1) or P2P device discovery.
+#
+# 0:  Do normal scans (allow active scans) (default)
+# 1:  Do passive scans.
+#passive_scan=0
+
+# MPM residency
+# By default, wpa_supplicant implements the mesh peering manager (MPM) for an
+# open mesh. However, if the driver can implement the MPM, you may set this to
+# 0 to use the driver version. When AMPE is enabled, the wpa_supplicant MPM is
+# always used.
+# 0: MPM lives in the driver
+# 1: wpa_supplicant provides an MPM which handles peering (default)
+#user_mpm=1
+
+# Maximum number of peer links (0-255; default: 99)
+# Maximum number of mesh peering currently maintained by the STA.
+#max_peer_links=99
+
+# Timeout in seconds to detect STA inactivity (default: 300 seconds)
+#
+# This timeout value is used in mesh STA to clean up inactive stations.
+#mesh_max_inactivity=300
+
+# cert_in_cb - Whether to include a peer certificate dump in events
+# This controls whether peer certificates for authentication server and
+# its certificate chain are included in EAP peer certificate events. This is
+# enabled by default.
+#cert_in_cb=1
+
 # EAP fast re-authentication
 # By default, fast re-authentication is enabled for all EAP methods that
 # support it. This variable can be used to disable fast re-authentication.
@@ -117,10 +166,13 @@ ap_scan=1
 fast_reauth=1
 
 # OpenSSL Engine support
-# These options can be used to load OpenSSL engines.
+# These options can be used to load OpenSSL engines in special or legacy
+# modes.
 # The two engines that are supported currently are shown below:
 # They are both from the opensc project (http://www.opensc.org/)
-# By default no engines are loaded.
+# By default the PKCS#11 engine is loaded if the client_cert or
+# private_key option appear to be a PKCS#11 URI, and these options
+# should not need to be used explicitly.
 # make the opensc engine available
 #opensc_engine_path=/usr/lib/opensc/engine_opensc.so
 # make the pkcs11 engine available
@@ -128,6 +180,16 @@ fast_reauth=1
 # configure the path to the pkcs11 module required by the pkcs11 engine
 #pkcs11_module_path=/usr/lib/pkcs11/opensc-pkcs11.so
 
+# OpenSSL cipher string
+#
+# This is an OpenSSL specific configuration option for configuring the default
+# ciphers. If not set, the value configured at build time ("DEFAULT:!EXP:!LOW"
+# by default) is used.
+# See https://www.openssl.org/docs/apps/ciphers.html for OpenSSL documentation
+# on cipher suite configuration. This is applicable only if wpa_supplicant is
+# built to use OpenSSL.
+#openssl_ciphers=DEFAULT:!EXP:!LOW
+
 # Dynamic EAP methods
 # If EAP methods were built dynamically as shared object files, they need to be
 # loaded here before being used in the network blocks. By default, EAP methods
@@ -136,7 +198,7 @@ fast_reauth=1
 #load_dynamic_eap=/usr/lib/wpa_supplicant/eap_md5.so
 
 # Driver interface parameters
-# This field can be used to configure arbitrary driver interace parameters. The
+# This field can be used to configure arbitrary driver interface parameters. The
 # format is specific to the selected driver interface. This field is not used
 # in most cases.
 #driver_param="field=value"
@@ -156,9 +218,15 @@ fast_reauth=1
 # Wi-Fi Protected Setup (WPS) parameters
 
 # Universally Unique IDentifier (UUID; see RFC 4122) of the device
-# If not configured, UUID will be generated based on the local MAC address.
+# If not configured, UUID will be generated based on the mechanism selected with
+# the auto_uuid parameter.
 #uuid=12345678-9abc-def0-1234-56789abcdef0
 
+# Automatic UUID behavior
+# 0 = generate static value based on the local MAC address (default)
+# 1 = generate a random UUID every time wpa_supplicant starts
+#auto_uuid=0
+
 # Device Name
 # User-friendly description of device; up to 32 octets encoded in UTF-8
 #device_name=Wireless Client
@@ -214,6 +282,14 @@ fast_reauth=1
 #      to external program(s)
 #wps_cred_processing=0
 
+# Whether to enable SAE (WPA3-Personal transition mode) automatically for
+# WPA2-PSK credentials received using WPS.
+# 0 = only add the explicitly listed WPA2-PSK configuration (default)
+# 1 = add both the WPA2-PSK and SAE configuration and enable PMF so that the
+#     station gets configured in WPA3-Personal transition mode (supports both
+#     WPA2-Personal (PSK) and WPA3-Personal (SAE) APs).
+#wps_cred_add_sae=0
+
 # Vendor attribute in WPS M1, e.g., Windows 7 Vertical Pairing
 # The vendor attribute contents to be added in M1 (hex string)
 #wps_vendor_ext_m1=000137100100020001
@@ -230,6 +306,11 @@ fast_reauth=1
 #wps_nfc_dh_privkey: Hexdump of DH Private Key
 #wps_nfc_dev_pw: Hexdump of Device Password
 
+# Priority for the networks added through WPS
+# This priority value will be set to each network profile that is added
+# by executing the WPS protocol.
+#wps_priority=0
+
 # Maximum number of BSS entries to keep in memory
 # Default: 200
 # This can be used to limit memory use on the BSS entries (cached scan
@@ -237,6 +318,15 @@ fast_reauth=1
 # of APs when using ap_scan=1 mode.
 #bss_max_count=200
 
+# BSS expiration age in seconds. A BSS will be removed from the local cache
+# if it is not in use and has not been seen for this time. Default is 180.
+#bss_expiration_age=180
+
+# BSS expiration after number of scans. A BSS will be removed from the local
+# cache if it is not seen in this number of scans.
+# Default is 2.
+#bss_expiration_scan_count=2
+
 # Automatic scan
 # This is an optional set of parameters for automatic scanning
 # within an interface in following format:
@@ -248,7 +338,9 @@ fast_reauth=1
 # up to the limit of 300 seconds (3, 9, 27 ... 300)
 # For periodic module, parameters would be <fixed interval>
 #autoscan=periodic:30
-# So a delay of 30 seconds will be applied between each scan
+# So a delay of 30 seconds will be applied between each scan.
+# Note: If sched_scan_plans are configured and supported by the driver,
+# autoscan is ignored.
 
 # filter_ssids - SSID-based scan result filtering
 # 0 = do not filter scan results (default)
@@ -259,12 +351,29 @@ fast_reauth=1
 # format: <backend name>[:<optional backend parameters>]
 #ext_password_backend=test:pw1=password|pw2=testing
 
+
+# Disable P2P functionality
+# p2p_disabled=1
+
 # Timeout in seconds to detect STA inactivity (default: 300 seconds)
 #
 # This timeout value is used in P2P GO mode to clean up
 # inactive stations.
 #p2p_go_max_inactivity=300
 
+# Passphrase length (8..63) for P2P GO
+#
+# This parameter controls the length of the random passphrase that is
+# generated at the GO. Default: 8.
+#p2p_passphrase_len=8
+
+# Extra delay between concurrent P2P search iterations
+#
+# This value adds extra delay in milliseconds between concurrent search
+# iterations to make p2p_find friendlier to concurrent operations by avoiding
+# it from taking 100% of radio resources. The default value is 500 ms.
+#p2p_search_delay=500
+
 # Opportunistic Key Caching (also known as Proactive Key Caching) default
 # This parameter can be used to set the default behavior for the
 # proactive_key_caching parameter. By default, OKC is disabled unless enabled
@@ -275,19 +384,26 @@ fast_reauth=1
 
 # Protected Management Frames default
 # This parameter can be used to set the default behavior for the ieee80211w
-# parameter. By default, PMF is disabled unless enabled with the global pmf=1/2
-# parameter or with the per-network ieee80211w=1/2 parameter. With pmf=1/2, PMF
-# is enabled/required by default, but can be disabled with the per-network
-# ieee80211w parameter.
+# parameter for RSN networks. By default, PMF is disabled unless enabled with
+# the global pmf=1/2 parameter or with the per-network ieee80211w=1/2 parameter.
+# With pmf=1/2, PMF is enabled/required by default, but can be disabled with the
+# per-network ieee80211w parameter. This global default value does not apply
+# for non-RSN networks (key_mgmt=NONE) since PMF is available only when using
+# RSN.
 #pmf=0
 
 # Enabled SAE finite cyclic groups in preference order
 # By default (if this parameter is not set), the mandatory group 19 (ECC group
-# defined over a 256-bit prime order field) is preferred, but other groups are
-# also enabled. If this parameter is set, the groups will be tried in the
-# indicated order. The group values are listed in the IANA registry:
+# defined over a 256-bit prime order field, NIST P-256) is preferred and groups
+# 20 (NIST P-384) and 21 (NIST P-521) are also enabled. If this parameter is
+# set, the groups will be tried in the indicated order.
+# The group values are listed in the IANA registry:
 # http://www.iana.org/assignments/ipsec-registry/ipsec-registry.xml#ipsec-registry-9
-#sae_groups=21 20 19 26 25
+# Note that groups 1, 2, 5, 22, 23, and 24 should not be used in production
+# purposes due limited security (see RFC 8247). Groups that are not as strong as
+# group 19 (ECC, NIST P-256) are unlikely to be useful for production use cases
+# since all implementations are required to support group 19.
+#sae_groups=19 20 21
 
 # Default value for DTIM period (if not overridden in network block)
 #dtim_period=2
@@ -315,11 +431,69 @@ fast_reauth=1
 # 1:  Scan current operating frequency if another VIF on the same radio
 #     is already associated.
 
+# MAC address policy default
+# 0 = use permanent MAC address
+# 1 = use random MAC address for each ESS connection
+# 2 = like 1, but maintain OUI (with local admin bit set)
+#
+# By default, permanent MAC address is used unless policy is changed by
+# the per-network mac_addr parameter. Global mac_addr=1 can be used to
+# change this default behavior.
+#mac_addr=0
+
+# Lifetime of random MAC address in seconds (default: 60)
+#rand_addr_lifetime=60
+
+# MAC address policy for pre-association operations (scanning, ANQP)
+# 0 = use permanent MAC address
+# 1 = use random MAC address
+# 2 = like 1, but maintain OUI (with local admin bit set)
+#preassoc_mac_addr=0
+
+# MAC address policy for GAS operations
+# 0 = use permanent MAC address
+# 1 = use random MAC address
+# 2 = like 1, but maintain OUI (with local admin bit set)
+#gas_rand_mac_addr=0
+
+# Lifetime of GAS random MAC address in seconds (default: 60)
+#gas_rand_addr_lifetime=60
+
 # Interworking (IEEE 802.11u)
 
 # Enable Interworking
 # interworking=1
 
+# Enable P2P GO advertisement of Interworking
+# go_interworking=1
+
+# P2P GO Interworking: Access Network Type
+# 0 = Private network
+# 1 = Private network with guest access
+# 2 = Chargeable public network
+# 3 = Free public network
+# 4 = Personal device network
+# 5 = Emergency services only network
+# 14 = Test or experimental
+# 15 = Wildcard
+#go_access_network_type=0
+
+# P2P GO Interworking: Whether the network provides connectivity to the Internet
+# 0 = Unspecified
+# 1 = Network provides connectivity to the Internet
+#go_internet=1
+
+# P2P GO Interworking: Group Venue Info (optional)
+# The available values are defined in IEEE Std 802.11-2016, 9.4.1.35.
+# Example values (group,type):
+# 0,0 = Unspecified
+# 1,7 = Convention Center
+# 1,13 = Coffee Shop
+# 2,0 = Unspecified Business
+# 7,1  Private Residence
+#go_venue_group=7
+#go_venue_type=1
+
 # Homogenous ESS identifier
 # If this is set, scans will be used to request response only from BSSes
 # belonging to the specified Homogeneous ESS. This is used only if interworking
@@ -334,6 +508,28 @@ fast_reauth=1
 #     matching network block
 #auto_interworking=0
 
+# GAS Address3 field behavior
+# 0 = P2P specification (Address3 = AP BSSID); default
+# 1 = IEEE 802.11 standard compliant (Address3 = Wildcard BSSID when
+#     sent to not-associated AP; if associated, AP BSSID)
+#gas_address3=0
+
+# Publish fine timing measurement (FTM) responder functionality in
+# the Extended Capabilities element bit 70.
+# Controls whether FTM responder functionality will be published by AP/STA.
+# Note that actual FTM responder operation is managed outside wpa_supplicant.
+# 0 = Do not publish; default
+# 1 = Publish
+#ftm_responder=0
+
+# Publish fine timing measurement (FTM) initiator functionality in
+# the Extended Capabilities element bit 71.
+# Controls whether FTM initiator functionality will be published by AP/STA.
+# Note that actual FTM initiator operation is managed outside wpa_supplicant.
+# 0 = Do not publish; default
+# 1 = Publish
+#ftm_initiator=0
+
 # credential block
 #
 # Each credential used for automatic network selection is configured as a set
@@ -368,6 +564,10 @@ fast_reauth=1
 #      (EAP-TLS). Full path to the file should be used since working
 #      directory may change when wpa_supplicant is run in the background.
 #
+#      Certificates from PKCS#11 tokens can be referenced by a PKCS#11 URI.
+#
+#      For example: private_key="pkcs11:manufacturer=piv_II;id=%01"
+#
 #      Alternatively, a named configuration blob can be used by setting
 #      this to blob://blob_name.
 #
@@ -378,6 +578,9 @@ fast_reauth=1
 #      used since working directory may change when wpa_supplicant is run
 #      in the background.
 #
+#      Keys in PKCS#11 tokens can be referenced by a PKCS#11 URI.
+#      For example: private_key="pkcs11:manufacturer=piv_II;id=%01"
+#
 #      Windows certificate store can be used by leaving client_cert out and
 #      configuring private_key in one of the following formats:
 #
@@ -416,6 +619,20 @@ fast_reauth=1
 #      pre-configured with the credential since the NAI Realm information
 #      may not be available or fetched.
 #
+# required_roaming_consortium: Required Roaming Consortium OI
+#      If required_roaming_consortium_len is non-zero, this field contains the
+#      Roaming Consortium OI that is required to be advertised by the AP for
+#      the credential to be considered matching.
+#
+# roaming_consortiums: Roaming Consortium OI(s) memberships
+#      This string field contains one or more comma delimited OIs (hexdump)
+#      identifying the roaming consortiums of which the provider is a member.
+#      The list is sorted from the most preferred one to the least preferred
+#      one. A match between the Roaming Consortium OIs advertised by an AP and
+#      the OIs in this list indicates that successful authentication is
+#      possible.
+#      (Hotspot 2.0 PerProviderSubscription/<X+>/HomeSP/RoamingConsortiumOI)
+#
 # eap: Pre-configured EAP method
 #      This optional field can be used to specify which EAP method will be
 #      used with this credential. If not set, the EAP method is selected
@@ -432,6 +649,61 @@ fast_reauth=1
 #      matching with the network. Multiple entries can be used to specify more
 #      than one SSID.
 #
+# roaming_partner: Roaming partner information
+#      This optional field can be used to configure preferences between roaming
+#      partners. The field is a string in following format:
+#      <FQDN>,<0/1 exact match>,<priority>,<* or country code>
+#      (non-exact match means any subdomain matches the entry; priority is in
+#      0..255 range with 0 being the highest priority)
+#
+# update_identifier: PPS MO ID
+#      (Hotspot 2.0 PerProviderSubscription/UpdateIdentifier)
+#
+# provisioning_sp: FQDN of the SP that provisioned the credential
+#      This optional field can be used to keep track of the SP that provisioned
+#      the credential to find the PPS MO (./Wi-Fi/<provisioning_sp>).
+#
+# Minimum backhaul threshold (PPS/<X+>/Policy/MinBackhauldThreshold/*)
+#      These fields can be used to specify minimum download/upload backhaul
+#      bandwidth that is preferred for the credential. This constraint is
+#      ignored if the AP does not advertise WAN Metrics information or if the
+#      limit would prevent any connection. Values are in kilobits per second.
+# min_dl_bandwidth_home
+# min_ul_bandwidth_home
+# min_dl_bandwidth_roaming
+# min_ul_bandwidth_roaming
+#
+# max_bss_load: Maximum BSS Load Channel Utilization (1..255)
+#      (PPS/<X+>/Policy/MaximumBSSLoadValue)
+#      This value is used as the maximum channel utilization for network
+#      selection purposes for home networks. If the AP does not advertise
+#      BSS Load or if the limit would prevent any connection, this constraint
+#      will be ignored.
+#
+# req_conn_capab: Required connection capability
+#      (PPS/<X+>/Policy/RequiredProtoPortTuple)
+#      This value is used to configure set of required protocol/port pairs that
+#      a roaming network shall support (include explicitly in Connection
+#      Capability ANQP element). This constraint is ignored if the AP does not
+#      advertise Connection Capability or if this constraint would prevent any
+#      network connection. This policy is not used in home networks.
+#      Format: <protocol>[:<comma-separated list of ports]
+#      Multiple entries can be used to list multiple requirements.
+#      For example, number of common TCP protocols:
+#      req_conn_capab=6,22,80,443
+#      For example, IPSec/IKE:
+#      req_conn_capab=17:500
+#      req_conn_capab=50
+#
+# ocsp: Whether to use/require OCSP to check server certificate
+#      0 = do not use OCSP stapling (TLS certificate status extension)
+#      1 = try to use OCSP stapling, but not require response
+#      2 = require valid OCSP stapling response
+#      3 = require valid OCSP stapling response for all not-trusted
+#          certificates in the server certificate chain
+#
+# sim_num: Identifier for which SIM to use in multi-SIM devices
+#
 # for example:
 #
 #cred={
@@ -461,6 +733,48 @@ fast_reauth=1
 # Hotspot 2.0
 # hs20=1
 
+# Scheduled scan plans
+#
+# A space delimited list of scan plans. Each scan plan specifies the scan
+# interval and number of iterations, delimited by a colon. The last scan plan
+# will run infinitely and thus must specify only the interval and not the number
+# of iterations.
+#
+# The driver advertises the maximum number of scan plans supported. If more scan
+# plans than supported are configured, only the first ones are set (up to the
+# maximum supported). The last scan plan that specifies only the interval is
+# always set as the last plan.
+#
+# If the scan interval or the number of iterations for a scan plan exceeds the
+# maximum supported, it will be set to the maximum supported value.
+#
+# Format:
+# sched_scan_plans=<interval:iterations> <interval:iterations> ... <interval>
+#
+# Example:
+# sched_scan_plans=10:100 20:200 30
+
+# Multi Band Operation (MBO) non-preferred channels
+# A space delimited list of non-preferred channels where each channel is a colon
+# delimited list of values.
+# Format:
+# non_pref_chan=<oper_class>:<chan>:<preference>:<reason>
+# Example:
+# non_pref_chan=81:5:10:2 81:1:0:2 81:9:0:2
+
+# MBO Cellular Data Capabilities
+# 1 = Cellular data connection available
+# 2 = Cellular data connection not available
+# 3 = Not cellular capable (default)
+#mbo_cell_capa=3
+
+# Optimized Connectivity Experience (OCE)
+# oce: Enable OCE features (bitmap)
+# Set BIT(0) to Enable OCE in non-AP STA mode (default; disabled if the driver
+#      does not indicate support for OCE in STA mode)
+# Set BIT(1) to Enable OCE in STA-CFON mode
+#oce=1
+
 # network block
 #
 # Each network (usually AP's sharing the same SSID) is configured as a separate
@@ -522,6 +836,17 @@ fast_reauth=1
 # an IBSS network with the configured SSID is already present, the frequency of
 # the network will be used instead of this configured value.
 #
+# pbss: Whether to use PBSS. Relevant to IEEE 802.11ad networks only.
+# 0 = do not use PBSS
+# 1 = use PBSS
+# 2 = don't care (not allowed in AP mode)
+# Used together with mode configuration. When mode is AP, it means to start a
+# PCP instead of a regular AP. When mode is infrastructure it means connect
+# to a PCP instead of AP. In this mode you can also specify 2 (don't care)
+# which means connect to either PCP or AP.
+# P2P_GO and P2P_GROUP_FORMATION modes must use PBSS in IEEE 802.11ad network.
+# For more details, see IEEE Std 802.11ad-2012.
+#
 # scan_freq: List of frequencies to scan
 # Space-separated list of frequencies in MHz to scan when searching for this
 # BSS. If the subset of channels used by the network is known, this option can
@@ -552,6 +877,8 @@ fast_reauth=1
 # bgscan="learn:<short bgscan interval in seconds>:<signal strength threshold>:
 # <long interval>[:<database file name>]"
 # bgscan="learn:30:-45:300:/etc/wpa_supplicant/network1.bgscan"
+# Explicitly disable bgscan by setting
+# bgscan=""
 #
 # This option can also be set outside of all network blocks for the bgscan
 # parameter to apply for all the networks that have no specific bgscan
@@ -560,6 +887,7 @@ fast_reauth=1
 # proto: list of accepted protocols
 # WPA = WPA/IEEE 802.11i/D3.0
 # RSN = WPA2/IEEE 802.11i (also WPA2 can be used as an alias for RSN)
+# Note that RSN is used also for WPA3.
 # If not set, this defaults to: WPA RSN
 #
 # key_mgmt: list of accepted authenticated key management protocols
@@ -568,8 +896,27 @@ fast_reauth=1
 # IEEE8021X = IEEE 802.1X using EAP authentication and (optionally) dynamically
 #      generated WEP keys
 # NONE = WPA is not used; plaintext or static WEP could be used
+# WPA-NONE = WPA-None for IBSS (deprecated; use proto=RSN key_mgmt=WPA-PSK
+#      instead)
+# FT-PSK = Fast BSS Transition (IEEE 802.11r) with pre-shared key
+# FT-EAP = Fast BSS Transition (IEEE 802.11r) with EAP authentication
+# FT-EAP-SHA384 = Fast BSS Transition (IEEE 802.11r) with EAP authentication
+#      and using SHA384
 # WPA-PSK-SHA256 = Like WPA-PSK but using stronger SHA256-based algorithms
 # WPA-EAP-SHA256 = Like WPA-EAP but using stronger SHA256-based algorithms
+# SAE = Simultaneous authentication of equals; pre-shared key/password -based
+#      authentication with stronger security than WPA-PSK especially when using
+#      not that strong password; a.k.a. WPA3-Personal
+# FT-SAE = SAE with FT
+# WPA-EAP-SUITE-B = Suite B 128-bit level
+# WPA-EAP-SUITE-B-192 = Suite B 192-bit level
+# OSEN = Hotspot 2.0 Rel 2 online signup connection
+# FILS-SHA256 = Fast Initial Link Setup with SHA256
+# FILS-SHA384 = Fast Initial Link Setup with SHA384
+# FT-FILS-SHA256 = FT and Fast Initial Link Setup with SHA256
+# FT-FILS-SHA384 = FT and Fast Initial Link Setup with SHA384
+# OWE = Opportunistic Wireless Encryption (a.k.a. Enhanced Open)
+# DPP = Device Provisioning Protocol
 # If not set, this defaults to: WPA-PSK WPA-EAP
 #
 # ieee80211w: whether management frame protection is enabled
@@ -582,6 +929,13 @@ fast_reauth=1
 # PMF required: ieee80211w=2 and key_mgmt=WPA-EAP-SHA256
 # (and similarly for WPA-PSK and WPA-WPSK-SHA256 if WPA2-Personal is used)
 #
+# ocv: whether operating channel validation is enabled
+# This is a countermeasure against multi-channel man-in-the-middle attacks.
+# Enabling this automatically also enables ieee80211w, if not yet enabled.
+# 0 = disabled (default)
+# 1 = enabled
+#ocv=1
+#
 # auth_alg: list of allowed IEEE 802.11 authentication algorithms
 # OPEN = Open System authentication (required for WPA/WPA2)
 # SHARED = Shared Key authentication (requires static WEP keys)
@@ -603,6 +957,14 @@ fast_reauth=1
 # WEP40 = WEP (Wired Equivalent Privacy) with 40-bit key [IEEE 802.11]
 # If not set, this defaults to: CCMP TKIP WEP104 WEP40
 #
+# group_mgmt: list of accepted group management ciphers for RSN (PMF)
+# AES-128-CMAC = BIP-CMAC-128
+# BIP-GMAC-128
+# BIP-GMAC-256
+# BIP-CMAC-256
+# If not set, no constraint on the cipher, i.e., accept whichever cipher the AP
+# indicates.
+#
 # psk: WPA preshared key; 256-bit pre-shared key
 # The key used in WPA-PSK mode can be entered either as 64 hex-digits, i.e.,
 # 32 bytes or as an ASCII passphrase (in which case, the real PSK will be
@@ -615,13 +977,75 @@ fast_reauth=1
 # startup and reconfiguration time can be optimized by generating the PSK only
 # only when the passphrase or SSID has actually changed.
 #
+# mem_only_psk: Whether to keep PSK/passphrase only in memory
+# 0 = allow psk/passphrase to be stored to the configuration file
+# 1 = do not store psk/passphrase to the configuration file
+#mem_only_psk=0
+#
+# sae_password: SAE password
+# This parameter can be used to set a password for SAE. By default, the
+# passphrase from the psk parameter is used if this separate parameter is not
+# used, but psk follows the WPA-PSK constraints (8..63 characters) even though
+# SAE passwords do not have such constraints.
+#
+# sae_password_id: SAE password identifier
+# This parameter can be used to set an identifier for the SAE password. By
+# default, no such identifier is used. If set, the specified identifier value
+# is used by the other peer to select which password to use for authentication.
+#
 # eapol_flags: IEEE 802.1X/EAPOL options (bit field)
 # Dynamic WEP key required for non-WPA mode
 # bit0 (1): require dynamically generated unicast WEP key
 # bit1 (2): require dynamically generated broadcast WEP key
 #      (3 = require both keys; default)
-# Note: When using wired authentication, eapol_flags must be set to 0 for the
-# authentication to be completed successfully.
+# Note: When using wired authentication (including MACsec drivers),
+# eapol_flags must be set to 0 for the authentication to be completed
+# successfully.
+#
+# macsec_policy: IEEE 802.1X/MACsec options
+# This determines how sessions are secured with MACsec (only for MACsec
+# drivers).
+# 0: MACsec not in use (default)
+# 1: MACsec enabled - Should secure, accept key server's advice to
+#    determine whether to use a secure session or not.
+#
+# macsec_integ_only: IEEE 802.1X/MACsec transmit mode
+# This setting applies only when MACsec is in use, i.e.,
+#  - macsec_policy is enabled
+#  - the key server has decided to enable MACsec
+# 0: Encrypt traffic (default)
+# 1: Integrity only
+#
+# macsec_replay_protect: IEEE 802.1X/MACsec replay protection
+# This setting applies only when MACsec is in use, i.e.,
+#  - macsec_policy is enabled
+#  - the key server has decided to enable MACsec
+# 0: Replay protection disabled (default)
+# 1: Replay protection enabled
+#
+# macsec_replay_window: IEEE 802.1X/MACsec replay protection window
+# This determines a window in which replay is tolerated, to allow receipt
+# of frames that have been misordered by the network.
+# This setting applies only when MACsec replay protection active, i.e.,
+#  - macsec_replay_protect is enabled
+#  - the key server has decided to enable MACsec
+# 0: No replay window, strict check (default)
+# 1..2^32-1: number of packets that could be misordered
+#
+# macsec_port: IEEE 802.1X/MACsec port
+# Port component of the SCI
+# Range: 1-65534 (default: 1)
+#
+# mka_cak, mka_ckn, and mka_priority: IEEE 802.1X/MACsec pre-shared key mode
+# This allows to configure MACsec with a pre-shared key using a (CAK,CKN) pair.
+# In this mode, instances of wpa_supplicant can act as MACsec peers. The peer
+# with lower priority will become the key server and start distributing SAKs.
+# mka_cak (CAK = Secure Connectivity Association Key) takes a 16-byte (128-bit)
+# hex-string (32 hex-digits) or a 32-byte (256-bit) hex-string (64 hex-digits)
+# mka_ckn (CKN = CAK Name) takes a 1..32-bytes (8..256 bit) hex-string
+# (2..64 hex-digits)
+# mka_priority (Priority of MKA Actor) is in 0..255 range with 255 being
+# default priority
 #
 # mixed_cell: This option can be used to configure whether so called mixed
 # cells, i.e., networks that use both plaintext and encryption in the same
@@ -634,22 +1058,28 @@ fast_reauth=1
 # 0 = disabled (default unless changed with the global okc parameter)
 # 1 = enabled
 #
+# ft_eap_pmksa_caching:
+# Whether FT-EAP PMKSA caching is allowed
+# 0 = do not try to use PMKSA caching with FT-EAP (default)
+# 1 = try to use PMKSA caching with FT-EAP
+# This controls whether to try to use PMKSA caching with FT-EAP for the
+# FT initial mobility domain association.
+#ft_eap_pmksa_caching=0
+#
 # wep_key0..3: Static WEP key (ASCII in double quotation, e.g. "abcde" or
 # hex without quotation, e.g., 0102030405)
 # wep_tx_keyidx: Default WEP key index (TX) (0..3)
 #
-# peerkey: Whether PeerKey negotiation for direct links (IEEE 802.11e DLS) is
-# allowed. This is only used with RSN/WPA2.
-# 0 = disabled (default)
-# 1 = enabled
-#peerkey=1
-#
 # wpa_ptk_rekey: Maximum lifetime for PTK in seconds. This can be used to
 # enforce rekeying of PTK to mitigate some attacks against TKIP deficiencies.
 #
+# group_rekey: Group rekeying time in seconds. This value, if non-zero, is used
+# as the dot11RSNAConfigGroupRekeyTime parameter when operating in
+# Authenticator role in IBSS, or in AP and mesh modes.
+#
 # Following fields are only used with internal EAP implementation.
 # eap: space-separated list of accepted EAP methods
-#      MD5 = EAP-MD5 (unsecure and does not generate keying material ->
+#      MD5 = EAP-MD5 (insecure and does not generate keying material ->
 #                      cannot be used with WPA; to be used as a Phase 2 method
 #                      with EAP-PEAP or EAP-TTLS)
 #       MSCHAPV2 = EAP-MSCHAPv2 (cannot be used separately with WPA; to be used
@@ -740,17 +1170,57 @@ fast_reauth=1
 #      automatically converted into DH params.
 # subject_match: Substring to be matched against the subject of the
 #      authentication server certificate. If this string is set, the server
-#      sertificate is only accepted if it contains this string in the subject.
+#      certificate is only accepted if it contains this string in the subject.
 #      The subject string is in following format:
 #      /C=US/ST=CA/L=San Francisco/CN=Test AS/emailAddress=as@example.com
+#      Note: Since this is a substring match, this cannot be used securely to
+#      do a suffix match against a possible domain name in the CN entry. For
+#      such a use case, domain_suffix_match or domain_match should be used
+#      instead.
 # altsubject_match: Semicolon separated string of entries to be matched against
 #      the alternative subject name of the authentication server certificate.
-#      If this string is set, the server sertificate is only accepted if it
+#      If this string is set, the server certificate is only accepted if it
 #      contains one of the entries in an alternative subject name extension.
 #      altSubjectName string is in following format: TYPE:VALUE
 #      Example: EMAIL:server@example.com
 #      Example: DNS:server.example.com;DNS:server2.example.com
 #      Following types are supported: EMAIL, DNS, URI
+# domain_suffix_match: Constraint for server domain name. If set, this FQDN is
+#      used as a suffix match requirement for the AAA server certificate in
+#      SubjectAltName dNSName element(s). If a matching dNSName is found, this
+#      constraint is met. If no dNSName values are present, this constraint is
+#      matched against SubjectName CN using same suffix match comparison.
+#
+#      Suffix match here means that the host/domain name is compared one label
+#      at a time starting from the top-level domain and all the labels in
+#      domain_suffix_match shall be included in the certificate. The
+#      certificate may include additional sub-level labels in addition to the
+#      required labels.
+#
+#      More than one match string can be provided by using semicolons to
+#      separate the strings (e.g., example.org;example.com). When multiple
+#      strings are specified, a match with any one of the values is considered
+#      a sufficient match for the certificate, i.e., the conditions are ORed
+#      together.
+#
+#      For example, domain_suffix_match=example.com would match
+#      test.example.com but would not match test-example.com.
+# domain_match: Constraint for server domain name
+#      If set, this FQDN is used as a full match requirement for the
+#      server certificate in SubjectAltName dNSName element(s). If a
+#      matching dNSName is found, this constraint is met. If no dNSName
+#      values are present, this constraint is matched against SubjectName CN
+#      using same full match comparison. This behavior is similar to
+#      domain_suffix_match, but has the requirement of a full match, i.e.,
+#      no subdomains or wildcard matches are allowed. Case-insensitive
+#      comparison is used, so "Example.com" matches "example.com", but would
+#      not match "test.Example.com".
+#
+#      More than one match string can be provided by using semicolons to
+#      separate the strings (e.g., example.org;example.com). When multiple
+#      strings are specified, a match with any one of the values is considered
+#      a sufficient match for the certificate, i.e., the conditions are ORed
+#      together.
 # phase1: Phase1 (outer authentication, i.e., TLS tunnel) parameters
 #      (string with field-value pairs, e.g., "peapver=0" or
 #      "peapver=1 peaplabel=1")
@@ -779,9 +1249,20 @@ fast_reauth=1
 #       * 2 = require cryptobinding
 #      EAP-WSC (WPS) uses following options: pin=<Device Password> or
 #      pbc=1.
+#
+#      For wired IEEE 802.1X authentication, "allow_canned_success=1" can be
+#      used to configure a mode that allows EAP-Success (and EAP-Failure)
+#      without going through authentication step. Some switches use such
+#      sequence when forcing the port to be authorized/unauthorized or as a
+#      fallback option if the authentication server is unreachable. By default,
+#      wpa_supplicant discards such frames to protect against potential attacks
+#      by rogue devices, but this option can be used to disable that protection
+#      for cases where the server/authenticator does not need to be
+#      authenticated.
 # phase2: Phase2 (inner authentication with TLS tunnel) parameters
 #      (string with field-value pairs, e.g., "auth=MSCHAPV2" for EAP-PEAP or
-#      "autheap=MSCHAPV2 autheap=MD5" for EAP-TTLS)
+#      "autheap=MSCHAPV2 autheap=MD5" for EAP-TTLS). "mschapv2_retry=0" can be
+#      used to disable MSCHAPv2 password retry in authentication failure cases.
 #
 # TLS-based methods can use the following parameters to control TLS behavior
 # (these are normally in the phase1 parameter, but can be used also in the
@@ -797,9 +1278,32 @@ fast_reauth=1
 # tls_disable_session_ticket=0 - allow TLS Session Ticket extension to be used
 #      Note: If not set, this is automatically set to 1 for EAP-TLS/PEAP/TTLS
 #      as a workaround for broken authentication server implementations unless
-#      EAP workarounds are disabled with eap_workarounds=0.
+#      EAP workarounds are disabled with eap_workaround=0.
 #      For EAP-FAST, this must be set to 0 (or left unconfigured for the
 #      default value to be used automatically).
+# tls_disable_tlsv1_0=1 - disable use of TLSv1.0
+# tls_disable_tlsv1_0=0 - explicitly enable use of TLSv1.0 (this allows
+#      systemwide TLS policies to be overridden)
+# tls_disable_tlsv1_1=1 - disable use of TLSv1.1 (a workaround for AAA servers
+#      that have issues interoperating with updated TLS version)
+# tls_disable_tlsv1_1=0 - explicitly enable use of TLSv1.1 (this allows
+#      systemwide TLS policies to be overridden)
+# tls_disable_tlsv1_2=1 - disable use of TLSv1.2 (a workaround for AAA servers
+#      that have issues interoperating with updated TLS version)
+# tls_disable_tlsv1_2=0 - explicitly enable use of TLSv1.2 (this allows
+#      systemwide TLS policies to be overridden)
+# tls_disable_tlsv1_3=1 - disable use of TLSv1.3 (a workaround for AAA servers
+#      that have issues interoperating with updated TLS version)
+# tls_disable_tlsv1_3=0 - enable TLSv1.3 (experimental - disabled by default)
+# tls_ext_cert_check=0 - No external server certificate validation (default)
+# tls_ext_cert_check=1 - External server certificate validation enabled; this
+#      requires an external program doing validation of server certificate
+#      chain when receiving CTRL-RSP-EXT_CERT_CHECK event from the control
+#      interface and report the result of the validation with
+#      CTRL-RSP_EXT_CERT_CHECK.
+# tls_suiteb=0 - do not apply Suite B 192-bit constraints on TLS (default)
+# tls_suiteb=1 - apply Suite B 192-bit constraints on TLS; this is used in
+#      particular when using Suite B with RSA keys of >= 3K (3072) bits
 #
 # Following certificate/private key fields are used in inner Phase2
 # authentication when using EAP-TTLS or EAP-PEAP.
@@ -813,9 +1317,12 @@ fast_reauth=1
 # private_key2_passwd: Password for private key file
 # dh_file2: File path to DH/DSA parameters file (in PEM format)
 # subject_match2: Substring to be matched against the subject of the
-#      authentication server certificate.
-# altsubject_match2: Substring to be matched against the alternative subject
-#      name of the authentication server certificate.
+#      authentication server certificate. See subject_match for more details.
+# altsubject_match2: Semicolon separated string of entries to be matched
+#      against the alternative subject name of the authentication server
+#      certificate. See altsubject_match documentation for more details.
+# domain_suffix_match2: Constraint for server domain name. See
+#      domain_suffix_match for more details.
 #
 # fragment_size: Maximum EAP fragment size in bytes (default 1398).
 #      This value limits the fragment size for EAP methods that support
@@ -828,6 +1335,14 @@ fast_reauth=1
 #      0 = do not use OCSP stapling (TLS certificate status extension)
 #      1 = try to use OCSP stapling, but not require response
 #      2 = require valid OCSP stapling response
+#      3 = require valid OCSP stapling response for all not-trusted
+#          certificates in the server certificate chain
+#
+# openssl_ciphers: OpenSSL specific cipher configuration
+#      This can be used to override the global openssl_ciphers configuration
+#      parameter (see above).
+#
+# erp: Whether EAP Re-authentication Protocol (ERP) is enabled
 #
 # EAP-FAST variables:
 # pac_file: File path for the PAC entries. wpa_supplicant will need to be able
@@ -855,6 +1370,13 @@ fast_reauth=1
 # number of authentication servers. Strict EAP conformance mode can be
 # configured by disabling workarounds with eap_workaround=0.
 
+# update_identifier: PPS MO ID
+#      (Hotspot 2.0 PerProviderSubscription/UpdateIdentifier)
+#
+# roaming_consortium_selection: Roaming Consortium Selection
+#      The matching Roaming Consortium OI that was used to generate this
+#      network profile.
+
 # Station inactivity limit
 #
 # If a station does not send anything in ap_max_inactivity seconds, an
@@ -878,6 +1400,22 @@ fast_reauth=1
 # Beacon interval (default: 100 TU)
 #beacon_int=100
 
+# WPS in AP mode
+# 0 = WPS enabled and configured (default)
+# 1 = WPS disabled
+#wps_disabled=0
+
+# FILS DH Group
+# 0 = PFS disabled with FILS shared key authentication (default)
+# 1-65535 = DH Group to use for FILS PFS
+#fils_dh_group=0
+
+# MAC address policy
+# 0 = use permanent MAC address
+# 1 = use random MAC address for each ESS connection
+# 2 = like 1, but maintain OUI (with local admin bit set)
+#mac_addr=0
+
 # disable_ht: Whether HT (802.11n) should be disabled.
 # 0 = HT enabled (if AP supports it)
 # 1 = HT disabled
@@ -890,6 +1428,14 @@ fast_reauth=1
 # 0 = SGI enabled (if AP supports it)
 # 1 = SGI disabled
 #
+# disable_ldpc: Whether LDPC should be disabled.
+# 0 = LDPC enabled (if AP supports it)
+# 1 = LDPC disabled
+#
+# ht40_intolerant: Whether 40 MHz intolerant should be indicated.
+# 0 = 40 MHz tolerant (default)
+# 1 = 40 MHz intolerant
+#
 # ht_mcs:  Configure allowed MCS rates.
 #  Parsed as an array of bytes, in base-16 (ascii-hex)
 # ht_mcs=""                                   // Use all available (default)
@@ -901,10 +1447,27 @@ fast_reauth=1
 # 0  = Enable MAX-AMSDU if hardware supports it.
 # 1  = Disable AMSDU
 #
+# ampdu_factor: Maximum A-MPDU Length Exponent
+# Value: 0-3, see 7.3.2.56.3 in IEEE Std 802.11n-2009.
+#
 # ampdu_density:  Allow overriding AMPDU density configuration.
 #  Treated as hint by the kernel.
 # -1 = Do not make any changes.
 # 0-3 = Set AMPDU density (aka factor) to specified value.
+#
+# tx_stbc: Allow overriding STBC support for TX streams
+# Value: 0-1, see IEEE Std 802.11-2016, 9.4.2.56.2.
+# -1 = Do not make any changes (default)
+# 0 = Set if not supported
+# 1 = Set if supported
+#
+# rx_stbc: Allow overriding STBC support for RX streams
+# Value: 0-3, see IEEE Std 802.11-2016, 9.4.2.56.2.
+# -1 = Do not make any changes (default)
+# 0 = Set if not supported
+# 1 = Set for support of one spatial stream
+# 2 = Set for support of one and two spatial streams
+# 3 = Set for support of one, two and three spatial streams
 
 # disable_vht: Whether VHT should be disabled.
 # 0 = VHT enabled (if AP supports it)
@@ -920,6 +1483,45 @@ fast_reauth=1
 #  2: MCS 0-9
 #  3: not supported
 
+# multi_ap_backhaul_sta: Multi-AP backhaul STA functionality
+# 0 = normal STA (default)
+# 1 = backhaul STA
+# A backhaul STA sends the Multi-AP IE, fails to associate if the AP does not
+# support Multi-AP, and sets 4-address mode if it does. Thus, the netdev can be
+# added to a bridge to allow forwarding frames over this backhaul link.
+
+##### Fast Session Transfer (FST) support #####################################
+#
+# The options in this section are only available when the build configuration
+# option CONFIG_FST is set while compiling wpa_supplicant. They allow this
+# interface to be a part of FST setup.
+#
+# FST is the transfer of a session from a channel to another channel, in the
+# same or different frequency bands.
+#
+# For details, see IEEE Std 802.11ad-2012.
+
+# Identifier of an FST Group  the interface belongs to.
+#fst_group_id=bond0
+
+# Interface priority within the FST Group.
+# Announcing a higher priority for an interface means declaring it more
+# preferable for FST switch.
+# fst_priority is in 1..255 range with 1 being the lowest priority.
+#fst_priority=100
+
+# Default LLT value for this interface in milliseconds. The value used in case
+# no value provided during session setup. Default is 50 msec.
+# fst_llt is in 1..4294967 range (due to spec limitation, see 10.32.2.2
+# Transitioning between states).
+#fst_llt=100
+
+# BSS Transition Management
+# disable_btm - Disable BSS transition management in STA
+# Set to 0 to enable BSS transition management (default behavior)
+# Set to 1 to disable BSS transition management
+#disable_btm=0
+
 # Example blocks:
 
 # Simple case: WPA-PSK, PSK as an ASCII passphrase, allow all valid ciphers
@@ -1190,6 +1792,23 @@ fast_reauth=1
 #      psk="secret passphrase"
 #}
 
+# open mesh network
+#network={
+#      ssid="test mesh"
+#      mode=5
+#      frequency=2437
+#      key_mgmt=NONE
+#}
+
+# secure (SAE + AMPE) network
+#network={
+#      ssid="secure mesh"
+#      mode=5
+#      frequency=2437
+#      key_mgmt=SAE
+#      psk="very secret passphrase"
+#}
+
 
 # Catch all example that allows more or less all configuration modes
 #network={
@@ -1219,22 +1838,10 @@ fast_reauth=1
 #      group=CCMP TKIP
 #      identity="user@example.com"
 #      ca_cert="/etc/cert/ca.pem"
-#      client_cert="/etc/cert/user.pem"
 #
-#      engine=1
-#
-#      # The engine configured here must be available. Look at
-#      # OpenSSL engine support in the global section.
-#      # The key available through the engine must be the private key
-#      # matching the client certificate configured above.
-#
-#      # use the opensc engine
-#      #engine_id="opensc"
-#      #key_id="45"
-#
-#      # use the pkcs11 engine
-#      engine_id="pkcs11"
-#      key_id="id_45"
+#      # Certificate and/or key identified by PKCS#11 URI (RFC7512)
+#      client_cert="pkcs11:manufacturer=piv_II;id=%01"
+#      private_key="pkcs11:manufacturer=piv_II;id=%01"
 #
 #      # Optional PIN configuration; this can be left out and PIN will be
 #      # asked through the control interface
@@ -1265,9 +1872,49 @@ fast_reauth=1
 #      key_mgmt=NONE
 #}
 
+# Example configuration blacklisting two APs - these will be ignored
+# for this network.
+#network={
+#      ssid="example"
+#      psk="very secret passphrase"
+#      bssid_blacklist=02:11:22:33:44:55 02:22:aa:44:55:66
+#}
+
+# Example configuration limiting AP selection to a specific set of APs;
+# any other AP not matching the masked address will be ignored.
+#network={
+#      ssid="example"
+#      psk="very secret passphrase"
+#      bssid_whitelist=02:55:ae:bc:00:00/ff:ff:ff:ff:00:00 00:00:77:66:55:44/00:00:ff:ff:ff:ff
+#}
 
 # Example config file that will only scan on channel 36.
 #freq_list=5180
 #network={
 #      key_mgmt=NONE
 #}
+
+
+# Example configuration using EAP-TTLS for authentication and key
+# generation for MACsec
+#network={
+#      key_mgmt=IEEE8021X
+#      eap=TTLS
+#      phase2="auth=PAP"
+#      anonymous_identity="anonymous@example.com"
+#      identity="user@example.com"
+#      password="secretr"
+#      ca_cert="/etc/cert/ca.pem"
+#      eapol_flags=0
+#      macsec_policy=1
+#}
+
+# Example configuration for MACsec with preshared key
+#network={
+#      key_mgmt=NONE
+#      eapol_flags=0
+#      macsec_policy=1
+#      mka_cak=0123456789ABCDEF0123456789ABCDEF
+#      mka_ckn=6162636465666768696A6B6C6D6E6F707172737475767778797A303132333435
+#      mka_priority=128
+#}
index cf89b7a..1421229 100644 (file)
@@ -24,7 +24,7 @@
 .\"
 .\" $FreeBSD: src/share/man/man5/rc.conf.5,v 1.197 2003/07/28 13:56:00 mbr Exp $
 .\"
-.Dd April 29, 2020
+.Dd May 21, 2020
 .Dt RC.CONF 5
 .Os
 .Sh NAME
@@ -790,6 +790,8 @@ This will start
 See
 .Xr wpa_supplicant.conf 5
 for configuring authentication information.
+But see also
+.Va wpa_supplicant_enable .
 .Pp
 Finally, you can add
 .Xr ifconfig 8
@@ -1735,6 +1737,28 @@ is set to
 these are the flags to pass to the
 .Xr rarpd 8
 daemon.
+.It Va wpa_supplicant_enable
+.Pq Vt bool
+If set to
+.Dq Li YES ,
+run the
+.Xr wpa_supplicant 8
+daemon in
+.Dq interface matching mode
+at system boot time.
+.It Va wpa_supplicant_program
+.Pq Vt str
+Path to
+.Xr wpa_supplicant 8 .
+.It Va wpa_supplicant_flags
+.Pq Vt str
+If
+.Va wpa_supplicant_enable
+is set to
+.Dq Li YES ,
+these are the flags to pass to the
+.Xr wpa_supplicant 8
+daemon.
 .It Va bootparamd_enable
 .Pq Vt bool
 If set to
@@ -2773,6 +2797,7 @@ By default no flags are passed.
 .Xr syslogd 8 ,
 .Xr sysvipcd 8 ,
 .Xr vinum 8 ,
+.Xr wpa_supplicant 8 ,
 .Xr yp 8 ,
 .Xr ypbind 8 ,
 .Xr ypserv 8 ,
index 6a16f81..5c86dbc 100644 (file)
@@ -33,7 +33,7 @@ NEED_MD4=y
 NEED_RC4=y
 .else
 CFLAGS+=-DEAP_TLS_OPENSSL
-SRCS+= tls_openssl.c
+SRCS+= tls_openssl.c tls_openssl_ocsp.c
 .endif
 .endif
 
@@ -105,7 +105,7 @@ SRCS+=      sha256-internal.c sha256-prf.c
 .endif
 
 .if defined(NEED_TLS_PRF)
-SRCS+= sha1-tlsprf.c
+SRCS+= sha1-tlsprf.c sha256-tlsprf.c
 .endif
 
 .if defined(CONFIG_INTERNAL_DH5)
index 62f76ad..63f3334 100644 (file)
@@ -2,7 +2,6 @@ CONTRIBDIR= ${.CURDIR}/../../../contrib
 WPA_DISTDIR=${CONTRIBDIR}/wpa_supplicant
 
 .PATH.c:       ${.CURDIR}/.. \
-               ${WPA_DISTDIR}/src/ap \
                ${WPA_DISTDIR}/src/common \
                ${WPA_DISTDIR}/src/crypto \
                ${WPA_DISTDIR}/src/eap_common \
@@ -13,6 +12,7 @@ WPA_DISTDIR=${CONTRIBDIR}/wpa_supplicant
 
 CFLAGS+=-I${.CURDIR}
 CFLAGS+=-I${WPA_DISTDIR}/src
+CFLAGS+=-I${WPA_DISTDIR}/src/ap
 CFLAGS+=-I${WPA_DISTDIR}/src/common
 CFLAGS+=-I${WPA_DISTDIR}/src/crypto
 CFLAGS+=-I${WPA_DISTDIR}/src/l2_packet
diff --git a/usr.sbin/802_11/l2_packet.c b/usr.sbin/802_11/l2_packet.c
deleted file mode 100644 (file)
index 0c6cd3b..0000000
+++ /dev/null
@@ -1,308 +0,0 @@
-/*
- * WPA Supplicant - Layer2 packet handling with DragonFlyBSD
- * Copyright (c) 2003-2005, Jouni Malinen <j@w1.fi>
- * Copyright (c) 2005, Sam Leffler <sam@errno.com>
- *
- * This software may be distributed under the terms of the BSD license.
- * See README for more details.
- */
-
-#include "includes.h"
-#include <net/bpf.h>
-#include <pcap.h>
-
-#include <sys/ioctl.h>
-#ifdef __sun__
-#include <libdlpi.h>
-#else /* __sun__ */
-#include <sys/sysctl.h>
-#endif /* __sun__ */
-
-#include <net/if.h>
-#include <net/if_dl.h>
-#include <net/route.h>
-#include <netinet/in.h>
-
-#include "common.h"
-#include "eloop.h"
-#include "l2_packet.h"
-
-
-static const u8 pae_group_addr[ETH_ALEN] =
-{ 0x01, 0x80, 0xc2, 0x00, 0x00, 0x03 };
-
-struct l2_packet_data {
-       pcap_t *pcap;
-       char ifname[100];
-       u8 own_addr[ETH_ALEN];
-       void (*rx_callback)(void *ctx, const u8 *src_addr,
-                           const u8 *buf, size_t len);
-       void *rx_callback_ctx;
-       int l2_hdr; /* whether to include layer 2 (Ethernet) header data
-                    * buffers */
-};
-
-
-int l2_packet_get_own_addr(struct l2_packet_data *l2, u8 *addr)
-{
-       os_memcpy(addr, l2->own_addr, ETH_ALEN);
-       return 0;
-}
-
-
-int l2_packet_send(struct l2_packet_data *l2, const u8 *dst_addr, u16 proto,
-                  const u8 *buf, size_t len)
-{
-       if (!l2->l2_hdr) {
-               int ret;
-               struct l2_ethhdr *eth = os_malloc(sizeof(*eth) + len);
-               if (eth == NULL)
-                       return -1;
-               os_memcpy(eth->h_dest, dst_addr, ETH_ALEN);
-               os_memcpy(eth->h_source, l2->own_addr, ETH_ALEN);
-               eth->h_proto = htons(proto);
-               os_memcpy(eth + 1, buf, len);
-               ret = pcap_inject(l2->pcap, (u8 *) eth, len + sizeof(*eth));
-               os_free(eth);
-               return ret;
-       } else
-               return pcap_inject(l2->pcap, buf, len);
-}
-
-
-static void l2_packet_receive(int sock, void *eloop_ctx, void *sock_ctx)
-{
-       struct l2_packet_data *l2 = eloop_ctx;
-       pcap_t *pcap = sock_ctx;
-       struct pcap_pkthdr hdr;
-       const u_char *packet;
-       struct l2_ethhdr *ethhdr;
-       unsigned char *buf;
-       size_t len;
-
-       packet = pcap_next(pcap, &hdr);
-
-       if (packet == NULL || hdr.caplen < sizeof(*ethhdr))
-               return;
-
-       ethhdr = (struct l2_ethhdr *) packet;
-       if (l2->l2_hdr) {
-               buf = (unsigned char *) ethhdr;
-               len = hdr.caplen;
-       } else {
-               buf = (unsigned char *) (ethhdr + 1);
-               len = hdr.caplen - sizeof(*ethhdr);
-       }
-       l2->rx_callback(l2->rx_callback_ctx, ethhdr->h_source, buf, len);
-}
-
-
-static int l2_packet_init_libpcap(struct l2_packet_data *l2,
-                                 unsigned short protocol)
-{
-       bpf_u_int32 pcap_maskp, pcap_netp;
-       char pcap_filter[200], pcap_err[PCAP_ERRBUF_SIZE];
-       struct bpf_program pcap_fp;
-
-       pcap_lookupnet(l2->ifname, &pcap_netp, &pcap_maskp, pcap_err);
-       l2->pcap = pcap_open_live(l2->ifname, 2500, 0, 10, pcap_err);
-       if (l2->pcap == NULL) {
-               fprintf(stderr, "pcap_open_live: %s\n", pcap_err);
-               fprintf(stderr, "ifname='%s'\n", l2->ifname);
-               return -1;
-       }
-       if (pcap_datalink(l2->pcap) != DLT_EN10MB &&
-           pcap_set_datalink(l2->pcap, DLT_EN10MB) < 0) {
-               fprintf(stderr, "pcap_set_datalink(DLT_EN10MB): %s\n",
-                       pcap_geterr(l2->pcap));
-               return -1;
-       }
-       os_snprintf(pcap_filter, sizeof(pcap_filter),
-                   "not ether src " MACSTR " and "
-                   "( ether dst " MACSTR " or ether dst " MACSTR " ) and "
-                   "ether proto 0x%x",
-                   MAC2STR(l2->own_addr), /* do not receive own packets */
-                   MAC2STR(l2->own_addr), MAC2STR(pae_group_addr),
-                   protocol);
-       if (pcap_compile(l2->pcap, &pcap_fp, pcap_filter, 1, pcap_netp) < 0) {
-               fprintf(stderr, "pcap_compile: %s\n", pcap_geterr(l2->pcap));
-               return -1;
-       }
-
-       if (pcap_setfilter(l2->pcap, &pcap_fp) < 0) {
-               fprintf(stderr, "pcap_setfilter: %s\n", pcap_geterr(l2->pcap));
-               return -1;
-       }
-
-       pcap_freecode(&pcap_fp);
-#ifndef __sun__
-       /*
-        * When libpcap uses BPF we must enable "immediate mode" to
-        * receive frames right away; otherwise the system may
-        * buffer them for us.
-        */
-       {
-               unsigned int on = 1;
-               if (ioctl(pcap_fileno(l2->pcap), BIOCIMMEDIATE, &on) < 0) {
-                       fprintf(stderr, "%s: cannot enable immediate mode on "
-                               "interface %s: %s\n",
-                               __func__, l2->ifname, strerror(errno));
-                       /* XXX should we fail? */
-               }
-       }
-#endif /* __sun__ */
-
-       eloop_register_read_sock(pcap_get_selectable_fd(l2->pcap),
-                                l2_packet_receive, l2, l2->pcap);
-
-       return 0;
-}
-
-
-static int eth_get(const char *device, u8 ea[ETH_ALEN])
-{
-#ifdef __sun__
-       dlpi_handle_t dh;
-       u32 physaddrlen = DLPI_PHYSADDR_MAX;
-       u8 physaddr[DLPI_PHYSADDR_MAX];
-       int retval;
-
-       retval = dlpi_open(device, &dh, 0);
-       if (retval != DLPI_SUCCESS) {
-               wpa_printf(MSG_ERROR, "dlpi_open error: %s",
-                          dlpi_strerror(retval));
-               return -1;
-       }
-
-       retval = dlpi_get_physaddr(dh, DL_CURR_PHYS_ADDR, physaddr,
-                                  &physaddrlen);
-       if (retval != DLPI_SUCCESS) {
-               wpa_printf(MSG_ERROR, "dlpi_get_physaddr error: %s",
-                          dlpi_strerror(retval));
-               dlpi_close(dh);
-               return -1;
-       }
-       os_memcpy(ea, physaddr, ETH_ALEN);
-       dlpi_close(dh);
-#else /* __sun__ */
-       struct if_msghdr *ifm;
-       struct sockaddr_dl *sdl;
-       u_char *p, *buf;
-       size_t len;
-       int mib[] = { CTL_NET, AF_ROUTE, 0, AF_LINK, NET_RT_IFLIST, 0 };
-
-       if (sysctl(mib, 6, NULL, &len, NULL, 0) < 0)
-               return -1;
-       if ((buf = os_malloc(len)) == NULL)
-               return -1;
-       if (sysctl(mib, 6, buf, &len, NULL, 0) < 0) {
-               os_free(buf);
-               return -1;
-       }
-       for (p = buf; p < buf + len; p += ifm->ifm_msglen) {
-               ifm = (struct if_msghdr *)p;
-               sdl = (struct sockaddr_dl *)(ifm + 1);
-               if (ifm->ifm_type != RTM_IFINFO ||
-                   (ifm->ifm_addrs & RTA_IFP) == 0)
-                       continue;
-               if (sdl->sdl_family != AF_LINK || sdl->sdl_nlen == 0 ||
-                   os_memcmp(sdl->sdl_data, device, sdl->sdl_nlen) != 0)
-                       continue;
-               os_memcpy(ea, LLADDR(sdl), sdl->sdl_alen);
-               break;
-       }
-       os_free(buf);
-
-       if (p >= buf + len) {
-               errno = ESRCH;
-               return -1;
-       }
-#endif /* __sun__ */
-       return 0;
-}
-
-
-struct l2_packet_data * l2_packet_init(
-       const char *ifname, const u8 *own_addr, unsigned short protocol,
-       void (*rx_callback)(void *ctx, const u8 *src_addr,
-                           const u8 *buf, size_t len),
-       void *rx_callback_ctx, int l2_hdr)
-{
-       struct l2_packet_data *l2;
-
-       l2 = os_zalloc(sizeof(struct l2_packet_data));
-       if (l2 == NULL)
-               return NULL;
-       os_strlcpy(l2->ifname, ifname, sizeof(l2->ifname));
-       l2->rx_callback = rx_callback;
-       l2->rx_callback_ctx = rx_callback_ctx;
-       l2->l2_hdr = l2_hdr;
-
-       if (eth_get(l2->ifname, l2->own_addr) < 0) {
-               fprintf(stderr, "Failed to get link-level address for "
-                       "interface '%s'.\n", l2->ifname);
-               os_free(l2);
-               return NULL;
-       }
-
-       if (l2_packet_init_libpcap(l2, protocol)) {
-               os_free(l2);
-               return NULL;
-       }
-
-       return l2;
-}
-
-
-void l2_packet_deinit(struct l2_packet_data *l2)
-{
-       if (l2 != NULL) {
-               if (l2->pcap) {
-                       eloop_unregister_read_sock(
-                               pcap_get_selectable_fd(l2->pcap));
-                       pcap_close(l2->pcap);
-               }
-               os_free(l2);
-       }
-}
-
-
-int l2_packet_get_ip_addr(struct l2_packet_data *l2, char *buf, size_t len)
-{
-       pcap_if_t *devs, *dev;
-       struct pcap_addr *addr;
-       struct sockaddr_in *saddr;
-       int found = 0;
-       char err[PCAP_ERRBUF_SIZE + 1];
-
-       if (pcap_findalldevs(&devs, err) < 0) {
-               wpa_printf(MSG_DEBUG, "pcap_findalldevs: %s\n", err);
-               return -1;
-       }
-
-       for (dev = devs; dev && !found; dev = dev->next) {
-               if (os_strcmp(dev->name, l2->ifname) != 0)
-                       continue;
-
-               addr = dev->addresses;
-               while (addr) {
-                       saddr = (struct sockaddr_in *) addr->addr;
-                       if (saddr && saddr->sin_family == AF_INET) {
-                               os_strlcpy(buf, inet_ntoa(saddr->sin_addr),
-                                          len);
-                               found = 1;
-                               break;
-                       }
-                       addr = addr->next;
-               }
-       }
-
-       pcap_freealldevs(devs);
-
-       return found ? 0 : -1;
-}
-
-
-void l2_packet_notify_auth_start(struct l2_packet_data *l2)
-{
-}
index 2652c3d..bb89ab9 100644 (file)
@@ -2,10 +2,11 @@
 
 .include "${.CURDIR}/../Makefile.inc"
 
-.PATH.c:       ${.CURDIR}/..  \
-               ${WPA_DISTDIR}/wpa_supplicant
+.PATH.c:       ${WPA_DISTDIR}/wpa_supplicant
+
 PROG=  wpa_cli
-SRCS=  common.c edit.c eloop.c os_unix.c wpa_cli.c wpa_ctrl.c wpa_debug.c
+SRCS=  common.c cli.c edit_simple.c eloop.c os_unix.c wpa_cli.c wpa_ctrl.c \
+       wpa_debug.c
 
 MAN=   wpa_cli.8
 
index 69c4d78..0c2afd9 100644 (file)
@@ -24,7 +24,7 @@
 .\"
 .\" $FreeBSD: head/usr.sbin/wpa/wpa_cli/wpa_cli.8 210763 2010-08-02 13:11:27Z uqs $
 .\"
-.Dd May 28, 2014
+.Dd May 21, 2020
 .Dt WPA_CLI 8
 .Os
 .Sh NAME
 .Nd "text-based frontend program for interacting with wpa_supplicant"
 .Sh SYNOPSIS
 .Nm
-.Op Ar commands
+.Op Fl Bhv
+.Op Fl p Ar path to ctrl sockets
+.Op Fl g Ar path to global ctrl_interface socket
+.Op Fl i Ar ifname
+.Op Fl a Ar action file
+.Op Fl P Ar pid file
+.Op Fl G Ar ping interval
+.No command ...
+.Oc
 .Sh DESCRIPTION
-The
-.Nm
-utility
-is a text-based frontend program for interacting with
-.Xr wpa_supplicant 8 .
-It is used to query current status,
-change configuration,
-trigger events,
-and
-request interactive user input.
 .Pp
-The
-.Nm
-utility
-can show the
-current authentication status,
-selected security
-mode, dot11 and dot1x MIBs, etc.
-In addition,
 .Nm
-can configure EAPOL state machine
-parameters and trigger events such as reassociation
-and IEEE 802.1X logoff/logon.
+is a text-based frontend program for interacting with wpa_supplicant. It is
+used to query current status, change configuration, trigger events, and request
+interactive user input.
 .Pp
-The
 .Nm
-utility
-provides an interface to supply authentication information
-such as username and password when it is not provided in the
-.Xr wpa_supplicant.conf 5
-configuration file.
-This can be used, for example, to implement
-one-time passwords or generic token card
+can show the current authentication status, selected security mode, dot11 and
+dot1x MIBs, etc. In addition, it can configure some variables like EAPOL state
+machine parameters and trigger events like reassociation and IEEE 802.1X
+logoff/logon. wpa_cli provides a user interface to request
+authentication information, like username and password, if these
+are not included in the configuration. This can be used to
+implement, e.g., one-time-passwords or generic token card
 authentication where the authentication is based on a
 challenge-response that uses an external device for generating the
 response.
 .Pp
-The
-.Nm
-utility
-supports two modes: interactive and command line.
-Both modes share the same command set and the main difference
-is in interactive mode providing access to unsolicited messages
-(event messages, username/password requests).
+The control interface of wpa_supplicant can be configured to
+allow non-root user access (ctrl_interface GROUP= parameter in the
+configuration file). This makes it possible to run wpa_cli with a
+normal user account.
 .Pp
-Interactive mode is started when
-.Nm
-is executed without any parameters on the command line.
-Commands are then entered from the controlling terminal in
-response to the
-.Nm
-prompt.
-In command line mode, the same commands are
-entered as command line arguments.
+wpa_cli supports two modes: interactive and command
+line. Both modes share the same command set and the main
+difference is in interactive mode providing access to unsolicited
+messages (event messages, username/password requests).
 .Pp
-The control interface of
-.Xr wpa_supplicant 8
-can be configured to allow
-non-root user access by using the
-.Va ctrl_interface_group
-parameter
-in the
-.Xr wpa_supplicant.conf 5
-configuration file.
-This makes it possible to run
-.Nm
-with a normal user account.
-.Sh AUTHENTICATION PARAMETERS
-When
-.Xr wpa_supplicant 8
-needs authentication parameters, such as username and password,
-that are not present in the configuration file, it sends a
-request message to all attached frontend programs, e.g.,
-.Nm
-in interactive mode.
-The
-.Nm
-utility
-shows these requests with a
-.Dq Li CTRL-REQ- Ns Ao Ar type Ac Ns Li - Ns Ao Ar id Ac Ns : Ns Aq Ar text
-prefix, where
-.Aq Ar type
-is
-.Li IDENTITY , PASSWORD ,
-or
-.Li OTP
-(One-Time Password),
-.Aq Ar id
-is a unique identifier for the current network,
-.Aq Ar text
-is a description of the request.
-In the case of an
-.Li OTP
-(One-Time Password) request,
-it includes the challenge from the authentication server.
+Interactive mode is started when wpa_cli is executed without
+including the command as a command line parameter. Commands are
+then entered on the wpa_cli prompt. In command line mode, the same
+commands are entered as command line arguments for wpa_cli.
+.Sh "INTERACTIVE AUTHENTICATION PARAMETERS REQUEST"
 .Pp
-A user must supply
-.Xr wpa_supplicant 8
-the needed parameters in response to these requests.
+When wpa_supplicant need authentication parameters, like
+username and password, which are not present in the configuration
+file, it sends a request message to all attached frontend programs,
+e.g., wpa_cli in interactive mode. wpa_cli shows these requests
+with "CTRL-REQ-<type>-<id>:<text>"
+prefix. <type> is IDENTITY, PASSWORD, or OTP
+(one-time-password). <id> is a unique identifier for the
+current network. <text> is description of the request. In
+case of OTP request, it includes the challenge from the
+authentication server.
+.Pp
+The reply to these requests can be given with
+\fBidentity\fR, \fBpassword\fR, and
+\fBotp\fR commands. <id> needs to be copied from
+the matching request. \fBpassword\fR and
+\fBotp\fR commands can be used regardless of whether
+the request was for PASSWORD or OTP. The main difference between these
+two commands is that values given with \fBpassword\fR are
+remembered as long as wpa_supplicant is running whereas values given
+with \fBotp\fR are used only once and then forgotten,
+i.e., wpa_supplicant will ask frontend for a new value for every use.
+This can be used to implement one-time-password lists and generic token
+card -based authentication.
 .Pp
-For example,
-.Bd -literal -offset indent
+Example request for password and a matching reply:
+.sp
+.nf
 CTRL-REQ-PASSWORD-1:Password needed for SSID foobar
 > password 1 mysecretpassword
-
+.fi
+.Pp
 Example request for generic token card challenge-response:
-
+.sp
+.nf
 CTRL-REQ-OTP-2:Challenge 1235663 needed for SSID foobar
 > otp 2 9876
-.Ed
-.Sh COMMANDS
-The following commands may be supplied on the command line
-or at a prompt when operating interactively.
+.fi
+.Sh Options
+.Bl -tag -width indent
+.It Fl p
+Change the path where control sockets should
+be found.
+.It Fl g
+Connect to the global control socket at the
+indicated path rather than an interface-specific control
+socket.
+.It Fl i
+Specify the interface that is being
+configured.  By default, choose the first interface found with
+a control socket in the socket path.
+.It Fl h
+Help.  Show a usage message.
+.It Fl v
+Show version information.
+.It Fl B
+Run as a daemon in the background.
+.It Fl a
+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 "CONNECTED" or "DISCONNECTED" depending on the event.
+This can be used to execute networking tools required to configure
+the interface.
+
+Additionally, three environmental variables are available to
+the file: WPA_CTRL_DIR, WPA_ID, and WPA_ID_STR. WPA_CTRL_DIR
+contains the absolute path to the ctrl_interface socket. WPA_ID
+contains the unique network_id identifier assigned to the active
+network, and WPA_ID_STR contains the content of the id_str option.
+.It Fl P
+Set the location of the PID
+file.
+.It Fl G
+Set the interval (in seconds) at which
+wpa_cli pings the supplicant.
+.Sh Commands
+.Pp
+The following commands are available:
 .Bl -tag -width indent
 .It Ic status
-Report the current WPA/EAPOL/EAP status for the current interface.
+get current WPA/EAPOL/EAP status
 .It Ic mib
-Report MIB variables (dot1x, dot11) for the current interface.
+get MIB variables (dot1x, dot11)
 .It Ic help
-Show usage help.
-.It Ic interface Op Ar ifname
-Show available interfaces and/or set the current interface
-when multiple are available.
-.It Ic level Ar debug_level
-Change the debugging level in
-.Xr wpa_supplicant 8 .
-Larger numbers generate more messages.
+show this usage help
+.It Ic interface Ar ifname
+show interfaces/select interface
+.It Ic level Ar debug level
+change debug level
 .It Ic license
-Display the full
-license for
-.Nm .
+show full wpa_cli license
 .It Ic logoff
-Send the IEEE 802.1X EAPOL state machine into the
-.Dq logoff
-state.
+IEEE 802.1X EAPOL state machine logoff
 .It Ic logon
-Send the IEEE 802.1X EAPOL state machine into the
-.Dq logon
-state.
-.It Ic set Op Ar settings
-Set variables.
-When no arguments are supplied, the known variables and their settings
-are displayed.
+IEEE 802.1X EAPOL state machine logon
+.It Ic set
+set variables (shows list of variables when run without arguments)
 .It Ic pmksa
-Show the contents of the PMKSA cache.
+show PMKSA cache
 .It Ic reassociate
-Force a reassociation to the current access point.
+force reassociation
 .It Ic reconfigure
-Force
-.Xr wpa_supplicant 8
-to re-read its configuration file.
+force wpa_supplicant to re-read its configuration file
 .It Ic preauthenticate Ar BSSID
-Force preauthentication of the specified
-.Ar BSSID .
+force preauthentication
 .It Ic identity Ar network_id identity
-Configure an identity for an SSID.
+configure identity for an SSID
 .It Ic password Ar network_id password
-Configure a password for an SSID.
+configure password for an SSID
+.It Ic pin Ar network_id pin
+configure pin for an SSID
 .It Ic otp Ar network_id password
-Configure a one-time password for an SSID.
+configure one-time-password for an SSID
+.It Ic bssid Ar network_id BSSID
+set preferred BSSID for an SSID
+.It Ic \fBlist_networks\fR
+list configured networks
 .It Ic terminate
-Force
-.Xr wpa_supplicant 8
-to terminate.
+terminate \fBwpa_supplicant\fR
 .It Ic quit
-Exit
-.Nm .
-.El
-.Sh SEE ALSO
+exit wpa_cli
+.Sh "SEE ALSO"
+.Pp
 .Xr wpa_supplicant.conf 5 ,
 .Xr wpa_supplicant 8
-.Sh HISTORY
-The
-.Nm
-utility first appeared in
-.Fx 6.0 .
 .Sh AUTHORS
-The
-.Nm
-utility was written by
-.An Jouni Malinen Aq Mt jkmaline@cc.hut.fi .
-This manual page is derived from the
-.Pa README
-file included in the
-.Nm wpa_supplicant
-distribution.
+.Pp
+wpa_supplicant is copyright (c) 2003-2019,
+Jouni Malinen <j@w1.fi> and
+contributors.
+All Rights Reserved.
+.Pp
+This program is licensed under the BSD license (the one with
+advertisement clause removed).
index 0bb0b45..08d226f 100644 (file)
@@ -1,13 +1,15 @@
 # $FreeBSD: head/usr.sbin/wpa/wpa_passphrase/Makefile 252726 2013-07-04 21:12:58Z rpaulo $
 
 .include "${.CURDIR}/../Makefile.inc"
+.include "${.CURDIR}/../Makefile.crypto"
 
 .PATH.c:${WPA_DISTDIR}/wpa_supplicant
 
 PROG=  wpa_passphrase
-SRCS=  common.c md5-internal.c md5.c os_unix.c sha1-internal.c sha1-pbkdf2.c sha1.c \
-       wpa_passphrase.c
+SRCS=  common.c crypto_openssl.c os_unix.c sha1-prf.c sha1-tlsprf.c sha256-prf.c \
+       sha256-tlsprf.c wpabuf.c wpa_debug.c wpa_passphrase.c
 
+CFLAGS+= -DCONFIG_OPENSSL_INTERNAL_AES_WRAP
 CFLAGS+= -DINTERNAL_SHA1
 CFLAGS+= -DINTERNAL_MD5
 
index 04d4abf..e86c844 100644 (file)
 .\"
 .\" $FreeBSD: head/usr.sbin/wpa/wpa_passphrase/wpa_passphrase.8 195644 2009-07-12 19:58:52Z sam $
 .\"
-.Dd July 17, 2007
+.Dd May 21, 2020
 .Dt WPA_PASSPHRASE 8
 .Os
 .Sh NAME
 .Nm wpa_passphrase
-.Nd "utility for generating a 256-bit pre-shared WPA key from an ASCII passphrase"
+.Nd utility for generating a 256-bit pre-shared WPA key from
+an ASCII passphrase
 .Sh SYNOPSIS
 .Nm
 .Aq Ar ssid
 .Op Ar passphrase
 .Sh DESCRIPTION
-The
 .Nm
-utility is a small program for generating a 256-bit pre-shared WPA key
-from an ASCII passphrase and a given SSID. The output is formatted for
-inclusion in
-.Xr wpa_supplicant.conf 5 .
+pre-computes PSK entries for network configuration blocks of a
+.Xr wpa_supplicant.conf 5
+file. An ASCII passphrase and SSID are used to generate a 256-bit PSK.
+.Sh OPTIONS
+.Bl -tag -width indent
+.It Ic ssid
+The SSID whose passphrase should be derived.
+.It Ic passphrase
+The passphrase to use. If not included on the command line,
+passphrase will be read from standard input.
+.Sh "SEE ALSO"
 .Pp
-If
-.Nm
-is called with only an SSID as argument it will prompt for a
-passphrase on standard input.
-.Sh SEE ALSO
 .Xr wpa_supplicant.conf 5 ,
 .Xr wpa_supplicant 8
-.Sh HISTORY
-The
-.Nm
-utility first appeared in
-.Fx 6.3 .
 .Sh AUTHORS
-.An -nosplit
-The
-.Nm
-utility was written by
-.An Jouni Malinen Aq Mt j@w1.fi .
 .Pp
-This manual page was written by
-.An Henrik Brix Andersen Aq Mt henrik@brixandersen.dk .
+wpa_supplicant is copyright (c) 2003-2019,
+Jouni Malinen <j@w1.fi> and
+contributors.
+All Rights Reserved.
+.Pp
+This program is licensed under the BSD license (the one with
+advertisement clause removed).
index cc64fba..c4b44fe 100644 (file)
@@ -3,52 +3,59 @@
 .include "${.CURDIR}/../Makefile.inc"
 
 .PATH.c:${WPA_DISTDIR}/wpa_supplicant \
+       ${WPA_DISTDIR}/src/ap \
        ${WPA_DISTDIR}/src/drivers \
        ${WPA_DISTDIR}/src/eap_peer \
+       ${WPA_DISTDIR}/src/eap_server \
+       ${WPA_DISTDIR}/src/eapol_auth \
        ${WPA_DISTDIR}/src/rsn_supp
 
 PROG=  wpa_supplicant
-SRCS=  aes-unwrap.c base64.c blacklist.c bss.c common.c config.c \
-       config_file.c ctrl_iface.c ctrl_iface_unix.c driver_bsd.c \
-       driver_common.c driver_ndis.c driver_wired.c drivers.c \
-       eap_register.c eloop.c events.c gas.c gas_query.c hs20.c \
-       hs20_supplicant.c http_client.c http_server.c httpread.c \
-       ieee802_11_common.c interworking.c l2_packet.c main.c \
-       md5.c notify.c offchannel.c os_unix.c peerkey.c pmksa_cache.c \
-       preauth.c scan.c upnp_xml.c uuid.c wpa.c wpa_common.c wpa_debug.c \
-       wpa_ft.c wpa_ie.c wpa_supplicant.c wpabuf.c wpas_glue.c wps.c \
-       wps_attr_build.c wps_attr_parse.c wps_attr_process.c \
-       wps_common.c wps_dev_attr.c wps_enrollee.c wps_registrar.c \
-       wps_supplicant.c wps_upnp.c wps_upnp_ap.c wps_upnp_event.c \
-       wps_upnp_ssdp.c wps_upnp_web.c Packet32.c
+
+SRCS=  ap_config.c ap_drv_ops.c ap_mlme.c base64.c beacon.c bitfield.c \
+       blacklist.c bss.c common.c config.c config_file.c ctrl_iface.c \
+       ctrl_iface_common.c ctrl_iface_unix.c dh_groups.c driver_bsd.c driver_common.c \
+       driver_wired.c driver_wired_common.c drivers.c eloop.c events.c gas.c \
+       gas_query.c gas_serv.c hs20.c hs20_supplicant.c http_client.c http_server.c \
+       httpread.c hw_features_common.c ieee802_11_auth.c ieee802_11_common.c \
+       ieee802_11_shared.c ieee802_1x.c interworking.c l2_packet_freebsd.c main.c \
+       neighbor_db.c notify.c offchannel.c op_classes.c os_unix.c pmksa_cache.c \
+       pmksa_cache_auth.c preauth.c rrm.c scan.c sta_info.c upnp_xml.c utils.c uuid.c \
+       wmm_ac.c wpa.c wpa_auth.c wpa_auth_ie.c wpa_common.c wpa_debug.c wpa_ft.c \
+       wpa_ie.c wpa_supplicant.c wpabuf.c wpas_glue.c wps.c wps_attr_build.c \
+       wps_attr_parse.c wps_attr_process.c wps_common.c wps_dev_attr.c wps_enrollee.c \
+       wps_hostapd.c wps_registrar.c wps_supplicant.c wps_upnp.c wps_upnp_ap.c \
+       wps_upnp_event.c wps_upnp_ssdp.c wps_upnp_web.c
 
 MAN=   wpa_supplicant.8 wpa_supplicant.conf.5
 
 WARNS= 0
 
-#.if ${MK_EXAMPLES} != "no"
-#FILESDIR= ${SHAREDIR}/examples/etc
-#.PATH:        ${WPA_SUPPLICANT_DISTDIR}
-#FILES=        wpa_supplicant.conf
-#.endif
-
 CFLAGS+=-DCONFIG_BACKEND_FILE \
+       -DCONFIG_CTRL_IFACE \
+       -DCONFIG_CTRL_IFACE_UNIX \
+       -DCONFIG_DEBUG_FILE \
        -DCONFIG_DEBUG_SYSLOG \
+       -DCONFIG_DELAYED_MIC_ERROR_REPORT \
+       -DCONFIG_DES \
        -DCONFIG_DRIVER_BSD \
-       -DCONFIG_DRIVER_NDIS \
        -DCONFIG_DRIVER_WIRED \
+       -DCONFIG_GAS \
+       -DCONFIG_HS20 \
+       -DCONFIG_IEEE80211R \
+       -DCONFIG_INTERWORKING \
+       -DCONFIG_MATCH_IFACE \
+       -DCONFIG_NO_ACCOUNTING \
+       -DCONFIG_NO_RADIUS \
+       -DCONFIG_NO_VLAN \
+       -DCONFIG_OFFCHANNEL \
        -DCONFIG_PEERKEY \
+       -DCONFIG_SHA256 \
        -DCONFIG_SMARTCARD \
-       -DCONFIG_TERMINATE_ONLASTIF \
        -DCONFIG_WPS \
-       -DCONFIG_WPS2 \
        -DCONFIG_WPS_UPNP \
-       -DCONFIG_TLS=openssl \
-       -DCONFIG_IEEE80211R \
-       -DCONFIG_INTERWORKING \
-       -DCONFIG_PRIVSEP \
-       -DCONFIG_HS20 \
-       -DCONFIG_GAS \
+       -DCONFIG_WPS2 \
+       -DTLS_DEFAULT_CIPHERS=\""DEFAULT:!EXP:!LOW"\" \
        -DPKCS12_FUNCS
 #CFLAGS+= -g
 DPADD+=        ${LIBPCAP}
@@ -63,23 +70,19 @@ LDADD+=${WPA_SUPPLICANT_LDADD}
 #.if ${MK_WPA_SUPPLICANT_EAPOL} != "no"
 CFLAGS+=-DEAP_GTC \
        -DEAP_LEAP \
-       -DEAP_MD5 \
        -DEAP_MSCHAPv2 \
        -DEAP_OTP \
        -DEAP_PEAP \
        -DEAP_PSK \
        -DEAP_TLS \
+       -DEAP_TLS_OPENSSL \
        -DEAP_TTLS \
-       -DEAP_GTC \
-       -DEAP_OTP \
-       -DEAP_LEAP \
+       -DEAP_WSC \
        -DIEEE8021X_EAPOL
-SRCS+= chap.c \
-       eap.c \
+SRCS+= eap.c \
        eap_common.c \
        eap_gtc.c \
        eap_leap.c \
-       eap_md5.c \
        eap_methods.c \
        eap_mschapv2.c \
        eap_otp.c \
@@ -87,10 +90,18 @@ SRCS+=      chap.c \
        eap_peap_common.c \
        eap_psk.c \
        eap_psk_common.c \
+       eap_register.c \
+       eap_server.c \
+       eap_server_methods.c \
        eap_tls.c \
        eap_tls_common.c \
        eap_ttls.c \
+       eap_user_db.c \
+       eap_wsc.c \
+       eap_wsc_common.c \
+       eapol_auth_sm.c \
        eapol_supp_sm.c \
+       chap.c \
        ms_funcs.c \
        mschapv2.c
 TLS_FUNCS=y
@@ -99,10 +110,6 @@ NEED_AES_ENCBLOCK=y
 NEED_AES_OMAC1=y
 #.endif
 
-.if !empty(CFLAGS:M-DCONFIG_WPS)
-NEED_AES_CBC=y
-.endif
-
 .if !empty(CFLAGS:M*-DEAP_AKA)
 SRCS+= eap_aka.c
 NEED_SIM_COMMON=y
diff --git a/usr.sbin/802_11/wpa_supplicant/Packet32.c b/usr.sbin/802_11/wpa_supplicant/Packet32.c
deleted file mode 100644 (file)
index b0e3833..0000000
+++ /dev/null
@@ -1,364 +0,0 @@
-/*-
- * Copyright (c) 2005
- *      Bill Paul <wpaul@windriver.com>.  All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. All advertising materials mentioning features or use of this software
- *    must display the following acknowledgement:
- *      This product includes software developed by Bill Paul.
- * 4. Neither the name of the author nor the names of any co-contributors
- *    may be used to endorse or promote products derived from this software
- *    without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY Bill Paul AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL Bill Paul OR THE VOICES IN HIS HEAD
- * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
- * THE POSSIBILITY OF SUCH DAMAGE.
- *
- * $FreeBSD: head/usr.sbin/wpa/wpa_supplicant/Packet32.c 189220 2009-03-01 08:01:38Z sam $
- */
-
-
-/*
- * This file implements a small portion of the Winpcap API for the
- * Windows NDIS interface in wpa_supplicant. It provides just enough
- * routines to fool wpa_supplicant into thinking it's really running
- * in a Windows environment.
- */
-
-#include <sys/types.h>
-#include <sys/param.h>
-#include <sys/socket.h>
-#include <sys/ioctl.h>
-#include <sys/errno.h>
-#include <sys/sysctl.h>
-#include <sys/fcntl.h>
-#include <net/if.h>
-#include <net/if_dl.h>
-#include <net/if_var.h>
-
-#include <netinet/in.h>
-#include <arpa/inet.h>
-#include <netdb.h>
-#include <net/bpf.h>
-#include <net/route.h>
-
-#include <netproto/802_11/ieee80211_ioctl.h>
-
-#include <stdio.h>
-#include <string.h>
-#include <stdlib.h>
-#include <unistd.h>
-#include <pcap.h>
-
-#include "Packet32.h"
-
-#define OID_802_11_ADD_KEY      0x0d01011D
-
-typedef ULONGLONG NDIS_802_11_KEY_RSC;
-typedef UCHAR NDIS_802_11_MAC_ADDRESS[6];
-
-typedef struct NDIS_802_11_KEY {
-       ULONG Length;
-       ULONG KeyIndex;
-       ULONG KeyLength;
-       NDIS_802_11_MAC_ADDRESS BSSID;
-       NDIS_802_11_KEY_RSC KeyRSC;
-       UCHAR KeyMaterial[1];
-} NDIS_802_11_KEY;
-
-typedef struct NDIS_802_11_KEY_COMPAT {
-       ULONG Length;
-       ULONG KeyIndex;
-       ULONG KeyLength;
-       NDIS_802_11_MAC_ADDRESS BSSID;
-       UCHAR Pad[6]; /* Make struct layout match Windows. */
-       NDIS_802_11_KEY_RSC KeyRSC;
-#ifdef notdef
-       UCHAR KeyMaterial[1];
-#endif
-} NDIS_802_11_KEY_COMPAT;
-
-#define TRUE 1
-#define FALSE 0
-
-struct adapter {
-       int                     socket;
-       char                    name[IFNAMSIZ];
-       int                     prev_roaming;
-};
-
-PCHAR
-PacketGetVersion(void)
-{
-       return("FreeBSD WinPcap compatibility shim v1.0");
-}
-
-void *
-PacketOpenAdapter(CHAR *iface)
-{
-       struct adapter          *a;
-       int                     s;
-       struct ifreq            ifr;
-       struct ieee80211req     ireq;
-
-       s = socket(PF_INET, SOCK_DGRAM, 0);
-
-       if (s == -1)
-               return(NULL);
-
-       a = malloc(sizeof(struct adapter));
-       if (a == NULL)
-               return(NULL);
-
-       a->socket = s;
-       if (strncmp(iface, "\\Device\\NPF_", 12) == 0)
-               iface += 12;
-       else if (strncmp(iface, "\\DEVICE\\", 8) == 0)
-               iface += 8;
-       snprintf(a->name, IFNAMSIZ, "%s", iface);
-
-       /* Turn off net80211 roaming */
-       bzero((char *)&ireq, sizeof(ireq));
-       strncpy(ireq.i_name, iface, sizeof (ifr.ifr_name));
-       ireq.i_type = IEEE80211_IOC_ROAMING;
-       if (ioctl(a->socket, SIOCG80211, &ireq) == 0) {
-               a->prev_roaming = ireq.i_val;
-               ireq.i_val = IEEE80211_ROAMING_MANUAL;
-               if (ioctl(a->socket, SIOCS80211, &ireq) < 0)
-                       fprintf(stderr,
-                           "Could not set IEEE80211_ROAMING_MANUAL\n");
-       }
-
-       bzero((char *)&ifr, sizeof(ifr));
-        strncpy(ifr.ifr_name, iface, sizeof (ifr.ifr_name));
-        if (ioctl(a->socket, SIOCGIFFLAGS, (caddr_t)&ifr) < 0) {
-               free(a);
-               close(s);
-               return(NULL);
-        }
-        ifr.ifr_flags |= IFF_UP;
-        if (ioctl(a->socket, SIOCSIFFLAGS, (caddr_t)&ifr) < 0) {
-               free(a);
-               close(s);
-               return(NULL);
-        }
-
-       return(a);
-}
-
-int
-PacketRequest(void *iface, BOOLEAN set, PACKET_OID_DATA *oid)
-{
-       struct adapter          *a;
-       uint32_t                retval;
-       struct ifreq            ifr;
-       NDIS_802_11_KEY         *old;
-       NDIS_802_11_KEY_COMPAT  *new;
-       PACKET_OID_DATA         *o = NULL;
-
-       if (iface == NULL)
-               return(-1);
-
-       a = iface;
-       bzero((char *)&ifr, sizeof(ifr));
-
-       /*
-        * This hack is necessary to work around a difference
-        * betwee the GNU C and Microsoft C compilers. The NDIS_802_11_KEY
-        * structure has a uint64_t in it, right after an array of
-        * chars. The Microsoft compiler inserts padding right before
-        * the 64-bit value to align it on a 64-bit boundary, but
-        * GCC only aligns it on a 32-bit boundary. Trying to pass
-        * the GCC-formatted structure to an NDIS binary driver
-        * fails because some of the fields appear to be at the
-        * wrong offsets.
-        *
-        * To get around this, if we detect someone is trying to do
-        * a set operation on OID_802_11_ADD_KEY, we shuffle the data
-        * into a properly padded structure and pass that into the
-        * driver instead. This allows the driver_ndis.c code supplied
-        * with wpa_supplicant to work unmodified.
-        */
-
-       if (set == TRUE && oid->Oid == OID_802_11_ADD_KEY) {
-               old = (NDIS_802_11_KEY *)&oid->Data;
-               o = malloc(sizeof(PACKET_OID_DATA) +
-                   sizeof(NDIS_802_11_KEY_COMPAT) + old->KeyLength);
-               if (o == NULL)
-                       return(0);
-               bzero((char *)o, sizeof(PACKET_OID_DATA) +
-                   sizeof(NDIS_802_11_KEY_COMPAT) + old->KeyLength);
-               o->Oid = oid->Oid;
-               o->Length = sizeof(NDIS_802_11_KEY_COMPAT) + old->KeyLength;
-               new = (NDIS_802_11_KEY_COMPAT *)&o->Data;
-               new->KeyRSC = old->KeyRSC;
-               new->Length = o->Length;
-               new->KeyIndex = old->KeyIndex;
-               new->KeyLength = old->KeyLength;
-               bcopy(old->BSSID, new->BSSID, sizeof(NDIS_802_11_MAC_ADDRESS));
-               bcopy(old->KeyMaterial, (char *)new +
-                   sizeof(NDIS_802_11_KEY_COMPAT), new->KeyLength);
-               ifr.ifr_data = (caddr_t)o;
-       } else
-               ifr.ifr_data = (caddr_t)oid;
-
-        strlcpy(ifr.ifr_name, a->name, sizeof(ifr.ifr_name));
-
-       if (set == TRUE)
-               retval = ioctl(a->socket, SIOCSDRVSPEC, &ifr);
-       else
-               retval = ioctl(a->socket, SIOCGDRVSPEC, &ifr);
-
-       if (o != NULL)
-               free(o);
-
-       if (retval)
-               return(0);
-
-       return(1);
-}
-
-int
-PacketGetAdapterNames(CHAR *namelist, ULONG *len)
-{
-       int                     mib[6];
-       size_t                  needed;
-       struct if_msghdr        *ifm;
-       struct sockaddr_dl      *sdl;
-       char                    *buf, *lim, *next;
-       char                    *plist;
-       int                     spc;
-       int                     ifcnt = 0;
-
-       plist = namelist;
-       spc = 0;
-
-       bzero(plist, *len);
-
-       needed = 0;
-       mib[0] = CTL_NET;
-       mib[1] = PF_ROUTE;
-       mib[2] = 0;             /* protocol */
-       mib[3] = 0;             /* wildcard address family */
-       mib[4] = NET_RT_IFLIST;
-       mib[5] = 0;             /* no flags */
-
-       if (sysctl (mib, 6, NULL, &needed, NULL, 0) < 0)
-               return(FALSE);
-
-       buf = malloc (needed);
-       if (buf == NULL)
-               return(FALSE);
-
-       if (sysctl (mib, 6, buf, &needed, NULL, 0) < 0) {
-               free(buf);
-               return(FALSE);
-       }
-
-       lim = buf + needed;
-
-       /* Generate interface name list. */
-
-       next = buf;
-       while (next < lim) {
-               ifm = (struct if_msghdr *)next;
-               if (ifm->ifm_type == RTM_IFINFO) {
-                       sdl = (struct sockaddr_dl *)(ifm + 1);
-                       if (strnstr(sdl->sdl_data, "wlan", sdl->sdl_nlen)) {
-                               if ((spc + sdl->sdl_nlen) > *len) {
-                                       free(buf);
-                                       return(FALSE);
-                               }
-                               strncpy(plist, sdl->sdl_data, sdl->sdl_nlen);
-                               plist += (sdl->sdl_nlen + 1);
-                               spc += (sdl->sdl_nlen + 1);
-                               ifcnt++;
-                       }
-               }
-               next += ifm->ifm_msglen;
-       }
-
-
-       /* Insert an extra "" as a spacer */
-
-       plist++;
-       spc++;
-
-       /*
-        * Now generate the interface description list. There
-        * must be a unique description for each interface, and
-        * they have to match what the ndis_events program will
-        * feed in later. To keep this simple, we just repeat
-        * the interface list over again.
-        */
-
-       next = buf;
-       while (next < lim) {
-               ifm = (struct if_msghdr *)next;
-               if (ifm->ifm_type == RTM_IFINFO) {
-                       sdl = (struct sockaddr_dl *)(ifm + 1);
-                       if (strnstr(sdl->sdl_data, "wlan", sdl->sdl_nlen)) {
-                               if ((spc + sdl->sdl_nlen) > *len) {
-                                       free(buf);
-                                       return(FALSE);
-                               }
-                               strncpy(plist, sdl->sdl_data, sdl->sdl_nlen);
-                               plist += (sdl->sdl_nlen + 1);
-                               spc += (sdl->sdl_nlen + 1);
-                               ifcnt++;
-                       }
-               }
-               next += ifm->ifm_msglen;
-       }
-
-       free (buf);
-
-       *len = spc + 1;
-
-       return(TRUE);
-}
-
-void
-PacketCloseAdapter(void *iface)
-{      
-       struct adapter          *a;
-       struct ifreq            ifr;
-       struct ieee80211req     ireq;
-
-       if (iface == NULL)
-               return;
-
-       a = iface;
-
-       /* Reset net80211 roaming */
-       bzero((char *)&ireq, sizeof(ireq));
-       strncpy(ireq.i_name, a->name, sizeof (ifr.ifr_name));
-       ireq.i_type = IEEE80211_IOC_ROAMING;
-       ireq.i_val = a->prev_roaming;
-       ioctl(a->socket, SIOCS80211, &ireq);
-
-       bzero((char *)&ifr, sizeof(ifr));
-        strncpy(ifr.ifr_name, a->name, sizeof (ifr.ifr_name));
-        ioctl(a->socket, SIOCGIFFLAGS, (caddr_t)&ifr);
-        ifr.ifr_flags &= ~IFF_UP;
-        ioctl(a->socket, SIOCSIFFLAGS, (caddr_t)&ifr);
-       close(a->socket);
-       free(a);
-
-       return;
-}
diff --git a/usr.sbin/802_11/wpa_supplicant/Packet32.h b/usr.sbin/802_11/wpa_supplicant/Packet32.h
deleted file mode 100644 (file)
index 33b697e..0000000
+++ /dev/null
@@ -1,67 +0,0 @@
-/*-
- * Copyright (c) 2005
- *      Bill Paul <wpaul@windriver.com>.  All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. All advertising materials mentioning features or use of this software
- *    must display the following acknowledgement:
- *      This product includes software developed by Bill Paul.
- * 4. Neither the name of the author nor the names of any co-contributors
- *    may be used to endorse or promote products derived from this software
- *    without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY Bill Paul AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL Bill Paul OR THE VOICES IN HIS HEAD
- * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
- * THE POSSIBILITY OF SUCH DAMAGE.
- *
- * $FreeBSD: head/usr.sbin/wpa/wpa_supplicant/Packet32.h 151517 2005-10-20 16:49:31Z wpaul $
- */
-
-#ifndef _PACKET32_H_
-#define _PACKET32_H_
-
-#include <sys/types.h>
-#include <ntddndis.h>
-
-struct PACKET_OID_DATA {
-       uint32_t                Oid;
-       uint32_t                Length;
-       uint8_t                 Data[1];
-};
-
-
-typedef struct PACKET_OID_DATA PACKET_OID_DATA;
-
-extern PCHAR PacketGetVersion(void);
-extern void *PacketOpenAdapter(CHAR *);
-extern int PacketRequest(void *, BOOLEAN, PACKET_OID_DATA *);
-extern int PacketGetAdapterNames(CHAR *, ULONG *);
-extern void PacketCloseAdapter(void *);
-
-/*
- * This is for backwards compatibility on FreeBSD 5.
- */
-
-#ifndef SIOCGDRVSPEC
-#define SIOCSDRVSPEC   _IOW('i', 123, struct ifreq)    /* set driver-specific
-                                                               parameters */
-#define SIOCGDRVSPEC   _IOWR('i', 123, struct ifreq)   /* get driver-specific
-                                                               parameters */
-#endif
-
-#endif /* _PACKET32_H_ */
diff --git a/usr.sbin/802_11/wpa_supplicant/ntddndis.h b/usr.sbin/802_11/wpa_supplicant/ntddndis.h
deleted file mode 100644 (file)
index feeee16..0000000
+++ /dev/null
@@ -1,32 +0,0 @@
-#ifndef _NTDDNDIS_H_
-#define _NTDDNDIS_H_
-
-/*
- * $FreeBSD: head/usr.sbin/wpa/wpa_supplicant/ntddndis.h 151517 2005-10-20 16:49:31Z wpaul $
- */
-
-/*
- * Fake up some of the Windows type definitions so that the NDIS
- * interface module in wpa_supplicant will build.
- */
-
-#define ULONG uint32_t
-#define USHORT uint16_t
-#define UCHAR uint8_t
-#define LONG int32_t
-#define SHORT int16_t
-#define CHAR int8_t
-#define ULONGLONG uint64_t
-#define LONGLONG int64_t
-#define BOOLEAN uint8_t
-typedef void * LPADAPTER;
-typedef char * PTSTR;
-typedef char * PCHAR;
-
-#define TRUE 1
-#define FALSE 0
-
-#define OID_802_3_CURRENT_ADDRESS               0x01010102
-#define        OID_802_3_MULTICAST_LIST                0x01010103
-
-#endif /* _NTDDNDIS_H_ */
index 45791b3..7cac979 100644 (file)
@@ -24,7 +24,7 @@
 .\"
 .\" $FreeBSD: head/usr.sbin/wpa/wpa_supplicant/wpa_supplicant.8 242696 2012-11-07 15:47:36Z issyl0 $
 .\"
-.Dd November 23, 2012
+.Dd May 21, 2020
 .Dt WPA_SUPPLICANT 8
 .Os
 .Sh NAME
 .Fl i Ar ifname
 .Fl c Ar config-file
 .Op Fl C Ar ctrl
-.Op Fl D driver
+.Op Fl D Ar driver
 .Op Fl p Ar driver_param
 .Op Fl b Ar br_ifname
-.No ...
 .Oc
+.Oo Fl M
+.Fl i Ar ifpattern
+.Fl c Ar config-file
+.Op Fl D Ar driver
+.Oc
+.No ...
 .Sh DESCRIPTION
 The
 .Nm
@@ -85,6 +90,9 @@ The following arguments must be specified on the command line:
 .Bl -tag -width indent
 .It Fl i Ar ifname
 Use the specified wireless interface.
+.Pp
+If combined with -M, this is actually a pattern used to match
+an interface when it becomes available, for example 'wlan*'.
 .It Fl c Ar config-file
 Use the settings in the specified configuration file when managing
 the wireless interface.
@@ -113,7 +121,7 @@ in the background.
 Enable debugging messages.
 If this option is supplied twice, more verbose messages are displayed.
 .It Fl D
-Driver name (bsd, ndis etc.)
+Driver name ('bsd' or 'wired')
 .It Fl f
 Log output to debug file instead of stdout.
 .It Fl g
@@ -124,6 +132,8 @@ Show help text.
 Include key information in debugging output.
 .It Fl L
 Display the license for this program on the terminal and exit.
+.It Fl M
+Start describing a new interface matching given pattern.
 .It Fl N
 Start describing a new interface.
 .It Fl o