summaryrefslogtreecommitdiffstats
path: root/scripts/netcfg-menu
diff options
context:
space:
mode:
Diffstat (limited to 'scripts/netcfg-menu')
-rwxr-xr-xscripts/netcfg-menu69
1 files changed, 69 insertions, 0 deletions
diff --git a/scripts/netcfg-menu b/scripts/netcfg-menu
new file mode 100755
index 0000000..ff57005
--- /dev/null
+++ b/scripts/netcfg-menu
@@ -0,0 +1,69 @@
+#! /bin/bash
+
+. /usr/lib/network/network
+
+if [[ ! -x /usr/bin/dialog ]]; then
+ echo "Please install 'dialog' to use netcfg-menu"
+ exit 1
+fi
+
+check_make_state_dir
+
+# JP: we'll use $STATE_DIR/menu to record what profile is being connected in this way
+rm -f "$STATE_DIR/menu"
+
+# Scan all profiles
+i=0
+# JP: change for prof to while read prof to avoid assumption that profile names are always single tokens (no spaces etc.)
+while read prof; do
+ # if there is a profile called "main", Use as default
+ [[ "$prof" = "main" ]] && DEFAULT="main"
+ profiles[$i]="$prof"
+ let i++
+ profiles[$i]=$(. "$PROFILE_DIR/$prof"; echo "$DESCRIPTION")
+ let i++
+done < <(list_profiles | sort) # JP: re-use list_profiles instead of duplicating it; avoid subshell we'd get by piping it to the while read...
+
+if [[ ${#profiles} -eq 0 ]]; then
+ exit_err "No profiles were found in $PROFILE_DIR"
+fi
+
+[[ -n "$NETWORKS_MENU_DEFAULT" ]] && DEFAULT="$NETWORKS_MENU_DEFAULT"
+# if no default yet, use the first entry
+[[ -z "$DEFAULT" ]] && DEFAULT="${profiles[0]}"
+ANSWER=$(mktemp --tmpdir menu.XXXXXXXX) || exit 1
+
+# Set timeout
+if [[ -z "$1" ]]; then
+ TIMEOUT="0"
+else
+ TIMEOUT="$1"
+fi
+
+# Display Dialog
+dialog --timeout "$TIMEOUT" --default-item "$DEFAULT" \
+ --menu "Select the network profile you wish to use" \
+ 13 50 6 "${profiles[@]}" 2> "$ANSWER"
+
+ret=$?
+
+case $ret in
+ 1) ;; # Cancel - do nothing
+ 255) # timeout - use default
+ profile_up "$DEFAULT" # JP: use profile_up and catch $?
+ ret=$?
+ if [[ $ret -eq 0 ]]; then echo "$DEFAULT" > "$STATE_DIR/menu"; fi
+ ;;
+ 0) # User selection
+ profile_up "$(cat "$ANSWER")"
+ ret=$?
+ if [[ $ret -eq 0 ]]; then mv "$ANSWER" "$STATE_DIR/menu"; fi
+ ;;
+ *) # Shouldnt happen
+ exit_err "Abnormal ret code from dialog: $ret"
+ ;;
+esac
+rm -f "$ANSWER" # JP: add -f
+exit $ret # JP: exit with caught $?
+
+# vim: ft=sh ts=4 et sw=4: