xref: /freebsd/usr.sbin/bsdinstall/scripts/wlanconfig (revision 0f15f5359041ac50090606082a9c46d913ce7d0f)
12118f387SNathan Whitehorn#!/bin/sh
22118f387SNathan Whitehorn#-
32118f387SNathan Whitehorn# Copyright (c) 2011 Nathan Whitehorn
463939df8SDevin Teske# Copyright (c) 2013-2020 Devin Teske
52118f387SNathan Whitehorn# All rights reserved.
62118f387SNathan Whitehorn#
72118f387SNathan Whitehorn# Redistribution and use in source and binary forms, with or without
82118f387SNathan Whitehorn# modification, are permitted provided that the following conditions
92118f387SNathan Whitehorn# are met:
102118f387SNathan Whitehorn# 1. Redistributions of source code must retain the above copyright
112118f387SNathan Whitehorn#    notice, this list of conditions and the following disclaimer.
122118f387SNathan Whitehorn# 2. Redistributions in binary form must reproduce the above copyright
132118f387SNathan Whitehorn#    notice, this list of conditions and the following disclaimer in the
142118f387SNathan Whitehorn#    documentation and/or other materials provided with the distribution.
152118f387SNathan Whitehorn#
162118f387SNathan Whitehorn# THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
172118f387SNathan Whitehorn# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
182118f387SNathan Whitehorn# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
192118f387SNathan Whitehorn# ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
202118f387SNathan Whitehorn# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
212118f387SNathan Whitehorn# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
222118f387SNathan Whitehorn# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
232118f387SNathan Whitehorn# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
242118f387SNathan Whitehorn# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
252118f387SNathan Whitehorn# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
262118f387SNathan Whitehorn# SUCH DAMAGE.
272118f387SNathan Whitehorn#
28bc4a673fSDevin Teske#
29bc4a673fSDevin Teske############################################################ INCLUDES
30bc4a673fSDevin Teske
31bc4a673fSDevin TeskeBSDCFG_SHARE="/usr/share/bsdconfig"
32bc4a673fSDevin Teske. $BSDCFG_SHARE/common.subr || exit 1
334913f849SAndriy Voskoboinykf_include $BSDCFG_SHARE/dialog.subr
34cc42ef53SBrad Davisf_dialog_backtitle "$OSNAME Installer"
35bc4a673fSDevin Teske
36f18789d7SDevin Teske############################################################ FUNCTIONS
372118f387SNathan Whitehorn
384913f849SAndriy Voskoboinykcountry_set()
394913f849SAndriy Voskoboinyk{
40bede0708SDevin Teske	local error_str iface_up ifconfig_args=
414913f849SAndriy Voskoboinyk
4297a4c9f0SDevin Teske	#
434913f849SAndriy Voskoboinyk	# Setup what was selected
4497a4c9f0SDevin Teske	# NB: Do not change order of arguments (or regdomain will be ignored)
4597a4c9f0SDevin Teske	#
46114a587eSDevin Teske	[ "$2" ] && ifconfig_args="$ifconfig_args country $2"
47114a587eSDevin Teske	[ "$1" ] && ifconfig_args="$ifconfig_args regdomain $1"
48114a587eSDevin Teske	[ "$ifconfig_args" ] || return $SUCCESS # Nothing to do
49114a587eSDevin Teske	ifconfig_args="${ifconfig_args# }"
504913f849SAndriy Voskoboinyk
514913f849SAndriy Voskoboinyk	# Regdomain/country cannot be applied while interface is running
5249748e0aSDevin Teske	iface_up=$( ifconfig -lu | grep -w "$WLAN_IFACE" )
5349748e0aSDevin Teske	[ "$iface_up" ] && ifconfig "$WLAN_IFACE" down
549a46c67aSDevin Teske	f_eval_catch -dk error_str wlanconfig ifconfig "ifconfig %s %s" \
559a46c67aSDevin Teske		"$WLAN_IFACE" "$ifconfig_args"
569a46c67aSDevin Teske	error_str="${error_str#ifconfig: }"
574913f849SAndriy Voskoboinyk	# Restart wpa_supplicant(8) (should not fail).
585399052cSBjoern A. Zeeb	[ "$iface_up" ] && ifconfig "$WLAN_IFACE" up && \
595399052cSBjoern A. Zeeb	    f_eval_catch -d wlanconfig wpa_supplicant \
6094f5aec6SDevin Teske		'wpa_supplicant -B -i "%s" -c "%s/wpa_supplicant.conf"' \
6194f5aec6SDevin Teske		"$WLAN_IFACE" "$BSDINSTALL_TMPETC"
6238a99423SDevin Teske	if [ "$error_str" ]; then
6363939df8SDevin Teske		$DIALOG --title "$msg_error" \
647797a597SDevin Teske			--backtitle "$DIALOG_BACKTITLE" \
652abc4c24SDevin Teske			--yes-label Change \
662abc4c24SDevin Teske			--no-label Ignore \
672abc4c24SDevin Teske			--yesno \
682abc4c24SDevin Teske			"Error while applying chosen settings ($error_str)" \
696e038cc2SDevin Teske			0 0 || return $SUCCESS # Skip
704913f849SAndriy Voskoboinyk		return $FAILURE # Restart
714913f849SAndriy Voskoboinyk	else
7263939df8SDevin Teske		cat > "$BSDINSTALL_TMPETC/rc.conf.net.wlan" <<-EOF
73b5938e7dSDevin Teske		create_args_$WLAN_IFACE="$ifconfig_args"
74b5938e7dSDevin Teske		EOF
754913f849SAndriy Voskoboinyk	fi
764913f849SAndriy Voskoboinyk
774913f849SAndriy Voskoboinyk	return $SUCCESS
784913f849SAndriy Voskoboinyk}
794913f849SAndriy Voskoboinyk
804913f849SAndriy Voskoboinykdialog_country_select()
814913f849SAndriy Voskoboinyk{
821c612112SDevin Teske	local input regdomains countries regdomain country prompt
8348e9fce2SDevin Teske	local no_default="<not selected>"
8471ef4d58SDevin Teske	local default_regdomain="${1:-$no_default}"
8571ef4d58SDevin Teske	local default_country="${2:-$no_default}"
864913f849SAndriy Voskoboinyk
8797a4c9f0SDevin Teske	#
884913f849SAndriy Voskoboinyk	# Parse available countries/regdomains
8997a4c9f0SDevin Teske	#
9049748e0aSDevin Teske	input=$( ifconfig "$WLAN_IFACE" list countries | sed -e 's/DEBUG//gi' )
9195ee591eSDevin Teske	regdomains=$( echo "$input" | awk '
9295ee591eSDevin Teske		sub(/.*domains:/, ""), /[^[:alnum:][[:space:]]/ {
9395ee591eSDevin Teske			n = split($0, domains)
9495ee591eSDevin Teske			for (i = 1; i <= n; i++)
955a1e2927SBjoern A. Zeeb				printf "'\''%s'\'' '\'\''\n", domains[i]
9695ee591eSDevin Teske		}
97d401d36cSDevin Teske	' | sort )
98e7f2eb12SDevin Teske	countries=$( echo "$input" | awk '
99e7f2eb12SDevin Teske		sub(/Country codes:/, ""), sub(/Regulatory.*/, "") {
100e7f2eb12SDevin Teske			while (match($0, /[[:upper:]][[:upper:][:digit:]] /)) {
101e7f2eb12SDevin Teske				country = substr($0, RSTART)
10263939df8SDevin Teske				sub(/ [[:upper:]][[:upper:][:digit:]].*/, "",
10363939df8SDevin Teske					country)
104e7f2eb12SDevin Teske				code = substr(country, 1, 2)
105e7f2eb12SDevin Teske				desc = substr(country, 4)
106e7f2eb12SDevin Teske				sub(/[[:space:]]*$/, "", desc)
107e7f2eb12SDevin Teske				printf "'\''%s'\'' '\''%s'\''\n", code, desc
108e7f2eb12SDevin Teske				$0 = substr($0, RSTART + RLENGTH)
1094913f849SAndriy Voskoboinyk			}
110e7f2eb12SDevin Teske		}
111e7f2eb12SDevin Teske	' | sort )
1124913f849SAndriy Voskoboinyk
11358ce2edcSDevin Teske	f_dialog_title "Regdomain selection"
1141c612112SDevin Teske	prompt="Select your regdomain."
11595ee591eSDevin Teske	eval f_dialog_menu_size height width rows \
11695ee591eSDevin Teske		\"\$DIALOG_TITLE\" \"\$DIALOG_BACKTITLE\" \
11795ee591eSDevin Teske		\"\$prompt\" \"\" $regdomains
11895ee591eSDevin Teske	regdomain=$( eval $DIALOG \
11995ee591eSDevin Teske		--title \"\$DIALOG_TITLE\"             \
12095ee591eSDevin Teske		--backtitle \"\$DIALOG_BACKTITLE\"     \
12195ee591eSDevin Teske		--cancel-label \"\$msg_skip\"          \
12295ee591eSDevin Teske		--default-item \"\$default_regdomain\" \
12395ee591eSDevin Teske		--menu \"\$prompt\"                    \
12495ee591eSDevin Teske		$height $width $rows                   \
12595ee591eSDevin Teske		$regdomains                            \
12695ee591eSDevin Teske		2>&1 >&$DIALOG_TERMINAL_PASSTHRU_FD
12776b07bd9SDevin Teske	)
128f52733d4SDevin Teske	f_dialog_data_sanitize regdomain
1294913f849SAndriy Voskoboinyk
13058ce2edcSDevin Teske	f_dialog_title "Country selection"
1311c612112SDevin Teske	prompt="Select your country."
132e7f2eb12SDevin Teske	eval f_dialog_menu_size height width rows \
133e7f2eb12SDevin Teske		\"\$DIALOG_TITLE\" \"\$DIALOG_BACKTITLE\" \
1341c612112SDevin Teske		\"\$prompt\" \"\" $countries
135e7f2eb12SDevin Teske	country=$( eval $DIALOG \
136e7f2eb12SDevin Teske		--title \"\$DIALOG_TITLE\"           \
137e7f2eb12SDevin Teske		--backtitle \"\$DIALOG_BACKTITLE\"   \
138e7f2eb12SDevin Teske		--cancel-label \"\$msg_skip\"        \
139e2577019SDevin Teske		--default-item \"\$default_country\" \
1401c612112SDevin Teske		--menu \"\$prompt\"                  \
141e7f2eb12SDevin Teske		$height $width $rows                 \
142e7f2eb12SDevin Teske		$countries                           \
143e7f2eb12SDevin Teske		2>&1 >&$DIALOG_TERMINAL_PASSTHRU_FD
14476b07bd9SDevin Teske	)
145f52733d4SDevin Teske	f_dialog_data_sanitize country
1464913f849SAndriy Voskoboinyk
1474913f849SAndriy Voskoboinyk	country_set "$regdomain" "$country"
1484913f849SAndriy Voskoboinyk}
1494913f849SAndriy Voskoboinyk
150*0f15f535SMark Johnstondialog_network_select()
151*0f15f535SMark Johnston{
152*0f15f535SMark Johnston	local ssid flags height width rows prompt
153*0f15f535SMark Johnston
154*0f15f535SMark Johnston	# Avoid using eval on untrusted data.
155*0f15f535SMark Johnston	set --
156*0f15f535SMark Johnston	while IFS=$'\t' read -r ssid flags; do
157*0f15f535SMark Johnston		[ -n "$ssid" ] || continue
158*0f15f535SMark Johnston		set -- "$@" "$ssid" "$flags"
159*0f15f535SMark Johnston	done <<EOF
160*0f15f535SMark Johnston$NETWORKS
161*0f15f535SMark JohnstonEOF
162*0f15f535SMark Johnston
163*0f15f535SMark Johnston	f_dialog_title "Network Selection"
164*0f15f535SMark Johnston	prompt="Select a wireless network to connect to."
165*0f15f535SMark Johnston	f_dialog_menu_size height width rows \
166*0f15f535SMark Johnston		"$DIALOG_TITLE" "$DIALOG_BACKTITLE" "$prompt" "" "$@"
167*0f15f535SMark Johnston	$DIALOG \
168*0f15f535SMark Johnston		--title "$DIALOG_TITLE"         \
169*0f15f535SMark Johnston		--backtitle "$DIALOG_BACKTITLE" \
170*0f15f535SMark Johnston		--extra-button                  \
171*0f15f535SMark Johnston		--extra-label "Rescan"          \
172*0f15f535SMark Johnston		--menu "$prompt"                \
173*0f15f535SMark Johnston		$height $width $rows            \
174*0f15f535SMark Johnston		"$@"                            \
175*0f15f535SMark Johnston		2>&1 >&$DIALOG_TERMINAL_PASSTHRU_FD
176*0f15f535SMark Johnston}
177*0f15f535SMark Johnston
178f18789d7SDevin Teske############################################################ MAIN
179f18789d7SDevin Teske
1804fa8c81cSDevin Teske: > "$BSDINSTALL_TMPETC/wpa_supplicant.conf"
1818d5182d6SDevin Teskechmod 0600 "$BSDINSTALL_TMPETC/wpa_supplicant.conf"
182f18789d7SDevin Teske
183b5938e7dSDevin Teskecat >> "$BSDINSTALL_TMPETC/wpa_supplicant.conf" <<EOF
184b5938e7dSDevin Teskectrl_interface=/var/run/wpa_supplicant
185b5938e7dSDevin Teskeeapol_version=2
186b5938e7dSDevin Teskeap_scan=1
187b5938e7dSDevin Teskefast_reauth=1
188b5938e7dSDevin Teske
189b5938e7dSDevin TeskeEOF
190f18789d7SDevin Teske
19197a4c9f0SDevin Teske#
192f18789d7SDevin Teske# Try to reach wpa_supplicant. If it isn't running and we can modify the
193f18789d7SDevin Teske# existing system, start it. Otherwise, fail.
19497a4c9f0SDevin Teske#
1959a46c67aSDevin Teskeif ! f_eval_catch -d wlanconfig wpa_cli "wpa_cli ping"; then
1960724c87cSDevin Teske	if [ ! "$BSDINSTALL_CONFIGCURRENT" ]; then
1971d92999cSDevin Teske		f_show_err "Wireless cannot be configured without %s" \
1981d92999cSDevin Teske		           "making changes to the local system!"
1990724c87cSDevin Teske		exit 1
2000724c87cSDevin Teske	fi
2019a46c67aSDevin Teske	f_eval_catch wlanconfig wpa_supplicant \
2029a46c67aSDevin Teske		'wpa_supplicant -B -i "%s" -c "%s/wpa_supplicant.conf"' \
2039a46c67aSDevin Teske		"$1" "$BSDINSTALL_TMPETC" || exit 1
204f18789d7SDevin Teske
2056ef8ca67SDevin Teske	# See if we succeeded
2069a46c67aSDevin Teske	f_eval_catch wlanconfig wpa_cli "wpa_cli ping" || exit 1
2076b77f63eSDevin Teskefi
2086b77f63eSDevin Teske
20997a4c9f0SDevin Teske#
2104913f849SAndriy Voskoboinyk# There is no way to check country/regdomain without (possible)
2114913f849SAndriy Voskoboinyk# interface state modification
21297a4c9f0SDevin Teske#
21338a99423SDevin Teskeif [ "$BSDINSTALL_CONFIGCURRENT" ]; then
2144913f849SAndriy Voskoboinyk	# Get current country/regdomain for selected interface
215a7cc5680SDevin Teske	WLAN_IFACE=$( wpa_cli ifname | tail -n 1 )
216a7cc5680SDevin Teske	INPUT=$( ifconfig "$WLAN_IFACE" list regdomain | head -n 1 )
21766ef7d94SDevin Teske	DEF_REGDOMAIN=$( echo "$INPUT" | cut -w -f 2 )
21866ef7d94SDevin Teske	DEF_COUNTRY=$( echo "$INPUT" | cut -w -f 4 )
219c62801e2SDevin Teske	[ "$DEF_REGDOMAIN" = 0 ] && DEF_REGDOMAIN="<not selected>"
2200b04945dSDevin Teske	[ "$DEF_COUNTRY" = 0 ] && DEF_COUNTRY="<not selected>"
22158ce2edcSDevin Teske	f_dialog_title "Regdomain/country"
222b46ca7ceSDevin Teske	if f_yesno "Change regdomain/country ($DEF_REGDOMAIN/$DEF_COUNTRY)?"
223a9d33421SDevin Teske	then
224afcce2f5SDevin Teske		while ! dialog_country_select "$DEF_REGDOMAIN" "$DEF_COUNTRY"
225afcce2f5SDevin Teske		do :; done
2264913f849SAndriy Voskoboinyk	fi
2274913f849SAndriy Voskoboinykfi
2284913f849SAndriy Voskoboinyk
22976b07bd9SDevin Teskewhile :; do
2303220bdd8SDevin Teske	SCANSSID=0
231153e73d7SBjoern A. Zeeb	# While wpa_supplicant may IFF_UP the interface, we do not want to rely
232153e73d7SBjoern A. Zeeb	# in this.  In case the script is run manually (outside the installer,
233153e73d7SBjoern A. Zeeb	# e.g., for testing) wpa_supplicant may be running and the wlanN
234153e73d7SBjoern A. Zeeb	# interface may be down (especially if dialog_country_select is not
235153e73d7SBjoern A. Zeeb	# run successfully either) and scanning will not work.
236153e73d7SBjoern A. Zeeb	f_eval_catch -d wlanconfig ifconfig "ifconfig $WLAN_IFACE up"
2379a46c67aSDevin Teske	f_eval_catch -d wlanconfig wpa_cli "wpa_cli scan"
23858ce2edcSDevin Teske	f_dialog_title "Scanning"
2397e1166deSDevin Teske	f_dialog_pause "Waiting 5 seconds to scan for wireless networks..." 5 ||
2407e1166deSDevin Teske		exit 1
2412118f387SNathan Whitehorn
2429a46c67aSDevin Teske	f_eval_catch -dk SCAN_RESULTS wlanconfig wpa_cli "wpa_cli scan_results"
2432abc4c24SDevin Teske	NETWORKS=$( echo "$SCAN_RESULTS" | awk -F '\t' '
244*0f15f535SMark Johnston		/..:..:..:..:..:../ && $5 { print $5 "\t" $4 }
2452abc4c24SDevin Teske	' | sort | uniq )
2462118f387SNathan Whitehorn
24738a99423SDevin Teske	if [ ! "$NETWORKS" ]; then
248d124dfc4SDevin Teske		f_dialog_title "$msg_error"
249d79a1355SDevin Teske		f_yesno "No wireless networks were found. Rescan?" && continue
250912df915SAlfonso S. Siciliano	else
251*0f15f535SMark Johnston		NETWORK=$( dialog_network_select )
252912df915SAlfonso S. Siciliano	fi
253f52733d4SDevin Teske	retval=$?
254f52733d4SDevin Teske	f_dialog_data_sanitize NETWORK
255f52733d4SDevin Teske	case $retval in
25610458583SDevin Teske	$DIALOG_OK) break ;;
2575357f8f7SDevin Teske	$DIALOG_CANCEL)
25835af83c1SDevin Teske		# Ask if the user wants to select network manually
2593220bdd8SDevin Teske		f_dialog_title "Network Selection"
260a5119576SDevin Teske		f_yesno "Do you want to select the network manually?" || exit 1
2613220bdd8SDevin Teske		f_dialog_input NETWORK "Enter SSID" || exit 1
262d5fddc4dSDevin Teske		prompt="Select encryption type"
263d5fddc4dSDevin Teske		menu_list="
264d5fddc4dSDevin Teske			'1 WPA/WPA2 PSK' ''
265d5fddc4dSDevin Teske			'2 WPA/WPA2 EAP' ''
266d5fddc4dSDevin Teske			'3 WEP' ''
267d5fddc4dSDevin Teske			'0 None' ''
268d5fddc4dSDevin Teske		" # END-QUOTE
269d5fddc4dSDevin Teske		eval f_dialog_menu_size height width rows \"\$DIALOG_TITLE\" \
270d5fddc4dSDevin Teske			\"\$DIALOG_BACKTITLE\" \"\$prompt\" \"\" $menu_list
271d5fddc4dSDevin Teske		ENCRYPTION=$( eval $DIALOG \
272d5fddc4dSDevin Teske			--title \"\$DIALOG_TITLE\"         \
273d5fddc4dSDevin Teske			--backtitle \"\$DIALOG_BACKTITLE\" \
274d5fddc4dSDevin Teske			--menu \"\$prompt\"                \
275d5fddc4dSDevin Teske			$height $width $rows               \
276d5fddc4dSDevin Teske			$menu_list                         \
277877ea047SDevin Teske			2>&1 >&$DIALOG_TERMINAL_PASSTHRU_FD
2782abc4c24SDevin Teske		) || exit 1
2793220bdd8SDevin Teske		SCANSSID=1
2803220bdd8SDevin Teske		break
2812118f387SNathan Whitehorn		;;
2825357f8f7SDevin Teske	$DIALOG_EXTRA) # Rescan
2832118f387SNathan Whitehorn		;;
2842118f387SNathan Whitehorn	esac
2854913f849SAndriy Voskoboinykdone
2862118f387SNathan Whitehorn
2872abc4c24SDevin Teske[ "$ENCRYPTION" ] || ENCRYPTION=$( echo "$NETWORKS" |
288*0f15f535SMark Johnston	awk -F '\t' "/^$NETWORK\t/ { print \$2 }" )
2892118f387SNathan Whitehorn
2907599c854SDevin Teskeif echo "$ENCRYPTION" | grep -q PSK; then
291ea2e60b0SDevin Teske	PASS=$( $DIALOG \
2922abc4c24SDevin Teske		--title "WPA Setup"              \
2937797a597SDevin Teske		--backtitle "$DIALOG_BACKTITLE"  \
2947797a597SDevin Teske		--insecure                       \
2952abc4c24SDevin Teske		--mixedform ""                   \
2962abc4c24SDevin Teske		0 0 0                            \
2972118f387SNathan Whitehorn		"SSID" 1 0 "$NETWORK" 1 12 0 0 2 \
298a4de89deSChristian Brueffer		"Password" 2 0 "" 2 12 15 63 1   \
299877ea047SDevin Teske		2>&1 >&$DIALOG_TERMINAL_PASSTHRU_FD
300bef42d18SDevin Teske	) || exec "$0" "$@"
30163939df8SDevin Teske	awk 'sub(/^\\/,"")||1' \
30263939df8SDevin Teske		>> "$BSDINSTALL_TMPETC/wpa_supplicant.conf" <<-EOF
303b5938e7dSDevin Teske	network={
30463939df8SDevin Teske	\	ssid="$NETWORK"
30563939df8SDevin Teske	\	scan_ssid=$SCANSSID
30663939df8SDevin Teske	\	psk="$PASS"
30763939df8SDevin Teske	\	priority=5
308b5938e7dSDevin Teske	}
309b5938e7dSDevin Teske	EOF
3101095816eSDevin Teskeelif echo "$ENCRYPTION" | grep -q EAP; then
311ea2e60b0SDevin Teske	USERPASS=$( $DIALOG \
3122abc4c24SDevin Teske		--title "WPA-Enterprise Setup"   \
3137797a597SDevin Teske		--backtitle "$DIALOG_BACKTITLE"  \
3147797a597SDevin Teske		--insecure                       \
31510458583SDevin Teske		--mixedform ""                   \
31610458583SDevin Teske		0 0 0                            \
317093b9154SGavin Atkinson		"SSID" 1 0 "$NETWORK" 1 12 0 0 2 \
318093b9154SGavin Atkinson		"Username" 2 0 "" 2 12 25 63 0   \
319093b9154SGavin Atkinson		"Password" 3 0 "" 3 12 25 63 1   \
320877ea047SDevin Teske		2>&1 >&$DIALOG_TERMINAL_PASSTHRU_FD
321bef42d18SDevin Teske	) || exec "$0" "$@"
32263939df8SDevin Teske	awk 'sub(/^\\/,"")||1' \
32363939df8SDevin Teske		>> "$BSDINSTALL_TMPETC/wpa_supplicant.conf" <<-EOF
324b5938e7dSDevin Teske	network={
32563939df8SDevin Teske	\	ssid="$NETWORK"
32663939df8SDevin Teske	\	scan_ssid=$SCANSSID
32763939df8SDevin Teske	\	key_mgmt=WPA-EAP$(
328093b9154SGavin Atkinson		echo "$USERPASS" | awk '
32963939df8SDevin Teske			NR == 1 { printf "\n\tidentity=\"%s\"", $1 }
33063939df8SDevin Teske			NR == 2 { printf "\n\tpassword=\"%s\"", $1 }
3310b8f01feSDevin Teske		' )
33263939df8SDevin Teske	\	priority=5
333b5938e7dSDevin Teske	}
334b5938e7dSDevin Teske	EOF
3351095816eSDevin Teskeelif echo "$ENCRYPTION" | grep -q WEP; then
336ea2e60b0SDevin Teske	WEPKEY=$( $DIALOG \
3372abc4c24SDevin Teske		--title "WEP Setup"              \
3387797a597SDevin Teske		--backtitle "$DIALOG_BACKTITLE"  \
3397797a597SDevin Teske		--insecure                       \
34010458583SDevin Teske		--mixedform ""                   \
34110458583SDevin Teske		0 0 0                            \
3422118f387SNathan Whitehorn		"SSID" 1 0 "$NETWORK" 1 12 0 0 2 \
3432118f387SNathan Whitehorn		"WEP Key 0" 2 0 "" 2 12 15 0 1   \
344877ea047SDevin Teske		2>&1 >&$DIALOG_TERMINAL_PASSTHRU_FD
345bef42d18SDevin Teske	) || exec "$0" "$@"
34663939df8SDevin Teske	awk 'sub(/^\\/,"")||1' \
34763939df8SDevin Teske		>> "$BSDINSTALL_TMPETC/wpa_supplicant.conf" <<-EOF
348b5938e7dSDevin Teske	network={
34963939df8SDevin Teske	\	ssid="$NETWORK"
35063939df8SDevin Teske	\	scan_ssid=$SCANSSID
35163939df8SDevin Teske	\	key_mgmt=NONE
35263939df8SDevin Teske	\	wep_key0="$WEPKEY"
35363939df8SDevin Teske	\	wep_tx_keyidx=0
35463939df8SDevin Teske	\	priority=5
355b5938e7dSDevin Teske	}
356b5938e7dSDevin Teske	EOF
3572118f387SNathan Whitehornelse # Open
35863939df8SDevin Teske	awk 'sub(/^\\/,"")||1' \
35963939df8SDevin Teske		>> "$BSDINSTALL_TMPETC/wpa_supplicant.conf" <<-EOF
360b5938e7dSDevin Teske	network={
36163939df8SDevin Teske	\	ssid="$NETWORK"
36263939df8SDevin Teske	\	scan_ssid=$SCANSSID
36363939df8SDevin Teske	\	key_mgmt=NONE
36463939df8SDevin Teske	\	priority=5
365b5938e7dSDevin Teske	}
366b5938e7dSDevin Teske	EOF
3672118f387SNathan Whitehornfi
3682118f387SNathan Whitehorn
3692118f387SNathan Whitehorn# Connect to any open networks policy
370b5938e7dSDevin Teskecat >> "$BSDINSTALL_TMPETC/wpa_supplicant.conf" <<EOF
371b5938e7dSDevin Teskenetwork={
372ebffa060SGavin Atkinson	priority=0
3732118f387SNathan Whitehorn	key_mgmt=NONE
374b5938e7dSDevin Teske}
375b5938e7dSDevin TeskeEOF
3762118f387SNathan Whitehorn
3772118f387SNathan Whitehorn# Bring up new network
37819dbb0baSDevin Teske[ "$BSDINSTALL_CONFIGCURRENT" ] &&
3799a46c67aSDevin Teske	f_eval_catch -d wlanconfig wpa_cli "wpa_cli reconfigure"
3802118f387SNathan Whitehorn
3810a835493SDevin Teskeexit $SUCCESS
382bc4a673fSDevin Teske
383bc4a673fSDevin Teske################################################################################
384bc4a673fSDevin Teske# END
385bc4a673fSDevin Teske################################################################################
386