From 7601025d906f7a79df47f42e5009b74738d64e2e Mon Sep 17 00:00:00 2001 From: KatolaZ <katolaz@freaknet.org> Date: Tue, 3 Jan 2017 01:31:57 +0000 Subject: Removed setnet.dash --- setnet.dash | 1831 ----------------------------------------------------------- 1 file changed, 1831 deletions(-) delete mode 100755 setnet.dash (limited to 'setnet.dash') diff --git a/setnet.dash b/setnet.dash deleted file mode 100755 index e005efa..0000000 --- a/setnet.dash +++ /dev/null @@ -1,1831 +0,0 @@ -#!/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 -# the Free Software Foundation, either version 3 of the License, or (at -# your option) any later version. -# -# This program is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# 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/>. -# -# ---------------------------------------------------------------------- -# -# setnet.sh -- view and configure network interfaces -# -# ---------------------------------------------------------------------- -# -# Copyleft (C) Vincenzo "KatolaZ" Nicosia (katolaz@freaknet.org) -- -# (2016, 2017) -# -# - - -## -## Initialisation -## - -VERSION=0.2 - - -TOPSTR="setnet-${VERSION} [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 arping traceroute netstat pastebinit" - -################################# - -##################################### -## ## -## 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 the configuration file "setnetrc" -## - -##function -load_setnetrc(){ - - WPA_FILE="" - LOGFILE="" - ## If we were given a parameter, is the rc file to load... - ## - if [ $# -ge 1 ]; then - . "$1" - return - fi - - ## - ## Otherwise, let's look in the standard locations, namely: - ## - - ## - ## 1) /etc/setnetrc - ## - - if [ -f /etc/setnetrc ]; then - SETNETRC=/etc/setnetrc - fi - - ## - ## 2) ~/.setnetrc - ## - - if [ -f ~/.setnetrc ]; then - SETNETRC=~/.setnetrc - fi - - . ${SETNETRC} - - if [ -z ${WPA_FILE} ]; then - echo "Could not find WPA_FILE defined anywhere. Exiting" - exit 1 - fi - - if [ -z ${LOGFILE} ]; then - echo "Could not find LOGFILE defined anywhere. Exiting" - exit 1 - fi -} - - -## -## handler called upon exit/signal (NONE HUP INT TRAP TERM QUIT) -## - -##function -cleanup(){ - rm -f ${TMPFILE} - rm -f ${WPA_PIDFILE} -} - - -################### -# # -# LOGGING # -# # -################### - -## -## log() takes two arguments, namely the label and the message -## -## -##function -log(){ - - ##local - LABEL=$1 - ##local - MSG=$2 - - echo "${LABEL}:" "${MSG}" >> "${LOGFILE}" - -} - -## -## 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 -## - -##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 -} - - -## -## 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" - fi - done - -} - -## -## Generic function fo unimplemented features. It just pops up a -## message-box and returns -## - -##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}' \ - ${INFO_HEIGHT} ${INFO_WIDTH}" - fi - else - log "edit_file" "Editing of ${FILEIN} aborted..." - eval "${DIALOG} --clear --msgbox 'File ${FILEIN} not saved' \ - ${INFO_HEIGHT} ${INFO_WIDTH}" - fi -} - - - - -## -## Read all the configured addresses for a given inet family -## -##function -get_addr_family(){ - -##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(){ - -##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) - DEVCONF="MAC: ${DEVMAC}\n" - - log "show_device_conf" "NET_FAMILIES: \"${NET_FAMILIES}\"" - - for f in ${NET_FAMILIES}; do - 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 "show_device_conf" "DEVCONF: ${DEVCONF}" - done - - 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} " - return 0 - -} - - - -##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 -DEVNAME=$1 - - exec 3>&1 - eval "${DIALOG} --clear --form 'Set network for device: ${DEVNAME}'" \ - ${FORM_HEIGHT} ${FORM_WIDTH} 0 \ - "IP" 1 1 "${DEV_IP}" 1 16 16 16 \ - "Network" 2 1 "${DEV_NET}" 2 16 16 16 \ - "Netmask" 3 1 "${DEV_NETMASK}" 3 16 16 16 \ - "Gateway" 4 1 "${DEV_GW}" 4 16 16 16 \ - "Primary DNS" 5 1 "${DEV_DNS1}" 5 16 16 16 \ - "Secondary DNS" 6 1 "${DEV_DNS2}" 6 16 16 16 2> ${TMPFILE} - - if [ $? -eq 1 ]; then - eval "${DIALOG} --infobox 'Configuration of ${DEVNAME} aborted' \ - ${INFO_HEIGHT} ${INFO_WIDTH}" - return - fi - - read -d "*" DEV_IP DEV_NET DEV_NETMASK DEV_GW DEV_DNS1 DEV_DNS2 < ${TMPFILE} - eval "${DIALOG} --msgbox 'Proposed configuration of ${DEVNAME}:\n ${DEV_IP}\n${DEV_NET}\n${DEV_NETMASK}\n${DEV_GW}\n${DEV_DNS1}\n${DEV_DNS2}'\ - ${WINDOW_HEIGHT} ${WINDOW_WIDTH}" - - ## 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}" - - ## Configure 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 - echo "nameserver ${DEV_DNS1}" >> /etc/resolv.conf - fi - if [ -n "${DEV_DNS2}" ]; then - echo "nameserver ${DEV_DNS2}" >> /etc/resolv.conf - fi - show_device_conf "${DEVNAME}" -} - -##function -config_ethernet_dhcp(){ - -##local -DEVNAME=$1 - - eval "${DIALOG} --msgbox 'Running \"dhclient ${DEVNAME}\"' ${INFO_HEIGHT} ${INFO_WIDTH}" - dhclient -r ${DEVNAME} - dhclient ${DEVNAME} - show_device_conf ${DEVNAME} -} - - -##function -config_ethernet(){ - -##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=$(cat ${TMPFILE}) - case ${ACTION} in - "Static") - config_ethernet_static ${DEVNAME} - ;; - "DHCP") - config_ethernet_dhcp ${DEVNAME} - ;; - esac - done - -} - -##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) - - 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_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(){ - -##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=$(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 -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 -} - - - - -## -## Configure a new connection from a list of available wi-fi networks -## - -##function -wifi_add(){ - -##local -DEVNAME=$1 - - wpa_cli -i ${DEVNAME} scan - eval "${DIALOG} --timeout 4 --msgbox 'Scanning for networks...' \ - ${INFO_HEIGHT} ${INFO_WIDTH}" - wpa_cli -i ${DEVNAME} scan_results | grep -E "^[0-9a-f][0-9a-f]:" | \ - sed -r -e 's/\t/|/g' |\ - sort -t "|" -r -n -k 3 > ${TMPFILE} - - wifinets="" - LAST_IFS=$IFS - IFS="|" - while read W_MAC W_FREQ W_STRNGT W_FLAGS W_ESSID; do - - log "wifi_add" "W_ESSID: \"${W_ESSID}\"" - wifinets="${wifinets} ${W_MAC} \"${W_ESSID} -- ${W_FLAGS}\"" - done < ${TMPFILE} - IFS=${LAST_IFS} - - - 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 - - W_MAC=$(cat ${TMPFILE}) - - - wifi_authenticate ${DEVNAME} ${W_MAC} - if [ $? != "0" ]; then - eval "${DIALOG} --msgbox 'Error while configuring ${DEVNAME}' " - fi - return $? -} - - -##function -wifi_save_file(){ - -##local -DEVNAME=$1 - - wpa_cli -i ${DEVNAME} save_config | tail -1 > ${TMPFILE} - SAVE_STATUS=$(cat ${TMPFILE}) - if [ "${SAVE_STATUS}" = "OK" ]; then - eval "${DIALOG} --msgbox 'Current configuration dumped to file ${WPA_FILE}' \ - ${INFO_HEIGHT} ${INFO_WIDTH}" - else - eval "${DIALOG} --msgbox 'Error while saving configuration to file ${WPA_FILE}' \ - ${INFO_HEIGHT} ${INFO_WIDTH}" - 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=$(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}" - return - fi - else - eval "${DIALOG} --clear --msgbox 'No network removed!!!' \ - ${INFO_HEIGHT} ${INFO_WIDTH}" - return - fi - -} - - -##function -wifi_restart_wpa(){ - -##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 "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' \ - ${INFO_HEIGHT} ${INFO_WIDTH}" - fi - -} - - - -## -## wifi_enable: show the list of configured networks, and enable the -## 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=$(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' \ - ${INFO_HEIGHT} ${INFO_WIDTH}" - return - fi - else - eval "${DIALOG} --clear --msgbox 'No network enabled!!!' \ - ${INFO_HEIGHT} ${INFO_WIDTH}" - 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=$(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' \ - ${INFO_HEIGHT} ${INFO_WIDTH}" - return - fi - else - eval "${DIALOG} --clear --msgbox 'No network disabled!!!' \ - ${INFO_HEIGHT} ${INFO_WIDTH}" - return - fi -} - - - -##function -wifi_load_file(){ - -##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 \ - '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 --msgbox 'Invalid file name!\n WPA_FILE *not* changed' \ - ${WINDOW_HEIGHT} ${WINDOW_WIDTH}" - return - fi - else - eval "${DIALOG} --clear --msgbox 'WPA_FILE was not modified' \ - ${INFO_HEIGHT} ${INFO_WIDTH}" - fi - -} - - - -##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' \ - 'Enable' 'Enable a configured network' \ - 'Disable' 'Disable a configured network' \ - 'Add' 'Configure a new network' \ - 'Remove' 'Delete an existing network' \ - 'Show' 'Show current configuration file' \ - 'Edit' 'Edit current configuration file' \ - 'Save' 'Save configuration to file'\ - 'Load' 'Load configuration from 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") - unimplemented "New" - ;; - esac - done - -} - - - -## -## (Re)-Configure a network device -## - -##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(){ - -##local -DEVNAME=$1 - - ip link set ${DEVNAME} up - -} - -##function -set_device_down(){ - -##local -DEVNAME=$1 - - ip link set ${DEVNAME} down - -} - -##function -show_device_menu(){ - -##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() { - - 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 $? -} - - -##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(){ - - cat <<EOF > ${TMPFILE} - - -+- 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 -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 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(){ - - cat <<EOF > ${TMPFILE} - - -+- setnet.sh ${VERSION} -+- - --------------------------------------------------------------------- - - Copyleft (C) Vincenzo "KatolaZ" Nicosia <katolaz@freaknet.org> - 2016, 2017 - --------------------------------------------------------------------- - - -EOF - eval "${DIALOG} --clear --cr-wrap --textbox ${TMPFILE} ${WINDOW_HEIGHT} ${WINDOW_WIDTH}" - return -} - - -##function -show_license(){ - - cat <<EOF > ${TMPFILE} - - -+- 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 -the Free Software Foundation, either version 3 of the License, or (at -your option) any later version. - -This program is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -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/>. - --------------------------------------------------------------------- - - Copyleft (C) Vincenzo "KatolaZ" Nicosia <katolaz@freaknet.org> - 2016, 2017 - --------------------------------------------------------------------- - -EOF - eval "${DIALOG} --clear --cr-wrap --textbox ${TMPFILE} ${WINDOW_HEIGHT} ${WINDOW_WIDTH}" - return -} - - - -##function -about_menu(){ - - while true; do - eval "${DIALOG} --cancel-label 'Up' --menu 'setnet ${VERSION} -- About' \ - ${WINDOW_HEIGHT} ${WINDOW_WIDTH} 6 \ - 'Info' 'General information' \ - '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======== DNS Configuration (/etc/resolv.conf)\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======== Resolver Configuration (/etc/nsswitch.conf)\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======== Routing table\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======== ARP table\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======== Active Network Connections\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======== Active network services\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======== Network Devices\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 " >> ${DUMPFILE} - for c in ${CONF}; do - eval "netdiag_${c} \"${DUMPFILE}\"" - done - else - eval "${DIALOG} --clear --msgbox 'Dump aborted' \ - ${INFO_HEIGHT} ${INFO_WIDTH}" - fi -} - - -##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=$(cat ${TMPFILE}) - case ${ACTION} in - "File") - dump_file "${DUMP_CONF}" - ;; - "Pastebin") - dump_pastebin "${DUMP_CONF}" - ;; - esac -} - - -##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' \ - 'Info' 'Network diagnostics' \ - 'Dump' 'Dump current network status' \ - 'About' 'License & Copyleft'" 2> ${TMPFILE} - - return $? -} - -##function -show_help(){ - -##local -SCRIPTNAME=$1 - echo "Usage: ${SCRIPTNAME} [OPTION]" - echo "Options:" - 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(){ - -##local -SCRIPTNAME=$1 - echo "${SCRIPTNAME} -- version ${VERSION}" - 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." - echo - echo "YOU USE THIS SOFTWARE AT YOUR OWN RISK." - echo "There is ABSOLUTELY NO WARRANTY; not even for MERCHANTABILITY or" - echo "FITNESS FOR A PARTICULAR PURPOSE." -} - -##function -show_disclaimer(){ - - cat <<EOF > ${TMPFILE} - - -+- setnet.sh ${VERSION} -+- - - Copyleft (C) KatolaZ (katolaz@freaknet.org) - 2016, 2017 - - -+- This is an alpha release of setnet.sh -+- - - THIS IS FREE SOFTWARE - YOU CAN USE AND DISTRIBUTE IT UNDER THE - TERMS OF THE GNU GENERAL PUBLIC LICENSE - - USE THIS SOFTWARE AT YOUR OWN RISK - - There is ABSOLUTELY NO WARRANTY; not even for - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE - - See "About" for more information about - 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(){ - - - show_disclaimer - - log "setnet" "Starting afresh on $(date)" - SETNETRC=$(realpath ${SETNETRC}) - log "main" "Using config file \"${SETNETRC}\"" - WPA_FILE=$(realpath ${WPA_FILE}) - log "main" "Using WPA config file \"${WPA_FILE}\"" - LOFGILE=$(realpath ${LOGFILE}) - log "main" "Using log file \"${LOGFILE}\"" - - 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 - ;; - "About") - about_menu - ;; - esac - done - -} - - -## -## 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 -done - - -## -## Load the configuration file -## - -load_setnetrc ${SETNETRC} - -## -## Init stuff -## - -initialise - - -## -## Check dependencies. If we are missing someting essential, then exit. -## - -check_deps - -## -## This is the main loop -## - -main - -- cgit v1.2.3