summaryrefslogtreecommitdiff
path: root/setnet.sh
diff options
context:
space:
mode:
authorKatolaZ <katolaz@freaknet.org>2017-01-03 01:26:36 +0000
committerKatolaZ <katolaz@freaknet.org>2017-01-03 01:26:36 +0000
commite6ee41b03cdf8f5675d6e52b45a28523610443bf (patch)
tree3a07861e8384a17fc25e1b8337e88f3696f27945 /setnet.sh
parent3499e75cd5d747f3f222f878aeb99e29d77f085e (diff)
setnet.dash moved to setnet.sh -- Fixed a few bugs
Diffstat (limited to 'setnet.sh')
-rwxr-xr-xsetnet.sh1983
1 files changed, 1357 insertions, 626 deletions
diff --git a/setnet.sh b/setnet.sh
index 3a173c0..7e39341 100755
--- a/setnet.sh
+++ b/setnet.sh
@@ -1,4 +1,4 @@
-#!/bin/bash
+#!/bin/sh
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
@@ -19,7 +19,8 @@
#
# ----------------------------------------------------------------------
#
-# (c) KatolaZ (katolaz@freaknet.org) -- 2016/12/26
+# Copyleft (C) Vincenzo "KatolaZ" Nicosia (katolaz@freaknet.org) --
+# (2016, 2017)
#
#
@@ -28,44 +29,102 @@
## Initialisation
##
-VERSION=0.1
+VERSION=0.2
-DIALOGRC=~/.dialogrc
+TOPSTR="setnet-${VERSION} [user: $(id -run)]"
+DIALOG="dialog --backtitle \"${TOPSTR}\" "
-TOPSTR="setnet-0.1 [user: `id -run`]"
-DIALOG="dialog --backtitle \"${TOPSTR}\" "
+###############################
+## ##
+## Internal config variables ##
+## ##
+###############################
+
+##
+## Required dependencies. If any of those commands is missing,
+## the script will exit
+##
+
+HARD_DEPS="ip dhclient dialog netstat"
+
+##
+## Suggested dependencies. The script will issue a warning if any of
+## those commands is missing
+##
+SOFT_DEPS="wpa_cli wpa_supplicant"
+##
+## Optional dependencies. The script will check if those dependencies
+## exist, and if they do, will set a variable HAS_OPTS which contains
+## the names of the commands actually found
+##
+
+OPT_DEPS="host ping traceroute netstat pastebinit"
+#################################
-TMPFILE=$( (tempfile) 2>/dev/null) || TMPFILE=/tmp/setnet_$$
-WPA_PIDFILE=$( (tempfile) 2>/dev/null) || WPA_PIDFILE=/tmp/setnet_wpapid_$$
+#####################################
+## ##
+## HEIGHT/WIDTH of various dialogs ##
+## ##
+#####################################
+
+##
+## Regular windows
+##
WINDOW_WIDTH=75
WINDOW_HEIGHT=20
+##
+## Infoboxes
+##
INFO_WIDTH=40
INFO_HEIGHT=10
+
+##
+## Forms
+##
FORM_WIDTH=60
FORM_HEIGHT=12
+##
+## Large windows
+##
+
+LARGE_WIDTH=80
+LARGE_HEIGHT=20
+
+
+#################################
+
+################################
+## ##
+## Supported network families ##
+## ##
+################################
+
NET_FAMILIES="inet inet6"
+#################################
+
##
-## Load setnetrc
+## Load the configuration file "setnetrc"
##
-function load_setnetrc(){
+##function
+load_setnetrc(){
WPA_FILE=""
LOGFILE=""
## If we were given a parameter, is the rc file to load...
##
if [ $# -ge 1 ]; then
- . $1
+ . "$1"
return
fi
@@ -78,7 +137,7 @@ function load_setnetrc(){
##
if [ -f /etc/setnetrc ]; then
- . /etc/setnetrc
+ SETNETRC=/etc/setnetrc
fi
##
@@ -86,9 +145,10 @@ function load_setnetrc(){
##
if [ -f ~/.setnetrc ]; then
- . ~/.setnetrc
+ SETNETRC=~/.setnetrc
fi
+ . ${SETNETRC}
if [ -z ${WPA_FILE} ]; then
echo "Could not find WPA_FILE defined anywhere. Exiting"
@@ -102,7 +162,12 @@ function load_setnetrc(){
}
-function cleanup(){
+##
+## handler called upon exit/signal (NONE HUP INT TRAP TERM QUIT)
+##
+
+##function
+cleanup(){
rm -f ${TMPFILE}
rm -f ${WPA_PIDFILE}
}
@@ -117,45 +182,146 @@ function cleanup(){
##
## log() takes two arguments, namely the label and the message
##
-## if the label is "_self", print the name of the function which
-## called log()
##
-function log(){
+##function
+log(){
+
+ ##local
+ LABEL=$1
+ ##local
+ MSG=$2
+
+ echo "${LABEL}:" "${MSG}" >> "${LOGFILE}"
+
+}
- local LABEL=$1
- local MSG=$2
+##
+## Check whether the shell which called the script is supported, or
+## exit. Currently, we support the follwing shells:
+##
+## - bash
+## - busybox
+## - dash
+## - ksh
+## - mksh
+## - posh
+## - sh
+## - yash
+##
- if [ ${LABEL} == "_self" ]; then
- LABEL=${FUNCNAME[1]}
- fi
- echo -e "${LABEL}:" "${MSG}" >> "${LOGFILE}"
-
+##function
+check_shell(){
+
+ ##
+ ## FIXME!!! THIS TEST DOES NOT WORK yet...
+ ##
+ CUR_SH=$(ps -p $$ -o comm=)
+ case ${CUR_SH} in
+ ash|bash|busybox|dash|ksh|mksh|posh|sh|yash)
+ log "check_shell" "The current shell (${CUR_SH}) is supported"
+ return
+ ;;
+ *)
+ log "check_shell" "The current shell (${CUR_SH}) is not supported"
+ echo "The current shell (${CUR_SH}) is not supported. Exiting..."
+ exit 1
+ ;;
+ esac
}
-##########################################
-function edit_file(){
+##
+## Check dependencies
+##
+## - check if the current shell is supported through check_shell
+##
+## - each command in HARD_DEPS MUST exist, or the script exits
+##
+## - each command in SOFT_DEPS SHOULD exist, or the script will log a
+## warning
+##
+## - each command in OPT_DEPS MIGHT exist, and if it does its name is
+## included in the variable "HAS_OPTS"
+##
+
+##function
+check_deps(){
+
+ ## FIXME FIRST.... check_shell
+
+ for h in ${HARD_DEPS}; do
+ _W=$(which ${h})
+ if [ -z "${_W}" ]; then
+ echo "Error: required command \"${h}\" not found. Exiting..."
+ exit 1
+ fi
+ log "check_deps" "NOTICE: required command '${h}'...found"
+ done
+
+ for s in ${SOFT_DEPS}; do
+ _S=$(which ${s})
+ if [ -z "${_S}" ]; then
+ log "check_deps" "WARNING: suggested command '${s}' not found! Some functions might not work properly"
+ fi
+ done
+
+ HAS_OPTS=""
+ for o in ${OPT_DEPS}; do
+ _O=$(which ${o})
+ if [ -n "${_O}" ]; then
+ HAS_OPTS=" ${HAS_OPTS} ${o} "
+ log "check_deps" "NOTICE: optional command '${o}'...found"
+ else
+ log "check_deps" "NOTICE: optional command '${o}' not found!"
+ fi
+ done
+
+ log "check_deps" "HAS_OPTS: \"${HAS_OPTS}\""
+
+}
- local FILEIN=$1
- log "edit_file" "editing file ${FILEIN}"
- eval "${DIALOG} --title 'Editing file: ${FILEIN}' \
- --editbox ${FILEIN} ${WINDOW_HEIGHT} ${WINDOW_WIDTH} 2> ${TMPFILE}"
+##
+## Generic function fo unimplemented features. It just pops up a
+## message-box and returns
+##
- if [ $? -eq 0 ]; then
- log "edit_file" "Copying ${TMPFILE} into ${FILEIN}"
- if cp ${TMPFILE} ${FILEIN}
- then
- eval "${DIALOG} --clear --msgbox 'File ${FILEIN} saved successfully' \
+##function
+unimplemented(){
+
+ LABEL=$1
+
+ eval "${DIALOG} --msgbox 'Sorry! '$LABEL' not implemented, yet!' \
+ ${INFO_HEIGHT} ${INFO_WIDTH}" 2>${TMPFILE}
+}
+
+
+
+##########################################
+
+##function
+edit_file(){
+
+ ##local
+ FILEIN=$1
+ log "edit_file" "editing file ${FILEIN}"
+ eval "${DIALOG} --title 'Editing file: ${FILEIN}' \
+ --editbox ${FILEIN} ${WINDOW_HEIGHT} ${WINDOW_WIDTH}" 2> ${TMPFILE}
+
+ if [ $? -eq 0 ]; then
+ log "edit_file" "Copying ${TMPFILE} into ${FILEIN}"
+ if cp "${TMPFILE}" "${FILEIN}"
+ then
+ eval "${DIALOG} --clear --msgbox 'File ${FILEIN} saved successfully' \
${INFO_HEIGHT} ${INFO_WIDTH}"
- else
- eval "${DIALOG} --clear --msgbox 'Error saving file ${FILEIN}' \
+ else
+ eval "${DIALOG} --clear --msgbox 'Error saving file ${FILEIN}' \
${INFO_HEIGHT} ${INFO_WIDTH}"
- fi
- else
- log "edit_file" "Editing of ${FILEIN} aborted..."xs
- eval "${DIALOG} --clear --msgbox 'File ${FILEIN} not saved' \
+ fi
+ else
+ log "edit_file" "Editing of ${FILEIN} aborted..."
+ eval "${DIALOG} --clear --msgbox 'File ${FILEIN} not saved' \
${INFO_HEIGHT} ${INFO_WIDTH}"
- fi
+ fi
}
@@ -164,50 +330,55 @@ function edit_file(){
##
## Read all the configured addresses for a given inet family
##
-function get_addr_family(){
+##function
+get_addr_family(){
- local DEVNAME=$1
- local DEVFAMILY=$2
-
- NUMADDR=`ip -f ${DEVFAMILY} addr show ${DEVNAME} | grep ${DEVFAMILY} | wc -l`
- ADDR_STR=""
- for i in `seq ${NUMADDR}`; do
- ADDR=`ip -f ${DEVFAMILY} addr show ${DEVNAME} | grep ${DEVFAMILY} | \
- tail -n +$i | head -1 | sed -r -e "s:^\ +::g" | cut -d " " -f 2,4,6 |\
- sed -r -e "s:\ : -- :g"`
- ADDR_STR="${ADDR_STR}\n${DEVFAMILY}: ${ADDR}\n"
- done
+##local
+ DEVNAME=$1
+ ##local
+ DEVFAMILY=$2
+
+ NUMADDR=$(ip -f "${DEVFAMILY}" addr show "${DEVNAME}" | grep -c "${DEVFAMILY}")
+ ADDR_STR=""
+ for i in $(seq ${NUMADDR}); do
+ ADDR=$(ip -f "${DEVFAMILY}" addr show "${DEVNAME}" | grep "${DEVFAMILY}" | \
+ tail -n +$i | head -1 | sed -r -e "s:^\ +::g" | cut -d " " -f 2,4,6 |\
+ sed -r -e "s:\ : -- :g")
+ ADDR_STR="${ADDR_STR}\n${DEVFAMILY}: ${ADDR}\n"
+ done
}
##
## Show the current configuration of a given device
##
-function show_device_conf(){
+##function
+show_device_conf(){
- local DEVNAME=$1
- if [ ${DEVNAME} == "" ]; then
+##local
+DEVNAME=$1
+ if [ -z "${DEVNAME}" ]; then
return -1
fi
- DEVMAC=`ip link show ${DEVNAME} | tail -n +2 | sed -r 's/^\ +//g' | cut -d " " -f 2`
+ DEVMAC=$(ip link show "${DEVNAME}" | tail -n +2 | sed -r 's/^\ +//g' | cut -d " " -f 2)
DEVCONF="MAC: ${DEVMAC}\n"
- log "_self" "NET_FAMILIES: \"${NET_FAMILIES}\""
+ log "show_device_conf" "NET_FAMILIES: \"${NET_FAMILIES}\""
for f in ${NET_FAMILIES}; do
- get_addr_family ${DEVNAME} ${f}
- log "_self" "family: ${f} ADDR_STR: \"${ADDR_STR}\""
+ get_addr_family ${DEVNAME} ${f}
+ log "show_device_conf" "family: ${f} ADDR_STR: \"${ADDR_STR}\""
if [ -z "${ADDR_STR}" ]; then
DEVCONF="${DEVCONF}${f}: Unconfigured\n"
else
DEVCONF="${DEVCONF}${ADDR_STR}"
fi
- log "_self" "DEVCONF: ${DEVCONF}"
+ log "show_device_conf" "DEVCONF: ${DEVCONF}"
done
- DEVCONF="${DEVCONF}\n== name servers ==\n`cat /etc/resolv.conf | grep '^nameserver'`"
+ DEVCONF="${DEVCONF}\n== name servers ==\n$(grep '^nameserver' /etc/resolv.conf)"
eval "${DIALOG} --clear --title 'Current configuration of device: ${DEVNAME}' \
--msgbox '\n\n${DEVCONF}' ${WINDOW_HEIGHT} ${WINDOW_WIDTH} "
@@ -217,16 +388,24 @@ function show_device_conf(){
-function config_ethernet_static(){
+##function
+config_ethernet_static(){
- local DEV_IP="192.168.1.2"
- local DEV_NET="192.168.1.0"
- local DEV_NETMASK="255.255.255.0"
- local DEV_GW="192.168.1.1"
- local DEV_DNS1="208.67.222.222"
- local DEV_DNS2="208.67.220.220"
+##local
+DEV_IP="192.168.1.2"
+##local
+DEV_NET="192.168.1.0"
+##local
+DEV_NETMASK="255.255.255.0"
+##local
+DEV_GW="192.168.1.1"
+##local
+DEV_DNS1="208.67.222.222"
+##local
+DEV_DNS2="208.67.220.220"
- local DEVNAME=$1
+##local
+DEVNAME=$1
exec 3>&1
eval "${DIALOG} --clear --form 'Set network for device: ${DEVNAME}'" \
@@ -250,216 +429,232 @@ function config_ethernet_static(){
## Configure IP
- ip link set ${DEVNAME} down
- ip link set ${DEVNAME} up
- ip address flush dev ${DEVNAME}
- ip address add ${DEV_IP}/${DEV_NETMASK} dev ${DEVNAME}
+ ip link set "${DEVNAME}" down
+ ip link set "${DEVNAME}" up
+ ip address flush dev "${DEVNAME}"
+ ip address add "${DEV_IP}/${DEV_NETMASK}" dev "${DEVNAME}"
## Configure GW
- ip route flush dev ${DEVNAME}
- ip route add ${DEV_NET}/${DEV_NETMASK} dev ${DEVNAME}
- ip route add default via ${DEV_GW}
+ ip route flush dev "${DEVNAME}"
+ ip route add "${DEV_NET}/${DEV_NETMASK}" dev "${DEVNAME}"
+ ip route add default via "${DEV_GW}"
## Configure DNS
mv /etc/resolv.conf /etc/resolv.conf.bak
- if [ -n ${DEV_DNS1} ]; then
+ if [ -n "${DEV_DNS1}" ]; then
echo "nameserver ${DEV_DNS1}" >> /etc/resolv.conf
fi
- if [ -n ${DEV_DNS2} ]; then
+ if [ -n "${DEV_DNS2}" ]; then
echo "nameserver ${DEV_DNS2}" >> /etc/resolv.conf
fi
- show_device_conf ${DEVNAME}
+ show_device_conf "${DEVNAME}"
}
-function config_ethernet_dhcp(){
+##function
+config_ethernet_dhcp(){
- local DEVNAME=$1
+##local
+DEVNAME=$1
- eval "${DIALOG} --infobox 'Running \"dhclient ${DEVNAME}\"' ${INFO_HEIGHT} ${INFO_WIDTH}"
- dhclient -r ${DEVNAME}
- dhclient ${DEVNAME}
+ eval "${DIALOG} --msgbox 'Running \"dhclient ${DEVNAME}\"' ${INFO_HEIGHT} ${INFO_WIDTH}"
+ dhclient -r ${DEVNAME}
+ dhclient ${DEVNAME}
show_device_conf ${DEVNAME}
}
-function config_ethernet(){
+##function
+config_ethernet(){
- local DEVNAME=$1
-
- while [ 1 -eq 1 ]; do
- eval "${DIALOG} --clear --cancel-label 'Up' \
+##local
+ DEVNAME=$1
+
+ while true; do
+ eval "${DIALOG} --clear --cancel-label 'Up' \
--menu 'Configuring ${DEVNAME}' ${INFO_HEIGHT} ${INFO_WIDTH} 4 \
'DHCP' ''\
- 'Static' '' 2>${TMPFILE}"
- if [ $? -eq 1 ]; then
- return
- fi
- ACTION=`<${TMPFILE}`
- case ${ACTION} in
- "Static")
- config_ethernet_static ${DEVNAME}
- ;;
- "DHCP")
- config_ethernet_dhcp ${DEVNAME}
- ;;
- esac
- done
-
+ 'Static' ''" 2>${TMPFILE}
+ if [ $? -eq 1 ]; then
+ return
+ fi
+ ACTION=$(cat ${TMPFILE})
+ case ${ACTION} in
+ "Static")
+ config_ethernet_static ${DEVNAME}
+ ;;
+ "DHCP")
+ config_ethernet_dhcp ${DEVNAME}
+ ;;
+ esac
+ done
+
}
-function wifi_essid_from_mac(){
+##function
+wifi_essid_from_mac(){
- local DEVNAME=$1
- local W_MAC=$2
-
- W_ESSID=`wpa_cli -i ${DEVNAME} scan_results | grep -E "^${W_MAC}" | \
- sed -r -e 's/\t/\|/g' | cut -d "|" -f 5`
+ ##local
+ DEVNAME=$1
+ ##local
+ W_MAC=$2
+
+ W_ESSID=$(wpa_cli -i "${DEVNAME}" scan_results | grep -E "^${W_MAC}" | \
+ sed -r -e 's/\t/\|/g' | cut -d "|" -f 5)
- log "${FUNCNAME[0]}" "Recovered ESSID: ${W_ESSID}"
+ log "wifi_essid_from_mac" "Recovered ESSID: ${W_ESSID}"
}
-function wifi_flags_from_mac(){
- local DEVNAME=$1
- local W_MAC=$2
-
- W_FLAGS=`wpa_cli -i ${DEVNAME} scan_results | grep -E "^${W_MAC}" | \
- sed -r -e 's/\t/\|/g' | cut -d "|" -f 4`
- log "wifi_essid_from_mac" "Recovered W_FLAGS: ${W_FLAGS}"
-
+##function
+wifi_flags_from_mac(){
+##local
+ DEVNAME=$1
+##local
+ W_MAC=$2
+
+ W_FLAGS=$(wpa_cli -i "${DEVNAME}" scan_results | grep -E "^${W_MAC}" | \
+ sed -r -e 's/\t/\|/g' | cut -d "|" -f 4)
+ log "wifi_essid_from_mac" "Recovered W_FLAGS: ${W_FLAGS}"
+
}
-function wifi_network_list(){
-
- local DEVNAME=$1
- wpa_cli -i ${DEVNAME} list_networks | tail -n +2 | sed -r -e 's/\t/\|/g' > ${TMPFILE}
-
- NETLIST=""
- LAST_IFS=$IFS
- IFS="|"
- while read NETNUM NETESSID NETBSSID NETFLAGS; do
- IS_DIS=`echo ${NETFLAGS} | sed -r -e 's/\[//g;s/\]//g' | grep -i disabled | wc -l`
- if [ ${IS_DIS} -eq 1 ]; then
- STATUS="(DIS)"
- else
- STATUS="(ENAB)"
- fi
- IS_CUR=`echo ${NETFLAGS} | sed -r -e 's/\[//g;s/\]//g' | grep -i current | wc -l`
- if [ ${IS_CUR} -eq 1 ]; then
- STATUS="${STATUS}(CUR)"
- fi
-
-
- NETLIST="${NETLIST} ${NETNUM} \"${NETESSID}-${STATUS}\""
- done < ${TMPFILE}
- IFS=${LAST_IFS}
-
- log "_self" "NETLIST: ${NETLIST}"
+##function
+wifi_network_list(){
+
+##local
+ DEVNAME=$1
+ wpa_cli -i ${DEVNAME} list_networks | tail -n +2 | sed -r -e 's/\t/\|/g' > ${TMPFILE}
+
+ NETLIST=""
+ LAST_IFS=$IFS
+ IFS="|"
+ while read NETNUM NETESSID NETBSSID NETFLAGS; do
+ IS_DIS=$(echo ${NETFLAGS} | sed -r -e 's/\[//g;s/\]//g' | grep -c -i disabled )
+ if [ ${IS_DIS} -eq 1 ]; then
+ STATUS="(DIS)"
+ else
+ STATUS="(ENAB)"
+ fi
+ IS_CUR=$(echo ${NETFLAGS} | sed -r -e 's/\[//g;s/\]//g' | grep -c -i current )
+ if [ ${IS_CUR} -eq 1 ]; then
+ STATUS="${STATUS}(CUR)"
+ fi
+
+
+ NETLIST="${NETLIST} ${NETNUM} \"${NETESSID}-${STATUS}\""
+ done < ${TMPFILE}
+ IFS=${LAST_IFS}
+
+ log "wifi_network_list" "NETLIST: ${NETLIST}"
}
##
## Manage the authentication for a given wifi ESSID
##
-function wifi_authenticate(){
+##function
+wifi_authenticate(){
- local DEVNAME=$1
- local W_MAC=$2
-
-
- log "${FUNCNAME[0]}" "configuring ${DEVNAME} on ${W_MAC}"
- ## This will set the variable W_ESSID appropriately
- wifi_essid_from_mac ${DEVNAME} ${W_MAC}
-
- ## This will set the variable W_FLAGS appropriately
- wifi_flags_from_mac ${DEVNAME} ${W_MAC}
-
-
- log "${FUNCNAME[0]}" "configuring essid: ${W_ESSID} on device: ${DEVNAME}"
- log "${FUNCNAME[0]}" "W_FLAGS: ${W_FLAGS}"
-
-
- NET_EXISTS=`wpa_cli -i ${DEVNAME} list_networks | tail -n +2 | sed -r -e 's/\t/\|/g' \
- | cut -d "|" -f 2 | grep "${W_ESSID}$" | wc -l`
- if [ ${NET_EXISTS} -ne 0 ]; then
- NET_NUM=`wpa_cli -i ${DEVNAME} list_networks | tail -n +2 | sed -r -e 's/\t/\|/g' \
- | cut -d "|" -f 1,2 | grep "${W_ESSID}$" | cut -d "|" -f 1`
- wpa_cli -i ${DEVNAME} remove_network ${NET_NUM} > ${TMPFILE}
- STATUS=`<${TMPFILE}`
- if [ ${STATUS} != "OK" ]; then
- eval "${DIALOG} --msgbox 'Error while removing existing network:\n$essid: {W_ESSID}'"
- ${INFO_HEIGHT} ${INFO_WIDTH}
- return
- fi
- fi
-
- HAS_WPA=`echo "${W_FLAGS}" | grep -E "WPA.*-PSK" | wc -l`
-
- log "${FUNCNAME[0]}" "HAS_WPA: \"${HAS_WPA}\""
-
- ### This section will configure WPA-PSK or WPA2-PSK
- if [ ${HAS_WPA} != "0" ]; then
- PSK=""
- PSK_LENGTH=${#PSK}
- while [ ${PSK_LENGTH} -le 7 ]; do
- eval "${DIALOG} --insecure --inputbox 'Please insert WPA PSK\n(8 characters)' \
- ${INFO_HEIGHT} ${INFO_WIDTH} 2> ${TMPFILE}"
- if [ $? -eq 1 ]; then
- eval "${DIALOG} --clear --msgbox 'Network configuration aborted!!!' \
+##local
+ DEVNAME=$1
+##local
+ W_MAC=$2
+
+
+ log "wifi_authenticate" "configuring ${DEVNAME} on ${W_MAC}"
+ ## This will set the variable W_ESSID appropriately
+ wifi_essid_from_mac ${DEVNAME} ${W_MAC}
+
+ ## This will set the variable W_FLAGS appropriately
+ wifi_flags_from_mac ${DEVNAME} ${W_MAC}
+
+
+ log "wifi_authenticate" "configuring essid: ${W_ESSID} on device: ${DEVNAME}"
+ log "wifi_authenticate" "W_FLAGS: ${W_FLAGS}"
+
+
+ NET_EXISTS=$(wpa_cli -i ${DEVNAME} list_networks | tail -n +2 | sed -r -e 's/\t/\|/g' \
+ | cut -d "|" -f 2 | grep -c "${W_ESSID}$" )
+ if [ ${NET_EXISTS} != 0 ]; then
+ NET_NUM=$(wpa_cli -i ${DEVNAME} list_networks | tail -n +2 | sed -r -e 's/\t/\|/g' \
+ | cut -d "|" -f 1,2 | grep "${W_ESSID}$" | cut -d "|" -f 1)
+ wpa_cli -i ${DEVNAME} remove_network ${NET_NUM} > ${TMPFILE}
+ STATUS=$(cat ${TMPFILE})
+ if [ "${STATUS}" != "OK" ]; then
+ eval "${DIALOG} --msgbox 'Error while removing existing network:\n$essid: {W_ESSID}'"
+ ${INFO_HEIGHT} ${INFO_WIDTH}
+ return
+ fi
+ fi
+
+
+ HAS_WPA=$(echo "${W_FLAGS}" | grep -E -c "WPA.*-PSK" )
+
+ log "wifi_authenticate" "HAS_WPA: \"${HAS_WPA}\""
+
+ ### This section will configure WPA-PSK or WPA2-PSK
+ if [ "${HAS_WPA}" != "0" ]; then
+ PSK=""
+ PSK_LENGTH=${#PSK}
+ while [ ${PSK_LENGTH} -le 7 ]; do
+ eval "${DIALOG} --insecure --inputbox 'Please insert WPA PSK\n(8 characters)' \
+ ${INFO_HEIGHT} ${INFO_WIDTH}" 2> ${TMPFILE}
+ if [ $? -eq 1 ]; then
+ eval "${DIALOG} --clear --msgbox 'Network configuration aborted!!!' \
${INFO_HEIGHT} ${INFO_WIDTH}"
- return 1
- fi
- PSK=`<${TMPFILE}`
- PSK_LENGTH=${#PSK}
- done
-
-
- NET_NUM=`wpa_cli -i ${DEVNAME} add_network | tail -1`
-
- log "${FUNCNAME[0]}" `wpa_cli -i ${DEVNAME} set_network ${NET_NUM} ssid "\"${W_ESSID}\""`
- log "${FUNCNAME[0]}" `wpa_cli -i ${DEVNAME} set_network ${NET_NUM} psk \"${PSK}\"`
- ## remove the password from tmpfile
- echo "" > ${TMPFILE}
- eval "${DIALOG} --clear --defaultno --yesno \
+ return 1
+ fi
+ PSK=$(cat ${TMPFILE})
+ PSK_LENGTH=${#PSK}
+ done
+
+
+ NET_NUM=$(wpa_cli -i ${DEVNAME} add_network | tail -1)
+
+ wpa_cli -i ${DEVNAME} set_network ${NET_NUM} ssid "\"${W_ESSID}\""
+ wpa_cli -i ${DEVNAME} set_network ${NET_NUM} psk \"${PSK}\"
+ ## remove the password from tmpfile
+ echo "" > ${TMPFILE}
+ eval "${DIALOG} --clear --defaultno --yesno \
'Network \"${W_ESSID}\" added\nSave configuration file?' \
- ${INFO_HEIGHT} ${INFO_WIDTH} 2> ${TMPFILE}"
- if [ $? -eq 0 ]; then
- ## Save the config file
- wifi_save_file ${DEVNAME}
- fi
-
- eval "${DIALOG} --msgbox 'Network added successfully' ${INFO_HEIGHT} ${INFO_WIDTH}"
- return 0
- fi
-
- HAS_ESS=`echo "${W_FLAGS}" | grep -E "ESS" | wc -l`
-
- log "_self" "HAS_ESS: \"${HAS_ESS}\""
-
- if [ ${HAS_ESS} != "0" ]; then
- NET_NUM=`wpa_cli -i ${DEVNAME} add_network | tail -1`
-
- log "_self" "NET_NUM: ${NET_NUM}"
- log "_self" `wpa_cli -i ${DEVNAME} set_network ${NET_NUM} ssid "\"${W_ESSID}\""`
- log "_self" `wpa_cli -i ${DEVNAME} set_network ${NET_NUM} key_mgmt NONE`
- eval "${DIALOG} --clear --defaultno --yesno \
+ ${INFO_HEIGHT} ${INFO_WIDTH} " 2> ${TMPFILE}
+ if [ $? -eq 0 ]; then
+ ## Save the config file
+ wifi_save_file ${DEVNAME}
+ fi
+
+ eval "${DIALOG} --msgbox 'Network added successfully' ${INFO_HEIGHT} ${INFO_WIDTH}"
+ return 0
+ fi
+
+ HAS_ESS=$(echo "${W_FLAGS}" | grep -E -c "ESS" )
+
+ log "wifi_authenticate" "HAS_ESS: \"${HAS_ESS}\""
+
+ if [ "${HAS_ESS}" != "0" ]; then
+ NET_NUM=$(wpa_cli -i ${DEVNAME} add_network | tail -1)
+
+ log "wifi_authenticate" "NET_NUM: ${NET_NUM}"
+ wpa_cli -i ${DEVNAME} set_network ${NET_NUM} ssid "\"${W_ESSID}\""
+ wpa_cli -i ${DEVNAME} set_network ${NET_NUM} key_mgmt NONE
+ eval "${DIALOG} --clear --defaultno --yesno \
'Network \"${W_ESSID}\" added\nSave configuration file?' \
- ${INFO_HEIGHT} ${INFO_WIDTH} 2> ${TMPFILE}"
- if [ $? -eq 0 ]; then
- ## Save the config file
- wifi_save_file ${DEVNAME}
- fi
-
- return 0
- else
- eval " ${DIALOG} --msgbox 'Error occurred!!!!' ${INFO_HEIGHT} ${INFO_WIDTH}"
- return 0
- fi
-
- ## No available authentication methods....
-
- eval "${DIALOG} --msgbox 'No supported authentication method for ${W_ESSID}'"
- return 1
+ ${INFO_HEIGHT} ${INFO_WIDTH} " 2> ${TMPFILE}
+ if [ $? -eq 0 ]; then
+ ## Save the config file
+ wifi_save_file ${DEVNAME}
+ fi
+
+ return 0
+ else
+ eval " ${DIALOG} --msgbox 'Error occurred!!!!' ${INFO_HEIGHT} ${INFO_WIDTH}"
+ return 0
+ fi
+
+ ## No available authentication methods....
+
+ eval "${DIALOG} --msgbox 'No supported authentication method for ${W_ESSID}'"
+ return 1
}
@@ -469,9 +664,11 @@ function wifi_authenticate(){
## Configure a new connection from a list of available wi-fi networks
##
-function wifi_add(){
+##function
+wifi_add(){
- local DEVNAME=$1
+##local
+DEVNAME=$1
wpa_cli -i ${DEVNAME} scan
eval "${DIALOG} --timeout 4 --msgbox 'Scanning for networks...' \
@@ -480,20 +677,20 @@ function wifi_add(){
sed -r -e 's/\t/|/g' |\
sort -t "|" -r -n -k 3 > ${TMPFILE}
- wifinets=()
+ wifinets=""
LAST_IFS=$IFS
IFS="|"
while read W_MAC W_FREQ W_STRNGT W_FLAGS W_ESSID; do
- log "_self" "W_ESSID: \"${W_ESSID}\""
- wifinets+=(${W_MAC} "${W_ESSID} -- ${W_FLAGS}")
+ log "wifi_add" "W_ESSID: \"${W_ESSID}\""
+ wifinets="${wifinets} ${W_MAC} \"${W_ESSID} -- ${W_FLAGS}\""
done < ${TMPFILE}
IFS=${LAST_IFS}
- log "$_self" "Wifi nets: \n${wifinets}\n==="
- dialog --menu 'Select a network' ${WINDOW_HEIGHT} ${WINDOW_WIDTH} 10 \
- "${wifinets[@]}" 2> ${TMPFILE}
+ log "wifi_add" "Wifi nets: \n${wifinets}\n==="
+ eval "dialog --menu 'Select a network' ${WINDOW_HEIGHT} ${WINDOW_WIDTH} 10 \
+ ${wifinets} " 2> ${TMPFILE}
if [ $? -eq 1 ]; then
return
fi
@@ -502,20 +699,22 @@ function wifi_add(){
wifi_authenticate ${DEVNAME} ${W_MAC}
- if [ $? -ne 0 ]; then
+ if [ $? != "0" ]; then
eval "${DIALOG} --msgbox 'Error while configuring ${DEVNAME}' "
fi
return $?
}
-function wifi_save_file(){
+##function
+wifi_save_file(){
- local DEVNAME=$1
+##local
+DEVNAME=$1
wpa_cli -i ${DEVNAME} save_config | tail -1 > ${TMPFILE}
- SAVE_STATUS=`<${TMPFILE}`
- if [ ${SAVE_STATUS} == "OK" ]; then
+ SAVE_STATUS=$(cat ${TMPFILE})
+ if [ "${SAVE_STATUS}" = "OK" ]; then
eval "${DIALOG} --msgbox 'Current configuration dumped to file ${WPA_FILE}' \
${INFO_HEIGHT} ${INFO_WIDTH}"
else
@@ -524,71 +723,73 @@ function wifi_save_file(){
fi
}
-function wifi_remove(){
-
- local DEVNAME=$1
-
- wifi_network_list ${DEVNAME}
-
- eval "${DIALOG} --menu 'Select network to remove' \
- ${WINDOW_HEIGHT} ${WINDOW_WIDTH} 10 ${NETLIST} \
- 2> ${TMPFILE}"
-
- if [ $? -eq 0 ]; then
- ## a network has been selected
- NETNUM=`<${TMPFILE}`
- WPA_STATUS=`wpa_cli -i ${DEVNAME} remove_network ${NETNUM} | tail -1 `
- if [ ${WPA_STATUS} == "OK" ]; then
- eval "${DIALOG} --clear --defaultno --yesno \
+##function
+wifi_remove(){
+
+##local
+ DEVNAME=$1
+
+ wifi_network_list ${DEVNAME}
+
+ eval "${DIALOG} --menu 'Select network to remove' \
+ ${WINDOW_HEIGHT} ${WINDOW_WIDTH} 10 ${NETLIST}" \
+ 2> ${TMPFILE}
+
+ if [ $? -eq 0 ]; then
+ ## a network has been selected
+ NETNUM=$(cat ${TMPFILE})
+ WPA_STATUS=$(wpa_cli -i ${DEVNAME} remove_network ${NETNUM} | tail -1 )
+ if [ "${WPA_STATUS}" = "OK" ]; then
+ eval "${DIALOG} --clear --defaultno --yesno \
'Network ${NETNUM} removed\nSave configuration file?' \
- ${INFO_HEIGHT} ${INFO_WIDTH} 2> ${TMPFILE}"
- if [ $? -eq 0 ]; then
- ## Save the config file
- wifi_save_file ${DEVNAME}
- fi
-
- return
- else
- eval "${DIALOG} --clear --msgbox 'Network ${NETNUM} NOT removed' \
+ ${INFO_HEIGHT} ${INFO_WIDTH}" 2> ${TMPFILE}
+ if [ $? -eq 0 ]; then
+ ## Save the config file
+ wifi_save_file ${DEVNAME}
+ fi
+
+ return
+ else
+ eval "${DIALOG} --clear --msgbox 'Network ${NETNUM} NOT removed' \
${INFO_HEIGHT} ${INFO_WIDTH}"
- return
- fi
- else
- eval "${DIALOG} --clear --msgbox 'No network removed!!!' \
+ return
+ fi
+ else
+ eval "${DIALOG} --clear --msgbox 'No network removed!!!' \
${INFO_HEIGHT} ${INFO_WIDTH}"
- return
- fi
-
+ return
+ fi
+
}
-function wifi_restart_wpa(){
+##function
+wifi_restart_wpa(){
- local DEVNAME=$1
- local WPA_FILE=$2
+##local
+ DEVNAME=$1
+##local
+ WPA_FILE=$2
- WPA_PID=`ps ax | grep wpa_supplicant | grep " -i ${DEVNAME}" |
-sed -r -e 's/^\ +//g' | cut -d " " -f 1`
-
- log "${FUNCNAME[0]}" "WPA_PID: ${WPA_PID}"
- kill -n 9 ${WPA_PID}
-
- if [ $? -ne 0 ]; then
- eval "${DIALOG} --clear --msgbox 'Error killing wpa_supplicant' \
- ${INFO_HEIGHT} ${INFO_WIDTH}"
- fi
-
- wpa_supplicant -B -i ${DEVNAME} -c ${WPA_FILE} -P${WPA_PIDFILE}
- WPA_PID=`ps ax | grep wpa_supplicant | grep " -i ${DEVNAME}" | cut -d " " -f 1 `
- WPA_PID_SAVED=`<${WPA_PIDFILE}`
- if [ [ -n ${WPA_PID} ] || [ ${WPA_PID} != ${WPA_PID_SAVED} ] ]; then
- eval "${DIALOG} --clear --msgbox 'Error restarting wpa_supplicant' \
+ WPA_PID=$(ps ax | grep wpa_supplicant | grep " -i ${DEVNAME}" |
+sed -r -e 's/^\ +//g' | cut -d " " -f 1)
+
+ log "wifi_restart_wpa" "WPA_PID: ${WPA_PID}"
+ kill -9 ${WPA_PID}
+
+ wpa_supplicant -B -i ${DEVNAME} -c ${WPA_FILE} -P${WPA_PIDFILE} 2>/dev/null
+ WPA_PID=$(ps ax | grep wpa_supplicant | grep " -i ${DEVNAME}" | \
+ sed -r -e 's/^\ +//g' | cut -d " " -f 1 )
+ WPA_PID_SAVED=$(cat ${WPA_PIDFILE})
+ log "wifi_restart_wpa" "WPA_PID: ${WPA_PID} WPA_PID_SAVED: ${WPA_PID_SAVED}"
+ if [ -n "${WPA_PID}" ] && [ "${WPA_PID}" != "${WPA_PID_SAVED}" ]; then
+ eval "${DIALOG} --clear --msgbox 'Error restarting wpa_supplicant' \
${INFO_HEIGHT} ${INFO_WIDTH}"
- else
- eval "${DIALOG} --clear --msgbox 'wpa_supplicant restarted successfully' \
+ else
+ eval "${DIALOG} --clear --msgbox 'wpa_supplicant restarted successfully' \
${INFO_HEIGHT} ${INFO_WIDTH}"
- fi
-
+ fi
+
}
@@ -598,117 +799,125 @@ sed -r -e 's/^\ +//g' | cut -d " " -f 1`
## one the used has clicked on
##
-function wifi_enable(){
-
- local DEVNAME=$1
-
- wifi_network_list ${DEVNAME}
-
- eval "${DIALOG} --menu 'Select configured network' \
- ${WINDOW_HEIGHT} ${WINDOW_WIDTH} 10 ${NETLIST} \
- 2> ${TMPFILE}"
-
- if [ $? -eq 0 ]; then
- ## a network has been selected
- NETNUM=`<${TMPFILE}`
- WPA_STATUS=`wpa_cli -i ${DEVNAME} enable ${NETNUM} | tail -1 `
- if [ ${WPA_STATUS} == "OK" ]; then
- eval "${DIALOG} --clear --msgbox 'Network ${NETNUM} enabled' \
+##function
+wifi_enable(){
+
+##local
+ DEVNAME=$1
+
+ wifi_network_list ${DEVNAME}
+
+ eval "${DIALOG} --menu 'Select configured network' \
+ ${WINDOW_HEIGHT} ${WINDOW_WIDTH} 10 ${NETLIST}" \
+ 2> ${TMPFILE}
+
+ if [ $? -eq 0 ]; then
+ ## a network has been selected
+ NETNUM=$(cat ${TMPFILE})
+ WPA_STATUS=$(wpa_cli -i ${DEVNAME} enable ${NETNUM} | tail -1 )
+ if [ "${WPA_STATUS}" = "OK" ]; then
+ eval "${DIALOG} --clear --msgbox 'Network ${NETNUM} enabled' \
${INFO_HEIGHT} ${INFO_WIDTH}"
- config_ethernet ${DEVNAME}
- return
- else
- eval "${DIALOG} --clear --msgbox 'Network ${NETNUM} NOT enabled' \
+ config_ethernet ${DEVNAME}
+ return
+ else
+ eval "${DIALOG} --clear --msgbox 'Network ${NETNUM} NOT enabled' \
${INFO_HEIGHT} ${INFO_WIDTH}"
- return
- fi
- else
- eval "${DIALOG} --clear --msgbox 'No network enabled!!!' \
+ return
+ fi
+ else
+ eval "${DIALOG} --clear --msgbox 'No network enabled!!!' \
${INFO_HEIGHT} ${INFO_WIDTH}"
- return
- fi
+ return
+ fi
}
-function wifi_disable(){
-
- local DEVNAME=$1
- wifi_network_list ${DEVNAME}
- eval "${DIALOG} --menu 'Select configured network' \
- ${WINDOW_HEIGHT} ${WINDOW_WIDTH} 10 ${NETLIST} \
- 2> ${TMPFILE}"
-
- if [ $? -eq 0 ]; then
- ## a network has been selected
- NETNUM=`<${TMPFILE}`
- WPA_STATUS=`wpa_cli -i ${DEVNAME} disable ${NETNUM} | tail -1 `
- if [ ${WPA_STATUS} == "OK" ]; then
- eval "${DIALOG} --clear --msgbox 'Network ${NETNUM} disabled' \
+##function
+wifi_disable(){
+
+##local
+ DEVNAME=$1
+ wifi_network_list ${DEVNAME}
+ eval "${DIALOG} --menu 'Select configured network' \
+ ${WINDOW_HEIGHT} ${WINDOW_WIDTH} 10 ${NETLIST}" \
+ 2> ${TMPFILE}
+
+ if [ $? -eq 0 ]; then
+ ## a network has been selected
+ NETNUM=$(cat ${TMPFILE})
+ WPA_STATUS=$(wpa_cli -i ${DEVNAME} disable ${NETNUM} | tail -1 )
+ if [ "${WPA_STATUS}" = "OK" ]; then
+ eval "${DIALOG} --clear --msgbox 'Network ${NETNUM} disabled' \
${INFO_HEIGHT} ${INFO_WIDTH}"
- return
- else
- eval "${DIALOG} --clear --msgbox 'Network ${NETNUM} NOT disabled' \
+ return
+ else
+ eval "${DIALOG} --clear --msgbox 'Network ${NETNUM} NOT disabled' \
${INFO_HEIGHT} ${INFO_WIDTH}"
- return
- fi
- else
- eval "${DIALOG} --clear --msgbox 'No network disabled!!!' \
+ return
+ fi
+ else
+ eval "${DIALOG} --clear --msgbox 'No network disabled!!!' \
${INFO_HEIGHT} ${INFO_WIDTH}"
- return
- fi
+ return
+ fi
}
-function wifi_load_file(){
-
- local DEVNAME=$1
+##function
+wifi_load_file(){
- eval "${DIALOG} --fselect ${WPA_FILE} ${WINDOW_HEIGHT} ${WINDOW_WIDTH} \
- 2>${TMPFILE}"
-
- if [ $? -eq 0 ]; then
- SEL_FILE=`<${TMPFILE}`
- while [ -d ${SEL_FILE} ]; do
- eval "${DIALOG} --fselect ${SEL_FILE} ${WINDOW_HEIGHT} ${WINDOW_WIDTH} \
- 2>${TMPFILE}"
- if [ $? -eq 0 ]; then
- SEL_FILE=`<${TMPFILE}`
- else
- eval "${DIALOG} --clear --infobox 'WPA_FILE was not modified' \
+##local
+ DEVNAME=$1
+
+ eval "${DIALOG} --fselect ${WPA_FILE} ${WINDOW_HEIGHT} ${WINDOW_WIDTH}" \
+ 2>${TMPFILE}
+
+ if [ $? -eq 0 ]; then
+ SEL_FILE=$(cat ${TMPFILE})
+ while [ -d "${SEL_FILE}" ]; do
+ eval "${DIALOG} --fselect ${SEL_FILE} ${WINDOW_HEIGHT} ${WINDOW_WIDTH}" \
+ 2>${TMPFILE}
+ if [ $? -eq 0 ]; then
+ SEL_FILE=$(cat ${TMPFILE})
+ else
+ eval "${DIALOG} --clear --msgbox 'WPA_FILE was not modified' \
${INFO_HEIGHT} ${INFO_WIDTH}"
- return
- fi
- done
-
- if [ -f ${SEL_FILE} ]; then
- WPA_FILE=${SEL_FILE}
- eval "${DIALOG} --clear --defaultno --yesno \
+ return
+ fi
+ done
+
+ if [ -f "${SEL_FILE}" ]; then
+ WPA_FILE=${SEL_FILE}
+ eval "${DIALOG} --clear --defaultno --yesno \
'WPA_FILE changed to ${WPA_FILE}\nRestart wpa_supplicant?' \
${INFO_HEIGHT} ${INFO_WIDTH}"
- if [ $? -eq 0 ]; then
- wifi_restart_wpa ${DEVNAME} ${WPA_FILE}
- fi
- else
- eval "${DIALOG} --clear --infobox 'Invalid file name!\n WPA_FILE *not* changed' \
+ if [ $? -eq 0 ]; then
+ wifi_restart_wpa ${DEVNAME} ${WPA_FILE}
+ fi
+ else
+ eval "${DIALOG} --clear --msgbox 'Invalid file name!\n WPA_FILE *not* changed' \
${WINDOW_HEIGHT} ${WINDOW_WIDTH}"
- return
- fi
- else
- eval "${DIALOG} --clear --infobox 'WPA_FILE was not modified' \
+ return
+ fi
+ else
+ eval "${DIALOG} --clear --msgbox 'WPA_FILE was not modified' \
${INFO_HEIGHT} ${INFO_WIDTH}"
- fi
-
+ fi
+
}
-function config_wifi(){
-
- local DEVNAME=$1
-
- while [ 1 -eq 1 ]; do
- eval "${DIALOG} --clear --cancel-label 'Up' \
+##function
+config_wifi(){
+
+##local
+ DEVNAME=$1
+
+ while true; do
+ eval "${DIALOG} --clear --cancel-label 'Up' \
--menu 'Configuring ${DEVNAME}\n(Current file: ${WPA_FILE})' \
${WINDOW_HEIGHT} ${WINDOW_WIDTH} 12 \
'Restart' 'Restart wpa_supplicant' \
@@ -720,49 +929,49 @@ function config_wifi(){
'Edit' 'Edit current configuration file' \
'Save' 'Save configuration to file'\
'Load' 'Load configuration from file'\
- 'New' 'Create new configuration file'\
- 2>${TMPFILE}"
- if [ $? -eq 1 ]; then
- return
- fi
- ACTION=`<${TMPFILE}`
- case ${ACTION} in
- "Restart")
- ## Restart wpa_supplicant
- wifi_restart_wpa ${DEVNAME} ${WPA_FILE}
- ;;
- "Enable")
- wifi_enable ${DEVNAME}
- ;;
- "Disable")
- wifi_disable ${DEVNAME}
- ;;
- "Add")
- wifi_add ${DEVNAME}
- ;;
- "Remove")
- wifi_remove ${DEVNAME}
- ;;
- "Show")
- eval "${DIALOG} --title 'Current file: ${WPA_FILE}' \
+ 'New' 'Create new configuration file' " \
+ 2>${TMPFILE}
+
+ if [ $? = "1" ]; then
+ return
+ fi
+ ACTION=$(cat ${TMPFILE})
+ case ${ACTION} in
+ "Restart")
+ ## Restart wpa_supplicant
+ wifi_restart_wpa ${DEVNAME} ${WPA_FILE}
+ ;;
+ "Enable")
+ wifi_enable ${DEVNAME}
+ ;;
+ "Disable")
+ wifi_disable ${DEVNAME}
+ ;;
+ "Add")
+ wifi_add ${DEVNAME}
+ ;;
+ "Remove")
+ wifi_remove ${DEVNAME}
+ ;;
+ "Show")
+ eval "${DIALOG} --title 'Current file: ${WPA_FILE}' \
--textbox ${WPA_FILE} ${WINDOW_HEIGHT} ${WINDOW_WIDTH}"
- ;;
- "Edit")
- edit_file ${WPA_FILE}
- ;;
- "Save")
- wifi_save_file ${DEVNAME}
- ;;
- "Load")
- wifi_load_file ${DEVNAME}
- ;;
- "New")
- eval "${DIALOG} --msgbox 'Sorry!Not yet implemented!' \
- ${INFO_HEIGHT} ${INFO_WIDTH} 2>${TMPFILE}"
- ;;
- esac
- done
-
+ ;;
+ "Edit")
+ edit_file ${WPA_FILE}
+ ;;
+ "Save")
+ wifi_save_file ${DEVNAME}
+ ;;
+ "Load")
+ wifi_load_file ${DEVNAME}
+ ;;
+ "New")
+ unimplemented "New"
+ ;;
+ esac
+ done
+
}
@@ -771,149 +980,177 @@ function config_wifi(){
## (Re)-Configure a network device
##
-function configure_device(){
-
- local DEVNAME=$1
-
- case ${DEVNAME} in
- eth*)
- config_ethernet ${DEVNAME}
- ;;
- wlan*)
- config_wifi ${DEVNAME}
- ;;
- *)
- eval "${DIALOG} --clear --title 'ERROR' --msgbox \
- '${DEVNAME}: Unsupported device type' \
- ${WINDOW_HEIGHT} ${WINDOW_WIDTH}"
- ;;
- esac
-
+##function
+configure_device(){
+
+##local
+ DEVNAME=$1
+
+ ## Check if the network device is a wifi -- WEAK
+ IS_WIFI=$(iwconfig ${DEVNAME} 2>/dev/null | grep -c "IEEE 802.11")
+
+ case ${IS_WIFI} in
+ 0)
+ config_ethernet ${DEVNAME}
+ ;;
+ *)
+ config_wifi ${DEVNAME}
+ ;;
+ esac
+
}
-function set_device_up(){
+##function
+set_device_up(){
- local DEVNAME=$1
+##local
+DEVNAME=$1
ip link set ${DEVNAME} up
}
-function set_device_down(){
+##function
+set_device_down(){
- local DEVNAME=$1
+##local
+DEVNAME=$1
ip link set ${DEVNAME} down
}
-function show_device_menu(){
+##function
+show_device_menu(){
- local DEVNAME=$1
- while [ 1 -eq 1 ]; do
- eval "${DIALOG} --clear --cancel-label 'Up' --menu 'Device: ${DEVNAME}' \
- ${WINDOW_HEIGHT} ${WINDOW_WIDTH} 8 \
- 'View' 'View current configuration' \
- 'Conf' 'Configure device' \
- 'Start' 'Bring interface up' \
- 'Stop' 'Put interface down' \
- 'Restart' 'Restart interface' 2> ${TMPFILE}"
-
- if [ $? -eq 1 ]; then
- return
- fi
-
- DEV_ACTION=`<${TMPFILE}`
- case ${DEV_ACTION} in
- "View")
- show_device_conf ${DEVNAME}
- ;;
- "Conf")
- configure_device ${DEVNAME}
- ;;
- "Start")
- set_device_up ${DEVNAME}
- ;;
- "Stop")
- set_device_down ${DEVNAME}
- ;;
- "Restart")
- set_device_down ${DEVNAME}
- set_device_up ${DEVNAME}
- ;;
- *)
- ;;
-
- esac
- done
+##local
+ DEVNAME=$1
+
+ while true; do
+ DEV_STATUS=$(ip -o link | cut -d " " -f 2,9 | grep -E "^${DEVNAME}: " | cut -d " " -f 2)
+ log "show_device_menu" "DEVNAME: ${DEVNAME} DEV_STATUS: ${DEV_STATUS}"
+ eval "${DIALOG} --clear --cancel-label 'Up' --menu\
+ 'Device: ${DEVNAME}\nStatus: ${DEV_STATUS}' \
+ ${WINDOW_HEIGHT} ${WINDOW_WIDTH} 8 \
+ 'View' 'View current configuration' \
+ 'Conf' 'Configure device' \
+ 'Start' 'Bring interface up' \
+ 'Stop' 'Put interface down' \
+ 'Restart' 'Restart interface'" 2> ${TMPFILE}
+
+ if [ $? -eq 1 ]; then
+ return
+ fi
+
+ DEV_ACTION=$(cat ${TMPFILE})
+ case ${DEV_ACTION} in
+ "View")
+ show_device_conf ${DEVNAME}
+ ;;
+ "Conf")
+ configure_device ${DEVNAME}
+ ;;
+ "Start")
+ set_device_up ${DEVNAME}
+ ;;
+ "Stop")
+ set_device_down ${DEVNAME}
+ ;;
+ "Restart")
+ set_device_down ${DEVNAME}
+ set_device_up ${DEVNAME}
+ ;;
+ *)
+ ;;
+
+ esac
+ done
}
##
## Show all the available network devices
##
-function show_devs() {
-
- DEVFILE=/proc/net/dev
- DEVICES=`ip link show | awk 'NR % 2 == 1' | cut -d ":" -f 2`
-
- DEVICE_TAGS=""
-
- for i in `echo $DEVICES`; do
- if [ $i != "lo" ]; then
- DEVICE_TAGS="${DEVICE_TAGS} $i $i"
- fi
- done
-
- eval "${DIALOG} --clear --cancel-label 'Up' \
+##function
+show_devs() {
+
+ DEVICES=$(ip link show | awk 'NR % 2 == 1' | cut -d ":" -f 2)
+
+ DEVICE_TAGS=""
+
+ for i in $DEVICES; do
+ if [ "$i" != "lo" ]; then
+ DEVICE_TAGS="${DEVICE_TAGS} $i $i"
+ fi
+ done
+
+ eval "${DIALOG} --clear --cancel-label 'Up' \
--menu 'Select Interface to configure' ${WINDOW_HEIGHT} ${WINDOW_WIDTH} 4 \
- ${DEVICE_TAGS} 2> ${TMPFILE}"
- return $?
+ ${DEVICE_TAGS}" 2> ${TMPFILE}
+ return $?
}
-function dev_config_menu(){
-
- while [ 1 -eq 1 ]; do
- show_devs
- if [ $? -eq 1 ]; then
- return
- fi
- DEVNAME=`<${TMPFILE}`
- show_device_menu ${DEVNAME}
- done
+##function
+dev_config_menu(){
+
+ while true; do
+ show_devs
+ if [ $? -eq 1 ]; then
+ return
+ fi
+ DEVNAME=$(cat ${TMPFILE})
+ show_device_menu ${DEVNAME}
+ done
}
-function show_info(){
+##function
+show_info(){
cat <<EOF > ${TMPFILE}
-== setnet.sh 0.1 ==
+ -+- setnet.sh ${VERSION} -+-
setnet.sh is a simple state-less tool to manage and configure network
-interfaces. It is a shell wrapper around the functionalities of "ip",
-"dhclient", "wpa_cli", and can be used to configure network
-connections via Ethernet/Wi-Fi interfaces.
+interfaces. It is a shell wrapper around the functionalities of
+standard command-line tools, including "ip", "dhclient", "wpa_cli",
+etc., and can be used to configure network connections via
+Ethernet/Wi-Fi interfaces.
-Both Static and DHCP-based IP configuration is supported.
+Both Static and DHCP-based IP configuration are supported.
At the moment, only WPA-PSK and open (no key) Wi-Fi connections are
available.
+For more information, please visit the webpage of the project:
+
+ http://kalos.mine.nu/setnet/
+
+Please report bugs at:
+
+ https://git.devuan.org/KatolaZ/setnet
+
EOF
eval "${DIALOG} --clear --cr-wrap --textbox ${TMPFILE} ${WINDOW_HEIGHT} ${WINDOW_WIDTH}"
return
}
-function show_copyright(){
+##function
+show_copyright(){
cat <<EOF > ${TMPFILE}
-== setnet.sh 0.1 ==
+ -+- setnet.sh ${VERSION} -+-
+
+--------------------------------------------------------------------
+
+ Copyleft (C) Vincenzo "KatolaZ" Nicosia <katolaz@freaknet.org>
+ 2016, 2017
+
+--------------------------------------------------------------------
-(c) KatolaZ (katolaz@freaknet.org) -- 2016
EOF
eval "${DIALOG} --clear --cr-wrap --textbox ${TMPFILE} ${WINDOW_HEIGHT} ${WINDOW_WIDTH}"
@@ -921,11 +1158,12 @@ EOF
}
-function show_license(){
+##function
+show_license(){
cat <<EOF > ${TMPFILE}
-== setnet.sh 0.1 ==
+ -+- setnet.sh ${VERSION} -+-
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@@ -940,11 +1178,12 @@ General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
-----------------------------------------------------------------------
+--------------------------------------------------------------------
- (c) KatolaZ <katolaz@freaknet.org> -- 2016
+ Copyleft (C) Vincenzo "KatolaZ" Nicosia <katolaz@freaknet.org>
+ 2016, 2017
-----------------------------------------------------------------------
+--------------------------------------------------------------------
EOF
eval "${DIALOG} --clear --cr-wrap --textbox ${TMPFILE} ${WINDOW_HEIGHT} ${WINDOW_WIDTH}"
@@ -953,60 +1192,489 @@ EOF
-function about_menu(){
+##function
+about_menu(){
- while [ 1 -eq 1 ]; do
- eval "${DIALOG} --cancel-label 'Up' --menu 'setnet ${VERSION} -- About' \
+ while true; do
+ eval "${DIALOG} --cancel-label 'Up' --menu 'setnet ${VERSION} -- About' \
${WINDOW_HEIGHT} ${WINDOW_WIDTH} 6 \
'Info' 'General information' \
- 'Copyright' 'Copyright information' \
- 'License' 'How to distribute this program' \
- 2> ${TMPFILE}"
- if [ $? -eq 1 ];then
- return;
+ 'Copyleft' 'Copyleft information' \
+ 'License' 'How to distribute this program' " \
+ 2> ${TMPFILE}
+ if [ $? -eq 1 ];then
+ return;
+ fi
+
+ ACTION=$(cat ${TMPFILE})
+ case ${ACTION} in
+ "Info")
+ show_info
+ ;;
+ "Copyleft")
+ show_copyright
+ ;;
+ "License")
+ show_license
+ ;;
+ esac
+ done
+}
+
+##function
+notfound(){
+
+ CMDNAME=$1
+
+
+ eval "${DIALOG} --clear --msgbox 'Sorry! Commmand ${CMDNAME} not found!'" \
+ ${INFO_HEIGHT} ${INFO_WIDTH}
+
+}
+
+
+##function
+netdiag_DNS(){
+
+ DUMPFILE=$1
+
+ if [ -n "${DUMPFILE}" ]; then
+ ## Dump to file
+ printf "\n=====\n== DNS Configuration (/etc/resolv.conf)\n=====\n\n" >> ${DUMPFILE}
+ cat /etc/resolv.conf >> ${DUMPFILE}
+ echo "==================================" >> ${DUMPFILE}
+ return 0
+ fi
+
+ ## Dump to dialog
+ NAMESERVERS=$(grep '^nameserver' /etc/resolv.conf)
+ MSG_STR="Configured name servers in /etc/resolv.conf ==\n\n${NAMESERVERS}"
+
+ eval "${DIALOG} --clear --title 'DNS servers' --msgbox '${MSG_STR}' "\
+ ${WINDOW_HEIGHT} ${WINDOW_WIDTH}
+
+}
+
+##function
+netdiag_resolver(){
+
+ DUMPFILE=$1
+
+ if [ -n "${DUMPFILE}" ]; then
+ ## Dump to file
+ printf "\n=====\n== Resolver Configuration (/etc/nsswitch.conf)\n=====\n\n" >> ${DUMPFILE}
+ grep -v '^#' /etc/nsswitch.conf >> ${DUMPFILE}
+ echo "==================================" >> ${DUMPFILE}
+ return 0
+ fi
+
+ ## Dump to dialog
+ RESOLVER=$(grep -v '^#' /etc/nsswitch.conf)
+
+ eval "${DIALOG} --clear --title 'Resolver configuration (/etc/nsswitch.conf)' \
+ --msgbox '${RESOLVER}' "\
+ ${WINDOW_HEIGHT} ${WINDOW_WIDTH}
+
+}
+
+
+##function
+netdiag_routes(){
+
+ DUMPFILE=$1
+
+ HAS_NETSTAT=$(echo ${HAS_OPTS} | grep -c " netstat ")
+ if [ ${HAS_NETSTAT} -ne 1 ]; then
+ notfound "nestat"
+ return
+ fi
+
+ if [ -n "${DUMPFILE}" ]; then
+ ## Dump to file
+ printf "\n=====\n== Routing table\n=====\n\n" >> ${DUMPFILE}
+ netstat -rn >> ${DUMPFILE}
+ echo "==================================" >> ${DUMPFILE}
+ return 0
+ fi
+ ## Dump to dialog
+ ROUTES=$(netstat -rn > ${TMPFILE} )
+
+ eval "${DIALOG} --clear --no-collapse --title 'Routing table (netstat -rn) [arrows to scroll]'" \
+ "--tab-correct --tab-len 4 --textbox ${TMPFILE} "\
+ ${LARGE_HEIGHT} ${LARGE_WIDTH}
+}
+
+##function
+netdiag_ARP(){
+
+ DUMPFILE=$1
+ log "netdiag_ARP" "DUMPFILE: '${DUMPFILE}'"
+ if [ -n "${DUMPFILE}" ]; then
+ ## Dump to file
+ printf "\n=====\n== ARP table\n=====\n\n" >> "${DUMPFILE}"
+ cat /proc/net/arp >> "${DUMPFILE}"
+ echo "==================================" >> ${DUMPFILE}
+ return 0
+ fi
+
+ # Dump to dialog
+ ARP=$(cat /proc/net/arp >${TMPFILE})
+
+ eval "${DIALOG} --clear --no-collapse --title 'ARP table (/proc/net/arp) [arrows to scroll]'" \
+ "--tab-correct --tab-len 4 --textbox ${TMPFILE} "\
+ ${LARGE_HEIGHT} ${LARGE_WIDTH}
+}
+
+##function
+netdiag_connections(){
+
+ DUMPFILE=$1
+
+
+ HAS_NETSTAT=$(echo ${HAS_OPTS} | grep -c " netstat ")
+ if [ ${HAS_NETSTAT} -ne 1 ]; then
+ notfound "nestat"
+ return
+ fi
+
+ if [ -n "${DUMPFILE}" ]; then
+ ## Dump to file
+ printf "\n=====\n== Active Network Connections\n=====\n\n" >> ${DUMPFILE}
+ netstat -tnp | sed -r -e 's/$/\n/g' >> ${DUMPFILE}
+ echo "==================================" >> ${DUMPFILE}
+ return 0
+ fi
+
+ ## Dump to dialog
+ SERV=$(netstat -tnp | sed -r -e 's/$/\n/g' > ${TMPFILE})
+
+ eval "${DIALOG} --clear --no-collapse "\
+ " --title 'Active network connections (netstat -tnp) [arrows to scroll]'" \
+ "--tab-correct --tab-len 4 --textbox ${TMPFILE} "\
+ ${LARGE_HEIGHT} ${LARGE_WIDTH}
+}
+
+
+##function
+netdiag_services(){
+
+ DUMPFILE=$1
+
+ HAS_NETSTAT=$(echo ${HAS_OPTS} | grep -c " netstat ")
+ if [ ${HAS_NETSTAT} -ne 1 ]; then
+ notfound "nestat"
+ return
+ fi
+
+ if [ -n "${DUMPFILE}" ]; then
+ ## Dump to file
+ printf "\n=====\n== Active network services\n=====\n\n" >> ${DUMPFILE}
+ netstat -ltnp | sed -r -e 's/$/\n/g' >> ${DUMPFILE}
+ echo "==================================" >> ${DUMPFILE}
+ return 0
+ fi
+
+
+ SERV=$(netstat -ltnp | sed -r -e 's/$/\n/g' > ${TMPFILE})
+
+ eval "${DIALOG} --clear --no-collapse "\
+ " --title 'Active network services (netstat -ltnp) [arrows to scroll]'" \
+ "--tab-correct --tab-len 4 --textbox ${TMPFILE} "\
+ ${LARGE_HEIGHT} ${LARGE_WIDTH}
+}
+
+
+##function
+netdiag_ping(){
+
+ HAS_PING=$(echo ${HAS_OPTS} | grep -c " ping ")
+ if [ ${HAS_PING} -ne 1 ]; then
+ notfound "ping"
+ return
+ fi
+ eval "${DIALOG} --insecure --inputbox 'Host or IP to ping:' \
+ ${INFO_HEIGHT} ${INFO_WIDTH}" 2> ${TMPFILE}
+
+ if [ $? -ne 0 ]; then
+ eval "${DIALOG} --clear --msgbox 'Ping Aborted' \
+ ${INFO_HEIGHT} ${INFO_WIDTH}"
+ return
+ else
+ PINGIP=$(cat ${TMPFILE})
+ ping -c 5 ${PINGIP} > ${TMPFILE} &
+ PINGPID=$!
+ eval "${DIALOG} --clear --title 'Ping ${PINGIP}'"\
+ "--tailbox ${TMPFILE} " \
+ ${LARGE_HEIGHT} ${LARGE_WIDTH}
+ if [ $? -ne 0 ];then
+ kill -9 ${PINGPID}
+ fi
+ fi
+
+}
+
+##function
+netdiag_traceroute(){
+
+ HAS_TRACERT=$(echo ${HAS_OPTS} | grep -c " traceroute ")
+ if [ ${HAS_TRACERT} -ne 1 ]; then
+ notfound "traceroute"
+ return
+ fi
+ eval "${DIALOG} --insecure --inputbox 'Host or IP to trace:' \
+ ${INFO_HEIGHT} ${INFO_WIDTH}" 2> ${TMPFILE}
+
+ if [ $? -ne 0 ]; then
+ eval "${DIALOG} --clear --msgbox 'Traceroute Aborted' \
+ ${INFO_HEIGHT} ${INFO_WIDTH}"
+ return
+ else
+ TRACEIP=$(cat ${TMPFILE})
+ traceroute ${TRACEIP} > ${TMPFILE} &
+ TRCPID=$!
+ eval "${DIALOG} --clear --title 'Traceroute ${TRACEIP}'"\
+ "--tailbox ${TMPFILE} " \
+ ${LARGE_HEIGHT} ${LARGE_WIDTH}
+ if [ $? -ne 0 ];then
+ kill -9 ${TRCPID}
+ fi
+ fi
+}
+
+
+##function
+netdiag_query(){
+
+ HAST_HOST=$(echo ${HAS_OPTS} | grep -c " host ")
+ if [ $? -ne 1 ]; then
+ notfound "host"
+ return
+ fi
+
+ eval "${DIALOG} --insecure --inputbox 'Hostname or IP to query:' \
+ ${INFO_HEIGHT} ${INFO_WIDTH}" 2> ${TMPFILE}
+
+ if [ $? -ne 0 ]; then
+ eval "${DIALOG} --clear --msgbox 'DNS query aborted' \
+ ${INFO_HEIGHT} ${INFO_WIDTH}"
+ return
+ else
+ QUERYIP=$(cat ${TMPFILE})
+ host ${QUERYIP} > ${TMPFILE} &
+ QUERYPID=$!
+ eval "${DIALOG} --clear --title 'host ${QUERYIP}'"\
+ "--tailbox ${TMPFILE} " \
+ ${LARGE_HEIGHT} ${LARGE_WIDTH}
+ if [ $? -ne 0 ];then
+ kill -9 ${QUERYPID}
+ fi
+ fi
+
+}
+
+##function
+netdiag_devices(){
+
+ DUMPFILE=$1
+
+ if [ -n "${DUMPFILE}" ]; then
+ printf "\n=====\n== Network Devices\n=====\n\n" >> ${DUMPFILE}
+ ip addr >> ${DUMPFILE}
+ echo "==================================" >> ${DUMPFILE}
+ return 0
+ fi
+}
+
+
+
+##
+## Main menu for network diagnostics
+##
+
+##function
+netdiag_menu(){
+
+ while true; do
+ eval "${DIALOG} --cancel-label 'Up' --menu 'Network diagnostics' \
+ ${WINDOW_HEIGHT} ${WINDOW_WIDTH} 10 \
+ 'ARP' 'Show ARP table' \
+ 'Connections' 'List active network connections' \
+ 'DNS' 'List DNS servers' \
+ 'Ping' 'Ping a host' \
+ 'Query' 'DNS Query' \
+ 'Resolver' 'Show resolver configuration' \
+ 'Routes' 'Show routing table' \
+ 'Services' 'List active network daemons' \
+ 'Traceroute' 'Show the route to a host' " \
+ 2> ${TMPFILE}
+ if [ $? -eq 1 ];then
+ return;
+ fi
+
+ ACTION=$(cat ${TMPFILE})
+ case ${ACTION} in
+ "ARP")
+ netdiag_ARP
+ ;;
+ "Connections")
+ netdiag_connections
+ ;;
+ "DNS")
+ netdiag_DNS
+ ;;
+ "Ping")
+ netdiag_ping
+ ;;
+ "Query")
+ netdiag_query
+ ;;
+ "Resolver")
+ netdiag_resolver
+ ;;
+ "Routes")
+ netdiag_routes
+ ;;
+ "Services")
+ netdiag_services
+ ;;
+ "Traceroute")
+ netdiag_traceroute
+ ;;
+ esac
+ done
+
+
+}
+
+##function
+dump_file(){
+
+ CONF=$1
+
+ log "dump_file" "CONF: ${CONF}"
+
+ DUMPFILE="/tmp/network_dump.txt"
+
+ eval "${DIALOG} --fselect ${DUMPFILE} ${WINDOW_HEIGHT} ${WINDOW_WIDTH}" \
+ 2>${TMPFILE}
+
+ if [ $? -eq 0 ]; then
+ SEL_FILE=$(cat ${TMPFILE})
+ while [ -d "${SEL_FILE}" ]; do
+ eval "${DIALOG} --fselect ${SEL_FILE} ${WINDOW_HEIGHT} ${WINDOW_WIDTH}" \
+ 2>${TMPFILE}
+ if [ $? -eq 0 ]; then
+ SEL_FILE=$(cat ${TMPFILE})
+ else
+ eval "${DIALOG} --clear --msgbox 'Dump aborted' \
+ ${INFO_HEIGHT} ${INFO_WIDTH}"
+ return
+ fi
+ done
+
+ ## The dump starts here....
+ DUMPFILE=${SEL_FILE}
+ truncate -s 0 ${DUMPFILE}
+ echo "===== setnet ${VERSION}" >> ${DUMPFILE}
+ echo "===== Date: $(date)" >> ${DUMPFILE}
+ echo "===== Network configuration dump: ${CONF} " >> ${DUMPFILE}
+ for c in ${CONF}; do
+ eval "netdiag_${c} \"${DUMPFILE}\""
+ done
+ else
+ eval "${DIALOG} --clear --msgbox 'Dump aborted' \
+ ${INFO_HEIGHT} ${INFO_WIDTH}"
+ return
+ fi
+ eval "${DIALOG} --clear --msgbox 'Status dumped to ${DUMPFILE}' \
+ ${INFO_HEIGHT} ${INFO_WIDTH}"
+}
+
+
+##function
+dump_pastebin(){
+
+ CONF=$1
+
+
+
+}
+
+##function
+dump_menu(){
+
+ eval "${DIALOG} --clear --checklist 'Select conf to dump' \
+ ${WINDOW_HEIGHT} ${WINDOW_WIDTH} 10 \
+ 'ARP' 'ARP table' on \
+ 'devices' 'Device configuration' on \
+ 'DNS' 'DNS configuration' on \
+ 'resolver' 'System resolver configuration' on \
+ 'routes' 'Routing table' on \
+ 'connections' 'Active network connections' on \
+ 'services' 'Active network services' on " 2> ${TMPFILE}
+ if [ $? -ne 0 ]; then
+ return
+ fi
+
+ DUMP_CONF=$(cat ${TMPFILE})
+
+ eval "${DIALOG} --clear --cancel-label 'Up' \
+ --menu 'Dump configuration to:' \
+ ${INFO_HEIGHT} ${INFO_WIDTH} 6 \
+ 'File' 'Dump to file' \
+ 'Pastebin' 'Dump to pastebin'" \
+ 2> ${TMPFILE}
+ if [ $? -eq 1 ];then
+ return;
fi
- ACTION=`<${TMPFILE}`
+ ACTION=$(cat ${TMPFILE})
case ${ACTION} in
- "Info")
- show_info
- ;;
- "Copyright")
- show_copyright
- ;;
- "License")
- show_license
- ;;
+ "File")
+ dump_file "${DUMP_CONF}"
+ ;;
+ "Pastebin")
+ dump_pastebin "${DUMP_CONF}"
+ ;;
esac
- done
}
-function show_toplevel(){
-
- eval "${DIALOG} --clear --cancel-label 'Quit' --menu 'Main Menu' \
+##function
+show_toplevel(){
+
+ log "show_toplevel" "TMPFILE: ${TMPFILE}"
+ eval "${DIALOG} --clear --cancel-label 'Quit' --menu 'Main Menu' \
${WINDOW_HEIGHT} ${WINDOW_WIDTH} 6 \
'Setup' 'Setup interfaces' \
- 'About' 'Info & Copyright' 2> ${TMPFILE}"
- return $?
+ 'Info' 'Network diagnostics' \
+ 'Dump' 'Dump current network status' \
+ 'Log' 'View setnet log' \
+ 'About' 'License & Copyleft'" 2> ${TMPFILE}
+
+ return $?
}
-function show_help(){
+##function
+show_help(){
- local SCRIPTNAME=$1
+##local
+SCRIPTNAME=$1
echo "Usage: ${SCRIPTNAME} [OPTION]"
echo "Options:"
- echo -e "\t -c cfg_file\tLoad configuration from cfg_file."
- echo -e "\t -v\t\tPrint version number and exit. "
- echo -e "\t -h\t\tShow this help."
+ printf "\t -c cfg_file\tLoad configuration from cfg_file.\n"
+ printf "\t -v\t\tPrint version number and exit.\n"
+ printf "\t -h\t\tShow this help.\n"
}
-function show_version(){
+##function
+show_version(){
- local SCRIPTNAME=$1
+##local
+SCRIPTNAME=$1
echo "${SCRIPTNAME} -- version ${VERSION}"
- echo "Copyright (C) Vincenzo \"KatolaZ\" Nicosia (katolaz@freaknet.org) -- 2016"
+ echo "Copyleft (C) Vincenzo \"KatolaZ\" Nicosia (katolaz@freaknet.org) -- 2016, 2017"
echo "This is free software. You can use and redistribute it under the "
echo "terms of the GNU General Public Licence version 3 or (at your option)"
echo "any later version."
@@ -1016,15 +1684,17 @@ function show_version(){
echo "FITNESS FOR A PARTICULAR PURPOSE."
}
-function show_disclaimer(){
+##function
+show_disclaimer(){
cat <<EOF > ${TMPFILE}
- == setnet.sh 0.1 ==
+ -+- setnet.sh ${VERSION} -+-
- (c) KatolaZ (katolaz@freaknet.org) -- 2016
+ Copyleft (C) KatolaZ (katolaz@freaknet.org)
+ 2016, 2017
- -+- This is the alpha release of setnet.sh -+-
+ -+- This is an alpha release of setnet.sh -+-
THIS IS FREE SOFTWARE
YOU CAN USE AND DISTRIBUTE IT UNDER THE
@@ -1036,86 +1706,147 @@ function show_disclaimer(){
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE
See "About" for more information about
- copyright and license
+ your right and distribution terms
EOF
eval "${DIALOG} --clear --cr-wrap --textbox ${TMPFILE} 23 60"
return
}
+##function
+initialise(){
+
+
+ TMPFILE=$( (tempfile) 2>/dev/null) || TMPFILE=/tmp/setnet_$$
+ WPA_PIDFILE=$( (tempfile) 2>/dev/null) || WPA_PIDFILE=/tmp/setnet_wpapid_$$
+
+ trap cleanup 0 HUP INT TRAP TERM QUIT
+
+ if [ -z ${TRUNCATE_LOG} ] || \
+ [ ${TRUNCATE_LOG} = "yes" ] || \
+ [ ${TRUNCATE_LOG} = "YES" ]; then
+ truncate -s 0 ${LOGFILE}
+ fi
+
+}
+
-function main(){
+##function
+log_show(){
+
+ eval "${DIALOG} --clear --cr-wrap --title 'setnet log file (${LOGFILE})'\
+ --textbox ${LOGFILE} \
+ ${WINDOW_HEIGHT} ${WINDOW_WIDTH}"
+
+}
+
+##function
+main(){
- truncate -s 0 ${LOGFILE}
- trap cleanup 0 $SIG_NONE $SIG_HUP $SIG_INT $SIG_TRAP $SIG_TERM
show_disclaimer
- log "setnet" "Starting afresh on `date`"
- SETNETRC=`realpath ${SETNETRC}`
+ log "setnet" "Starting afresh on $(date)"
+ SETNETRC=$(realpath ${SETNETRC})
log "main" "Using config file \"${SETNETRC}\""
- WPA_FILE=`realpath ${WPA_FILE}`
+ WPA_FILE=$(realpath ${WPA_FILE})
log "main" "Using WPA config file \"${WPA_FILE}\""
- LOFGILE=`realpath ${LOGFILE}`
+ LOFGILE=$(realpath ${LOGFILE})
log "main" "Using log file \"${LOGFILE}\""
- while [ 1 -eq 1 ]; do
- show_toplevel
- if [ $? -eq 1 ]; then
- cleanup
- exit 1
- fi
- ACTION=`<${TMPFILE}`
- case ${ACTION} in
- "Setup")
- dev_config_menu
- ;;
- "About")
- about_menu
- ;;
- esac
+ while true; do
+ show_toplevel
+
+ if [ $? -eq 1 ]; then
+ cleanup
+ exit 1
+ fi
+ log "main" "${TMPFILE}"
+ ACTION=$(cat ${TMPFILE})
+ log "main" "ACTION: ${ACTION}"
+ case ${ACTION} in
+ "Setup")
+ dev_config_menu
+ ;;
+ "Info")
+ netdiag_menu
+ ;;
+ "Dump")
+ dump_menu
+ ;;
+ "Log")
+ log_show
+ ;;
+ "About")
+ about_menu
+ ;;
+ esac
done
-
+
}
##
-## Get the options
+## The script starts here
+##
+
+
+##
+## Get command-line arguments
##
SETNETRC=""
while getopts ":c:hv" opt; do
-
- case $opt in
- c)
- echo "Got option -c ${OPTARG}"
- SETNETRC=`realpath ${OPTARG}`
- echo "SETNETRC: ${SETNETRC}"
- ;;
- h)
- show_help `basename $0`
- exit 1
- ;;
- v)
- show_version `basename $0`
- exit 1
- ;;
- \?)
- echo "Invalid option: -${OPTARG}"
- exit 1
- ;;
- :)
- echo "Option -${OPTARG} requires an argument"
- exit 1
- ;;
- esac
+
+ case $opt in
+ c)
+ #echo "Got option -c ${OPTARG}"
+ SETNETRC=$(realpath ${OPTARG})
+ #echo "SETNETRC: ${SETNETRC}"
+ ;;
+ h)
+ show_help $(basename $0)
+ exit 1
+ ;;
+ v)
+ show_version $(basename $0)
+ exit 1
+ ;;
+ \?)
+ echo "Invalid option: -${OPTARG}"
+ exit 1
+ ;;
+ :)
+ echo "Option -${OPTARG} requires an argument"
+ exit 1
+ ;;
+ esac
done
+##
+## Load the configuration file
+##
load_setnetrc ${SETNETRC}
-main
+##
+## Init stuff
+##
+
+initialise
+
+##
+## Check dependencies. If we are missing someting essential, then exit.
+##
+
+check_deps
+
+##
+## This is the main loop
+##
+
+main