12118f387SNathan Whitehorn#!/bin/sh
22118f387SNathan Whitehorn#-
32118f387SNathan Whitehorn# Copyright (c) 2011 Nathan Whitehorn
4*63939df8SDevin 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#
282118f387SNathan Whitehorn# $FreeBSD$
29bc4a673fSDevin Teske#
30bc4a673fSDevin Teske############################################################ INCLUDES
31bc4a673fSDevin Teske
32bc4a673fSDevin TeskeBSDCFG_SHARE="/usr/share/bsdconfig"
33bc4a673fSDevin Teske. $BSDCFG_SHARE/common.subr || exit 1
344913f849SAndriy Voskoboinykf_include $BSDCFG_SHARE/dialog.subr
3558dc38bdSDevin Teskef_dialog_backtitle "FreeBSD Installer"
36bc4a673fSDevin Teske
37f18789d7SDevin Teske############################################################ FUNCTIONS
382118f387SNathan Whitehorn
394913f849SAndriy Voskoboinykcountry_set()
404913f849SAndriy Voskoboinyk{
41bede0708SDevin Teske	local error_str iface_up ifconfig_args=
424913f849SAndriy Voskoboinyk
4397a4c9f0SDevin Teske	#
444913f849SAndriy Voskoboinyk	# Setup what was selected
4597a4c9f0SDevin Teske	# NB: Do not change order of arguments (or regdomain will be ignored)
4697a4c9f0SDevin Teske	#
47114a587eSDevin Teske	[ "$2" ] && ifconfig_args="$ifconfig_args country $2"
48114a587eSDevin Teske	[ "$1" ] && ifconfig_args="$ifconfig_args regdomain $1"
49114a587eSDevin Teske	[ "$ifconfig_args" ] || return $SUCCESS # Nothing to do
50114a587eSDevin Teske	ifconfig_args="${ifconfig_args# }"
514913f849SAndriy Voskoboinyk
524913f849SAndriy Voskoboinyk	# Regdomain/country cannot be applied while interface is running
5349748e0aSDevin Teske	iface_up=$( ifconfig -lu | grep -w "$WLAN_IFACE" )
5449748e0aSDevin Teske	[ "$iface_up" ] && ifconfig "$WLAN_IFACE" down
559a46c67aSDevin Teske	f_eval_catch -dk error_str wlanconfig ifconfig "ifconfig %s %s" \
569a46c67aSDevin Teske		"$WLAN_IFACE" "$ifconfig_args"
579a46c67aSDevin Teske	error_str="${error_str#ifconfig: }"
584913f849SAndriy Voskoboinyk	# Restart wpa_supplicant(8) (should not fail).
5994f5aec6SDevin Teske	[ "$iface_up" ] && 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
63*63939df8SDevin 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
72*63939df8SDevin 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++)
9595ee591eSDevin Teske				printf "'\''%s'\'' '\'\''", 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)
102*63939df8SDevin Teske				sub(/ [[:upper:]][[:upper:][:digit:]].*/, "",
103*63939df8SDevin 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
150f18789d7SDevin Teske############################################################ MAIN
151f18789d7SDevin Teske
1524fa8c81cSDevin Teske: > "$BSDINSTALL_TMPETC/wpa_supplicant.conf"
1538d5182d6SDevin Teskechmod 0600 "$BSDINSTALL_TMPETC/wpa_supplicant.conf"
154f18789d7SDevin Teske
155b5938e7dSDevin Teskecat >> "$BSDINSTALL_TMPETC/wpa_supplicant.conf" <<EOF
156b5938e7dSDevin Teskectrl_interface=/var/run/wpa_supplicant
157b5938e7dSDevin Teskeeapol_version=2
158b5938e7dSDevin Teskeap_scan=1
159b5938e7dSDevin Teskefast_reauth=1
160b5938e7dSDevin Teske
161b5938e7dSDevin TeskeEOF
162f18789d7SDevin Teske
16397a4c9f0SDevin Teske#
164f18789d7SDevin Teske# Try to reach wpa_supplicant. If it isn't running and we can modify the
165f18789d7SDevin Teske# existing system, start it. Otherwise, fail.
16697a4c9f0SDevin Teske#
1679a46c67aSDevin Teskeif ! f_eval_catch -d wlanconfig wpa_cli "wpa_cli ping"; then
1680724c87cSDevin Teske	if [ ! "$BSDINSTALL_CONFIGCURRENT" ]; then
1691d92999cSDevin Teske		f_show_err "Wireless cannot be configured without %s" \
1701d92999cSDevin Teske		           "making changes to the local system!"
1710724c87cSDevin Teske		exit 1
1720724c87cSDevin Teske	fi
1739a46c67aSDevin Teske	f_eval_catch wlanconfig wpa_supplicant \
1749a46c67aSDevin Teske		'wpa_supplicant -B -i "%s" -c "%s/wpa_supplicant.conf"' \
1759a46c67aSDevin Teske		"$1" "$BSDINSTALL_TMPETC" || exit 1
176f18789d7SDevin Teske
1776ef8ca67SDevin Teske	# See if we succeeded
1789a46c67aSDevin Teske	f_eval_catch wlanconfig wpa_cli "wpa_cli ping" || exit 1
1796b77f63eSDevin Teskefi
1806b77f63eSDevin Teske
18197a4c9f0SDevin Teske#
1824913f849SAndriy Voskoboinyk# There is no way to check country/regdomain without (possible)
1834913f849SAndriy Voskoboinyk# interface state modification
18497a4c9f0SDevin Teske#
18538a99423SDevin Teskeif [ "$BSDINSTALL_CONFIGCURRENT" ]; then
1864913f849SAndriy Voskoboinyk	# Get current country/regdomain for selected interface
187a7cc5680SDevin Teske	WLAN_IFACE=$( wpa_cli ifname | tail -n 1 )
188a7cc5680SDevin Teske	INPUT=$( ifconfig "$WLAN_IFACE" list regdomain | head -n 1 )
18966ef7d94SDevin Teske	DEF_REGDOMAIN=$( echo "$INPUT" | cut -w -f 2 )
19066ef7d94SDevin Teske	DEF_COUNTRY=$( echo "$INPUT" | cut -w -f 4 )
191c62801e2SDevin Teske	[ "$DEF_REGDOMAIN" = 0 ] && DEF_REGDOMAIN="<not selected>"
1920b04945dSDevin Teske	[ "$DEF_COUNTRY" = 0 ] && DEF_COUNTRY="<not selected>"
19358ce2edcSDevin Teske	f_dialog_title "Regdomain/country"
194b46ca7ceSDevin Teske	if f_yesno "Change regdomain/country ($DEF_REGDOMAIN/$DEF_COUNTRY)?"
195a9d33421SDevin Teske	then
196afcce2f5SDevin Teske		while ! dialog_country_select "$DEF_REGDOMAIN" "$DEF_COUNTRY"
197afcce2f5SDevin Teske		do :; done
1984913f849SAndriy Voskoboinyk	fi
1994913f849SAndriy Voskoboinykfi
2004913f849SAndriy Voskoboinyk
20176b07bd9SDevin Teskewhile :; do
2023220bdd8SDevin Teske	SCANSSID=0
2039a46c67aSDevin Teske	f_eval_catch -d wlanconfig wpa_cli "wpa_cli scan"
20458ce2edcSDevin Teske	f_dialog_title "Scanning"
2057e1166deSDevin Teske	f_dialog_pause "Waiting 5 seconds to scan for wireless networks..." 5 ||
2067e1166deSDevin Teske		exit 1
2072118f387SNathan Whitehorn
2089a46c67aSDevin Teske	f_eval_catch -dk SCAN_RESULTS wlanconfig wpa_cli "wpa_cli scan_results"
2092abc4c24SDevin Teske	NETWORKS=$( echo "$SCAN_RESULTS" | awk -F '\t' '
210be094a32SDevin Teske		/..:..:..:..:..:../ && $5 { printf "\"%s\"\t\"%s\"\n", $5, $4 }
2112abc4c24SDevin Teske	' | sort | uniq )
2122118f387SNathan Whitehorn
21338a99423SDevin Teske	if [ ! "$NETWORKS" ]; then
214d124dfc4SDevin Teske		f_dialog_title "$msg_error"
215d79a1355SDevin Teske		f_yesno "No wireless networks were found. Rescan?" && continue
2162118f387SNathan Whitehorn		exit 1
2172118f387SNathan Whitehorn	fi
2182118f387SNathan Whitehorn
21958ce2edcSDevin Teske	f_dialog_title "Network Selection"
220d5fddc4dSDevin Teske	prompt="Select a wireless network to connect to."
221b9f60abaSDevin Teske	f_dialog_menu_size height width rows "$DIALOG_TITLE" \
222b9f60abaSDevin Teske		"$DIALOG_BACKTITLE" "$prompt" "" $menu_list
223d5fddc4dSDevin Teske	NETWORK=$( eval $DIALOG \
224d5fddc4dSDevin Teske		--title \"\$DIALOG_TITLE\"         \
225d5fddc4dSDevin Teske		--backtitle \"\$DIALOG_BACKTITLE\" \
2262abc4c24SDevin Teske		--extra-button                     \
2272abc4c24SDevin Teske		--extra-label \"Rescan\"           \
228d5fddc4dSDevin Teske		--menu \"\$prompt\"                \
229d5fddc4dSDevin Teske		$height $width $rows               \
230f3a8471eSDevin Teske		$NETWORKS                          \
231877ea047SDevin Teske		2>&1 >&$DIALOG_TERMINAL_PASSTHRU_FD
2322abc4c24SDevin Teske	)
233f52733d4SDevin Teske	retval=$?
234f52733d4SDevin Teske	f_dialog_data_sanitize NETWORK
235f52733d4SDevin Teske	case $retval in
23610458583SDevin Teske	$DIALOG_OK) break ;;
2375357f8f7SDevin Teske	$DIALOG_CANCEL)
23835af83c1SDevin Teske		# Ask if the user wants to select network manually
2393220bdd8SDevin Teske		f_dialog_title "Network Selection"
240a5119576SDevin Teske		f_yesno "Do you want to select the network manually?" || exit 1
2413220bdd8SDevin Teske		f_dialog_input NETWORK "Enter SSID" || exit 1
242d5fddc4dSDevin Teske		prompt="Select encryption type"
243d5fddc4dSDevin Teske		menu_list="
244d5fddc4dSDevin Teske			'1 WPA/WPA2 PSK' ''
245d5fddc4dSDevin Teske			'2 WPA/WPA2 EAP' ''
246d5fddc4dSDevin Teske			'3 WEP' ''
247d5fddc4dSDevin Teske			'0 None' ''
248d5fddc4dSDevin Teske		" # END-QUOTE
249d5fddc4dSDevin Teske		eval f_dialog_menu_size height width rows \"\$DIALOG_TITLE\" \
250d5fddc4dSDevin Teske			\"\$DIALOG_BACKTITLE\" \"\$prompt\" \"\" $menu_list
251d5fddc4dSDevin Teske		ENCRYPTION=$( eval $DIALOG \
252d5fddc4dSDevin Teske			--title \"\$DIALOG_TITLE\"         \
253d5fddc4dSDevin Teske			--backtitle \"\$DIALOG_BACKTITLE\" \
254d5fddc4dSDevin Teske			--menu \"\$prompt\"                \
255d5fddc4dSDevin Teske			$height $width $rows               \
256d5fddc4dSDevin Teske			$menu_list                         \
257877ea047SDevin Teske			2>&1 >&$DIALOG_TERMINAL_PASSTHRU_FD
2582abc4c24SDevin Teske		) || exit 1
2593220bdd8SDevin Teske		SCANSSID=1
2603220bdd8SDevin Teske		break
2612118f387SNathan Whitehorn		;;
2625357f8f7SDevin Teske	$DIALOG_EXTRA) # Rescan
2632118f387SNathan Whitehorn		;;
2642118f387SNathan Whitehorn	esac
2654913f849SAndriy Voskoboinykdone
2662118f387SNathan Whitehorn
2672abc4c24SDevin Teske[ "$ENCRYPTION" ] || ENCRYPTION=$( echo "$NETWORKS" |
26801a2404cSDevin Teske	awk -F '\t' "/^\"$NETWORK\"\t/ { print \$2 }" )
2692118f387SNathan Whitehorn
2707599c854SDevin Teskeif echo "$ENCRYPTION" | grep -q PSK; then
271ea2e60b0SDevin Teske	PASS=$( $DIALOG \
2722abc4c24SDevin Teske		--title "WPA Setup"              \
2737797a597SDevin Teske		--backtitle "$DIALOG_BACKTITLE"  \
2747797a597SDevin Teske		--insecure                       \
2752abc4c24SDevin Teske		--mixedform ""                   \
2762abc4c24SDevin Teske		0 0 0                            \
2772118f387SNathan Whitehorn		"SSID" 1 0 "$NETWORK" 1 12 0 0 2 \
278a4de89deSChristian Brueffer		"Password" 2 0 "" 2 12 15 63 1   \
279877ea047SDevin Teske		2>&1 >&$DIALOG_TERMINAL_PASSTHRU_FD
280bef42d18SDevin Teske	) || exec "$0" "$@"
281*63939df8SDevin Teske	awk 'sub(/^\\/,"")||1' \
282*63939df8SDevin Teske		>> "$BSDINSTALL_TMPETC/wpa_supplicant.conf" <<-EOF
283b5938e7dSDevin Teske	network={
284*63939df8SDevin Teske	\	ssid="$NETWORK"
285*63939df8SDevin Teske	\	scan_ssid=$SCANSSID
286*63939df8SDevin Teske	\	psk="$PASS"
287*63939df8SDevin Teske	\	priority=5
288b5938e7dSDevin Teske	}
289b5938e7dSDevin Teske	EOF
2901095816eSDevin Teskeelif echo "$ENCRYPTION" | grep -q EAP; then
291ea2e60b0SDevin Teske	USERPASS=$( $DIALOG \
2922abc4c24SDevin Teske		--title "WPA-Enterprise Setup"   \
2937797a597SDevin Teske		--backtitle "$DIALOG_BACKTITLE"  \
2947797a597SDevin Teske		--insecure                       \
29510458583SDevin Teske		--mixedform ""                   \
29610458583SDevin Teske		0 0 0                            \
297093b9154SGavin Atkinson		"SSID" 1 0 "$NETWORK" 1 12 0 0 2 \
298093b9154SGavin Atkinson		"Username" 2 0 "" 2 12 25 63 0   \
299093b9154SGavin Atkinson		"Password" 3 0 "" 3 12 25 63 1   \
300877ea047SDevin Teske		2>&1 >&$DIALOG_TERMINAL_PASSTHRU_FD
301bef42d18SDevin Teske	) || exec "$0" "$@"
302*63939df8SDevin Teske	awk 'sub(/^\\/,"")||1' \
303*63939df8SDevin Teske		>> "$BSDINSTALL_TMPETC/wpa_supplicant.conf" <<-EOF
304b5938e7dSDevin Teske	network={
305*63939df8SDevin Teske	\	ssid="$NETWORK"
306*63939df8SDevin Teske	\	scan_ssid=$SCANSSID
307*63939df8SDevin Teske	\	key_mgmt=WPA-EAP$(
308093b9154SGavin Atkinson		echo "$USERPASS" | awk '
309*63939df8SDevin Teske			NR == 1 { printf "\n\tidentity=\"%s\"", $1 }
310*63939df8SDevin Teske			NR == 2 { printf "\n\tpassword=\"%s\"", $1 }
3110b8f01feSDevin Teske		' )
312*63939df8SDevin Teske	\	priority=5
313b5938e7dSDevin Teske	}
314b5938e7dSDevin Teske	EOF
3151095816eSDevin Teskeelif echo "$ENCRYPTION" | grep -q WEP; then
316ea2e60b0SDevin Teske	WEPKEY=$( $DIALOG \
3172abc4c24SDevin Teske		--title "WEP Setup"              \
3187797a597SDevin Teske		--backtitle "$DIALOG_BACKTITLE"  \
3197797a597SDevin Teske		--insecure                       \
32010458583SDevin Teske		--mixedform ""                   \
32110458583SDevin Teske		0 0 0                            \
3222118f387SNathan Whitehorn		"SSID" 1 0 "$NETWORK" 1 12 0 0 2 \
3232118f387SNathan Whitehorn		"WEP Key 0" 2 0 "" 2 12 15 0 1   \
324877ea047SDevin Teske		2>&1 >&$DIALOG_TERMINAL_PASSTHRU_FD
325bef42d18SDevin Teske	) || exec "$0" "$@"
326*63939df8SDevin Teske	awk 'sub(/^\\/,"")||1' \
327*63939df8SDevin Teske		>> "$BSDINSTALL_TMPETC/wpa_supplicant.conf" <<-EOF
328b5938e7dSDevin Teske	network={
329*63939df8SDevin Teske	\	ssid="$NETWORK"
330*63939df8SDevin Teske	\	scan_ssid=$SCANSSID
331*63939df8SDevin Teske	\	key_mgmt=NONE
332*63939df8SDevin Teske	\	wep_key0="$WEPKEY"
333*63939df8SDevin Teske	\	wep_tx_keyidx=0
334*63939df8SDevin Teske	\	priority=5
335b5938e7dSDevin Teske	}
336b5938e7dSDevin Teske	EOF
3372118f387SNathan Whitehornelse # Open
338*63939df8SDevin Teske	awk 'sub(/^\\/,"")||1' \
339*63939df8SDevin Teske		>> "$BSDINSTALL_TMPETC/wpa_supplicant.conf" <<-EOF
340b5938e7dSDevin Teske	network={
341*63939df8SDevin Teske	\	ssid="$NETWORK"
342*63939df8SDevin Teske	\	scan_ssid=$SCANSSID
343*63939df8SDevin Teske	\	key_mgmt=NONE
344*63939df8SDevin Teske	\	priority=5
345b5938e7dSDevin Teske	}
346b5938e7dSDevin Teske	EOF
3472118f387SNathan Whitehornfi
3482118f387SNathan Whitehorn
3492118f387SNathan Whitehorn# Connect to any open networks policy
350b5938e7dSDevin Teskecat >> "$BSDINSTALL_TMPETC/wpa_supplicant.conf" <<EOF
351b5938e7dSDevin Teskenetwork={
352ebffa060SGavin Atkinson	priority=0
3532118f387SNathan Whitehorn	key_mgmt=NONE
354b5938e7dSDevin Teske}
355b5938e7dSDevin TeskeEOF
3562118f387SNathan Whitehorn
3572118f387SNathan Whitehorn# Bring up new network
35819dbb0baSDevin Teske[ "$BSDINSTALL_CONFIGCURRENT" ] &&
3599a46c67aSDevin Teske	f_eval_catch -d wlanconfig wpa_cli "wpa_cli reconfigure"
3602118f387SNathan Whitehorn
3610a835493SDevin Teskeexit $SUCCESS
362bc4a673fSDevin Teske
363bc4a673fSDevin Teske################################################################################
364bc4a673fSDevin Teske# END
365bc4a673fSDevin Teske################################################################################
366