093b9154fd
only allows basic username/password config, and does not provide the ability to set any of the other WPA options. Regardless, this is generally sufficient to associate. Perhaps in the future this could allow full configuring (e.g. being able to set "anonymous identity", and perhaps some of the more obscure WPA options), though perhaps that will better belong in bsdconfig when that grows wlan config ability. MFC after: 1 week
176 lines
5.6 KiB
Bash
Executable File
176 lines
5.6 KiB
Bash
Executable File
#!/bin/sh
|
|
#-
|
|
# Copyright (c) 2011 Nathan Whitehorn
|
|
# Copyright (c) 2013 Devin Teske
|
|
# 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.
|
|
#
|
|
# THIS SOFTWARE IS PROVIDED BY THE AUTHOR 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 THE AUTHOR OR CONTRIBUTORS 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$
|
|
#
|
|
############################################################ INCLUDES
|
|
|
|
BSDCFG_SHARE="/usr/share/bsdconfig"
|
|
. $BSDCFG_SHARE/common.subr || exit 1
|
|
|
|
############################################################ MAIN
|
|
|
|
echo -n > $BSDINSTALL_TMPETC/wpa_supplicant.conf
|
|
chmod 0600 $BSDINSTALL_TMPETC/wpa_supplicant.conf
|
|
|
|
echo "ctrl_interface=/var/run/wpa_supplicant" >> $BSDINSTALL_TMPETC/wpa_supplicant.conf
|
|
echo "eapol_version=2" >> $BSDINSTALL_TMPETC/wpa_supplicant.conf
|
|
echo "ap_scan=1" >> $BSDINSTALL_TMPETC/wpa_supplicant.conf
|
|
echo "fast_reauth=1" >> $BSDINSTALL_TMPETC/wpa_supplicant.conf
|
|
echo >> $BSDINSTALL_TMPETC/wpa_supplicant.conf
|
|
|
|
# Try to reach wpa_supplicant. If it isn't running and we can modify the
|
|
# existing system, start it. Otherwise, fail.
|
|
(wpa_cli ping >/dev/null 2>/dev/null || ([ ! -z $BSDINSTALL_CONFIGCURRENT ] && \
|
|
wpa_supplicant -B -i $1 -c $BSDINSTALL_TMPETC/wpa_supplicant.conf)) || \
|
|
(dialog --backtitle "FreeBSD Installer" --title "Error" --msgbox \
|
|
"Could not start wpa_supplicant!" 0 0; exit 1) || exit 1
|
|
|
|
# See if we succeeded
|
|
wpa_cli ping >/dev/null 2>/dev/null
|
|
if [ $? -ne 0 -a -z $BSDINSTALL_CONFIGCURRENT ]; then
|
|
dialog --backtitle "FreeBSD Installer" --title "Error" --msgbox \
|
|
"Wireless cannot be configured without making changes to the local system!" \ 0 0
|
|
exit 1
|
|
fi
|
|
|
|
output=$( wpa_cli scan 2>&1 )
|
|
f_dprintf "%s" "$output"
|
|
dialog --backtitle "FreeBSD Installer" --title "Scanning" --ok-label "Skip" \
|
|
--pause "Waiting 5 seconds to scan for wireless networks..." \
|
|
9 40 5 || exit 1
|
|
|
|
SCAN_RESULTS=`wpa_cli scan_results`
|
|
NETWORKS=`echo "$SCAN_RESULTS" | awk -F '\t' \
|
|
'/..:..:..:..:..:../ {if (length($5) > 0) printf("\"%s\"\t%s\n", $5, $4);}' |
|
|
sort | uniq`
|
|
|
|
if [ -z "$NETWORKS" ]; then
|
|
dialog --backtitle "FreeBSD Installer" --title "Error" \
|
|
--yesno "No wireless networks were found. Rescan?" 0 0 && \
|
|
exec $0 $@
|
|
exit 1
|
|
fi
|
|
|
|
exec 3>&1
|
|
NETWORK=`sh -c "dialog --extra-button --extra-label \"Rescan\" \
|
|
--backtitle \"FreeBSD Installer\" --title \"Network Selection\" --menu \
|
|
\"Select a wireless network to connect to.\" 0 0 0 \
|
|
$(echo $NETWORKS | tr '\n' ' ')" 2>&1 1>&3`
|
|
case $? in
|
|
0) # OK
|
|
;;
|
|
1) # Cancel
|
|
exit 1
|
|
;;
|
|
3) # Rescan
|
|
exec $0 $@
|
|
;;
|
|
esac
|
|
exec 3>&-
|
|
|
|
ENCRYPTION=`echo "$NETWORKS" | awk -F '\t' \
|
|
"/^\"$NETWORK\"\t/ {printf(\"%s\n\", \\\$2 );}"`
|
|
|
|
if echo $ENCRYPTION | grep -q 'PSK'; then
|
|
exec 3>&1
|
|
PASS=`dialog --insecure --backtitle "FreeBSD Installer" \
|
|
--title "WPA Setup" --mixedform "" 0 0 0 \
|
|
"SSID" 1 0 "$NETWORK" 1 12 0 0 2 \
|
|
"Password" 2 0 "" 2 12 15 63 1 \
|
|
2>&1 1>&3` \
|
|
|| exec $0 $@
|
|
exec 3>&-
|
|
echo "network={
|
|
ssid=\"$NETWORK\"
|
|
psk=\"$PASS\"
|
|
priority=5
|
|
}" >> $BSDINSTALL_TMPETC/wpa_supplicant.conf
|
|
elif echo $ENCRYPTION | grep -q EAP; then
|
|
exec 3>&1
|
|
USERPASS=`dialog --insecure --backtitle "FreeBSD Installer" \
|
|
--title "WPA-Enterprise Setup" --mixedform "" 0 0 0 \
|
|
"SSID" 1 0 "$NETWORK" 1 12 0 0 2 \
|
|
"Username" 2 0 "" 2 12 25 63 0 \
|
|
"Password" 3 0 "" 3 12 25 63 1 \
|
|
2>&1 1>&3` \
|
|
|| exec $0 $@
|
|
exec 3>&-
|
|
echo "network={
|
|
ssid=\"$NETWORK\"
|
|
key_mgmt=WPA-EAP" >> $BSDINSTALL_TMPETC/wpa_supplicant.conf
|
|
echo "$USERPASS" | awk '
|
|
{
|
|
if (NR == 1) {
|
|
printf " identity=\"%s\"\n", $1;
|
|
} else if (NR == 2) {
|
|
printf " password=\"%s\"\n", $1;
|
|
}
|
|
}' >> $BSDINSTALL_TMPETC/wpa_supplicant.conf
|
|
echo " priority=5
|
|
}" >> $BSDINSTALL_TMPETC/wpa_supplicant.conf
|
|
elif echo $ENCRYPTION | grep -q WEP; then
|
|
exec 3>&1
|
|
WEPKEY=`dialog --insecure --backtitle "FreeBSD Installer" \
|
|
--title "WEP Setup" --mixedform "" 0 0 0 \
|
|
"SSID" 1 0 "$NETWORK" 1 12 0 0 2 \
|
|
"WEP Key 0" 2 0 "" 2 12 15 0 1 \
|
|
2>&1 1>&3` \
|
|
|| exec $0 $@
|
|
echo "network={
|
|
ssid=\"$NETWORK\"
|
|
key_mgmt=NONE
|
|
wep_key0=\"$WEPKEY\"
|
|
wep_tx_keyidx=0
|
|
priority=5
|
|
}" >> $BSDINSTALL_TMPETC/wpa_supplicant.conf
|
|
else # Open
|
|
echo "network={
|
|
ssid=\"$NETWORK\"
|
|
key_mgmt=NONE
|
|
priority=5
|
|
}" >> $BSDINSTALL_TMPETC/wpa_supplicant.conf
|
|
fi
|
|
|
|
# Connect to any open networks policy
|
|
echo "network={
|
|
priority=0
|
|
key_mgmt=NONE
|
|
}" >> $BSDINSTALL_TMPETC/wpa_supplicant.conf
|
|
|
|
# Bring up new network
|
|
if [ "$BSDINSTALL_CONFIGCURRENT" ]; then
|
|
output=$( wpa_cli reconfigure 2>&1 )
|
|
f_dprintf "%s" "$output"
|
|
fi
|
|
|
|
exit 0
|
|
|
|
################################################################################
|
|
# END
|
|
################################################################################
|