summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDarren 'Tadgy' Austin <darren@afterdark.org.uk>2020-11-18 16:11:07 +0000
committerRobby Workman <rworkman@slackware.com>2021-02-27 23:47:58 -0600
commite1b2962f0f2bf976c5f7d2bb8e9c53f896ef84b5 (patch)
treebfabbebf9c9d04360b973d585e22f58e442a9a9a
parent9510dbb57b8626a756d1b78ec763105c695460c3 (diff)
downloadslacknetsetup-e1b2962f0f2bf976c5f7d2bb8e9c53f896ef84b5.tar.xz
Various updates to netconfig - see full log.
* Rename -syntax_check_color function to syntax_check_v4 as it more accurately represents its IPv4 specific function now. * Some updates to text presented in dialogs. * Protect some variable expansions with ""s. * Initial support for IPADDRS/IP6ADDRS arrays. * Improve validation of user supplied input. * Refactoring for use of the IPADDRS array and multiple IP/mask entry.
-rw-r--r--netconfig170
1 files changed, 90 insertions, 80 deletions
diff --git a/netconfig b/netconfig
index bad070e..48b2d4d 100644
--- a/netconfig
+++ b/netconfig
@@ -366,7 +366,7 @@ fi
# usage: syntax_check ADDRESS #-OF-EXPECTED-SEGMENTS (up to 4)
# example: syntax_check 123.22.43.1 4
# returns: 0=found correct 1=too many fields 2=non numeric field found
-syntax_check_color() {
+syntax_check_v4() {
RET_CODE=0
SCRATCH=$1
SCRATCH=`echo $SCRATCH | tr "." "/"`
@@ -387,11 +387,13 @@ syntax_check_color() {
fi
if [ "$3" = "WARN" -a ! "$RET_CODE" = "0" ]; then
cat << EOF > $TMP/tempmsg
-The value you have entered seems to be non-standard. We were
-expecting $2 groups of numbers seperated by dots, like: 127.0.0.1
-Please enter a valid value.
+The IP address you entered, $1, is not valid.
+There should be $2 groups of numbers seperated by dots, for example:
+ 192.168.1.1
+
+Please correct any mistakes in the IP.
EOF
- dialog --title "INVALID VALUE" --defaultno --msgbox "`cat $TMP/tempmsg`" 7 72
+ dialog --title "INVALID VALUE" --defaultno --msgbox "`cat $TMP/tempmsg`" 9 72
rm -r $TMP/tempmsg
else
if [ "$3" = "ECHO" ]; then
@@ -418,12 +420,14 @@ USE_DHCP="" # Use DHCP? "" == no.
USE_DHCP6=""
DHCP_HOSTNAME="" # This is our DHCP hostname.
NETWORK=127.0.0.0
+IPADDRS=()
+IP6ADDRS=()
+# FIXME: Now deprecated:
IPADDR=127.0.0.1
NETMASK=24 # Use CIDR now.
IPADDR6=::1
PREFIX6=64
-# Main loop:
while [ 0 ]; do
cat << EOF > $TMP/tempmsg
First, we'll need the name you'd like to give your host.
@@ -433,17 +437,19 @@ For example: darkstar
Enter hostname:
EOF
dialog --title "ENTER HOSTNAME" --inputbox "`cat $TMP/tempmsg`" 12 64 \
- $HOSTNM 2> $TMP/SeThost
+ "$HOSTNM" 2> $TMP/SeThost
if [ $? = 1 -o $? = 255 ]; then
rm -f $TMP/SeThost $TMP/tempmsg
exit
fi
HOSTNM="`cat $TMP/SeThost`"
rm -f $TMP/SeThost $TMP/tempmsg
- if [ "$HOSTNM" = "" ] || [[ ! "$HOSTNM" =~ ^[[:alnum:]]+(-)*[[:alnum:]]+$ ]]; then
+ if [ "$HOSTNM" = "" ] || [[ ! "$HOSTNM" =~ ^[[:alnum:]-]+$ ]] || \
+ [ "${HOSTNM:0:1}" == "-" ] || [ "${HOSTNM: -1:1}" == "-" ]; then
dialog --title "HOSTNAME" --ok-button "Back" --msgbox \
- "That doesn't appear to be a valid hostname.\n
-Hostnames can only contain letters, numbers and hyphens." 6 60
+ "That doesn't appear to be a valid hostname.\n
+Hostnames can only contain letters, numbers and hyphens,
+and may not begin or end with a hyphen." 7 60
if [ $? = 1 -o $? = 255 ]; then
exit
fi
@@ -458,22 +464,23 @@ Now, we need the domain name for this machine, such as:
example.org
Do not supply a leading '.'
-Enter domain name for $HOSTNM:
+Enter domain name for $HOSTNM:
EOF
dialog --title "ENTER DOMAINNAME FOR '$HOSTNM'" --inputbox \
-"`cat $TMP/tempmsg`" \
-12 59 $DOMAIN 2> $TMP/SeTdom
+ "`cat $TMP/tempmsg`" 12 59 "$DOMAIN" 2> $TMP/SeTdom
if [ $? = 1 -o $? = 255 ]; then
rm -f $TMP/SeTdom $TMP/tempmsg
exit
fi
DOMAIN="`cat $TMP/SeTdom`"
rm -f $TMP/SeTdom $TMP/tempmsg
- # This regex doesn't catch everything, just basic syntax mistakes.
- if [ "$DOMAIN" = "" ] || [[ ! "$DOMAIN" =~ ^([[:alnum:]]+[-.]*[[:alnum:]]+)+$ ]]; then
+ # These regexes doon't catch everything, just basic syntax mistakes.
+ if [ "$DOMAIN" = "" ] || [[ ! "$DOMAIN" =~ ^([[:alnum:]]+[-.]*[[:alnum:]]+)+$ ]] || \
+ [[ "${DOMAIN:0:1}" =~ ^[.-]$ ]] || [[ "${DOMAIN: -1:1}" == ^[.-]$ ]]; then
dialog --title "DOMAINNAME" --ok-button "Back" --msgbox \
"That doesn't appear to be a valid domain name.\n
-Domain names can only contain letters, numbers hyphens and dots." 6 68
+Domain names can only contain letters and numbers, hyphens
+and dots, and may not begin or end with a hyphen or dot." 7 68
if [ $? = 1 -o $? = 255 ]; then
exit
fi
@@ -570,12 +577,16 @@ pure IPv6 network, or 'Both' to try and set up both types of network." 13 73 3 \
USE_DHCP="yes"
USE_DHCP6="yes"
fi
- dialog --title "SET DHCP HOSTNAME" --inputbox "Some network providers require \
+ dialog --title "SET DHCP HOSTNAME" --cancel-label "Skip" \
+ --inputbox "Some network providers require \
that the DHCP hostname be set in order to connect. If so, they'll have assigned \
a hostname to your machine, which may look something like CC-NUMBER-A (this \
depends on your ISP). If you were assigned a DHCP hostname, please enter it \
-below. If you do not have a DHCP hostname, just hit ENTER or Cancel." 13 62 \
-2> $TMP/SeTDHCPHOST
+below. If you do not have a DHCP hostname, just hit ENTER or select 'Skip'." 13 62 \
+ 2> $TMP/SeTDHCPHOST
+ if [ "$?" = "255" ]; then
+ exit
+ fi
NEW_DHCPHOST="`cat $TMP/SeTDHCPHOST`"
rm -f $TMP/SeTDHCPHOST
# OK, if we actually got something, use it.
@@ -595,96 +606,95 @@ fi
if [ "$LOOPBACK" = "no" -a ! "$USE_DHCP" = "yes" -a ! "$USE_SLAAC" = "yes" ]; then
while [ 0 ]; do
while [ 0 ]; do
- if [ -r $TMP/SeTIP ]; then
- IPADDR=`cat $TMP/SeTIP`
+ if [ -r $TMP/SeTIPSv4 ]; then
+ IPADDRS=($(cat $TMP/SeTIPSv4))
fi
- dialog --title "ENTER IPv4 ADDRESS FOR '$HOSTNM.$DOMAIN'" --inputbox \
-"Enter the IPv4 address for the local machine. Example: 111.112.113.114
-If you do not want to configure a static IPv4 address, just hit ENTER. " \
- 9 75 $IPADDR 2> $TMP/SeTlip
- if [ $? = 1 -o $? = 255 ]; then
+ dialog --title "ENTER IPv4 ADDRESSES" --cancel-label "Skip" --inputbox \
+"Enter the IPv4 addresses for this host. You may list one or more,
+space delimited, IPv4 addresses with net masks in the format:
+ <IP address>/<CIDR net mask>
+For example:
+ 111.112.113.114/24
+If a net mask is not specified a default of 24 will be used.
+
+The first address entered will become the primary IPv4 address
+of this host. If you do not want to configure a static IPv4
+address, just hit ENTER or select 'Skip' " \
+ 17 69 "${IPADDRS[*]}" 2> $TMP/SeTlip
+ ERRNO="$?"
+ if [ "$ERRNO" = "1" ]; then
+ break
+ elif [ "$ERRNO" = "255" ]; then
rm -f $TMP/SeTlip
exit
fi
- IPADDR="`cat $TMP/SeTlip`"
+ IPADDRS=($(cat $TMP/SeTlip))
rm -f $TMP/SeTlip
- if [ "$IPADDR" = "" ]; then
- break
- fi
- syntax_check_color $IPADDR 4 WARN
- if [ $? = 0 ]; then
- echo $IPADDR > $TMP/SeTIP
+ if [ "${IPADDRS[*]}" = "" ]; then
break
fi
- done
-
- if [ ! "$IPADDR" = "" ]; then
- while [ 0 ]; do
- if [ -r $TMP/SeTnetmask ]; then
- NETMASK=`cat $TMP/SeTnetmask`
- fi
- dialog --title "ENTER NETMASK FOR IPv4 NETWORK" --inputbox \
-"Enter the netmask for your IPv4 network.
-This will generally be a single number (eg, 24)
-or look something like this: 255.255.255.0." 10 55 $NETMASK 2> $TMP/SeTnmask
- if [ $? = 1 -o $? = 255 ]; then
- rm -f $TMP/SeTnmask
- exit
- fi
- NETMASK="`cat $TMP/SeTnmask`"
- rm -f $TMP/SeTnmask
- if [ "$NETMASK" = "" ]; then
- dialog --title "NETMASK REQUIRED" --msgbox \
-"You have configured this host with a v4
-IP address - a netmask is required." 6 43
+ for ((I=0; I < ${#IPADDRS[@]}; I++)); do
+ IP="${IPADDRS[$I]%%/*}"
+ MASK="${IPADDRS[$I]#*/}"
+ if [ "$IP" = "" ]; then
+ dialog --title "NO IPv4 ADDRESSES" --ok-button "Back" --msgbox \
+ "No IP specified in entry: ${IPADDRS[$I]}." 5 46
continue
fi
- if (($NETMASK == 0)) 2>/dev/null || (($NETMASK > 32)) 2>/dev/null; then
- dialog --title "NETMASK INVALID" --msgbox \
-"The netmask you entered is not valid.
-Valid netmasks will be in the range 1-32." 6 45
- continue
- elif (($NETMASK)) 2>/dev/null; then
- echo $NETMASK > $TMP/SeTnetmask
- break
- else
- syntax_check_color $NETMASK 4 WARN
- if [ $? = 0 ]; then
- echo $NETMASK > $TMP/SeTnetmask
- break
- fi
+ syntax_check_v4 "$IP" 4 WARN || continue 2
+ if [ "$MASK" = "" ]; then
+ IPADDRS[$I]="$IP/24"
+ MASK="24"
+ fi
+ if [[ ! "$MASK" =~ ^[0-9]+$ ]] || (($MASK <= 0)) || (($MASK > 32)); then
+ dialog --title "INVALID NET MASK" --msgbox \
+"Invalid net mask specified for entry: ${IPADDRS[$I]}.
+Valid net masks will be in the range 1-32." 6 70
+ echo "${IPADDRS[@]}" >$TMP/SeTIPSv4
+ continue 2
fi
done
+ # echo "${IPADDRS[0]%%/*}" >$TMP/SeTIP
+ # echo "${IPADDRS[0]#*/}" >$TMP/SeTnetmask
+ echo "${IPADDRS[@]}" >$TMP/SeTIPSv4
+ break
+ done
+
+ if [ ! "${IPADDRS[*]}" = "" ]; then
while [ 0 ]; do
- if [ -r $TMP/SeTgateway ]; then
- GATEWAY=`cat $TMP/SeTgateway`
+ if [ -r $TMP/SeTgateway4 ]; then
+ GATEWAY="`cat $TMP/SeTgateway4`"
fi
- dialog --title "ENTER IPv4 GATEWAY ADDRESS" --inputbox \
+ dialog --title "ENTER IPv4 GATEWAY ADDRESS" --cancel-label "Skip" --inputbox \
"Enter the address for the IPv4 gateway on your network, such as:
- `echo $IPADDR | cut -f 1-3 -d .`.1
+ `echo ${IPADDRS[0]} | cut -f 1-3 -d .`.1
If you don't have an IPv4 gateway on your network just hit ENTER
-without entering a gateway IP address.
+without entering a gateway IP address, or select 'Skip'.
-Enter IPv4 gateway address (aaa.bbb.ccc.ddd):" 14 68 $GATEWAY 2> $TMP/SeTgate
+Enter IPv4 gateway address:" 14 68 "$GATEWAY" 2> $TMP/SeTgate4
if [ $? = 1 -o $? = 255 ]; then
- rm -f $TMP/SeTgate
+ rm -f $TMP/SeTgate4
exit
fi
- GATEWAY="`cat $TMP/SeTgate`"
- rm -f $TMP/SeTgate
+ GATEWAY="`cat $TMP/SeTgate4`"
+ rm -f $TMP/SeTgate4
if [ "$GATEWAY" = "" ]; then
- echo > $TMP/SeTgateway
+ echo > $TMP/SeTgateway4
break
+ else
+ echo "$GATEWAY" >$TMP/SeTgateway4
fi
- syntax_check_color $GATEWAY 4 WARN
+ syntax_check_v4 "$GATEWAY" 4 WARN
if [ $? = 0 ]; then
- echo $GATEWAY > $TMP/SeTgateway
+ echo $GATEWAY > $TMP/SeTgateway4
break
fi
done
fi
+exit
+
while [ 0 ]; do
if [ -r $TMP/SeTIP6 ]; then
IPADDR6=`cat $TMP/SeTIP6`