Network script & bash ip validator

Couannette couannette at free.fr
Thu Feb 3 18:46:05 UTC 2005


*User must provide valid input* is a good rationale for this type of script.
Anyway init.d scripts should be as robust as possible.

Lnet should check for correctness at user input, but its a "tasty" feature since
Lunar fellows are all SysAdmins ;*).

Couannette

Steven Michalske a écrit :
> Sounds good, and i like the to_lower change on the case statments.
> although only use the to_lowered address for the selects of the case statment 
> and script logic.
> 
> let ifconfg yell about invalid ip addresses this also alows for ipv6 
> addresses?
> 
> Steve
> 
> On Thursday 03 February 2005 08:11 am, Auke Kok wrote:
> 
>>hmmm
>>
>>I think I'm gonna replace the regex with code that just passes the
>>contents of that var directly to ifconfig... this type of validity
>>checking is really out of place indeed (I also have the funny feeling
>>that in bash-3.00 the left-associative binding of ')' in a case
>>statement changed somehow...)
>>
>>Anyway this would reduce the problem to: "User must provide valid
>>input". Any errors displayed consequently will result in the iface not
>>being brought up and a proper message by ifconfig itself, rather
>>appropriate I'd say.
>>
>>objections?
>>
>>Auke
>>
>>Stefan Wold wrote:
>>
>>>Good idea, but wrong place to add it. A check is already done to see
>>>if ifconfig successfully set an ipaddress, otherwise it will tell you
>>>it failed. Ifconfig would not accept invalid ipaddress's, which is
>>>something your little hack does.
>>>[0-9]{1,3}  would allow addresses like 999.999.999.999.
>>>
>>>If something like this really is needed a better place to add it would
>>>be in the "lnet" tool, not in the start up scripts.
>>>
>>>Sincerely
>>>Stefan Wold
>>>
>>>n Thu, 3 Feb 2005, Couannette wrote:
>>>
>>>>Hi
>>>>
>>>>I modified /etc/init.d/network, adding an IP validator function.
>>>>What do you think of that ?
>>>>
>>>>Best regards,
>>>>
>>>>Couannette
>>>>
>>>>--- network    2003-12-18 11:07:08.000000000 +0100
>>>>+++ network.m    2005-02-03 12:16:19.757771241 +0100
>>>>@@ -6,10 +6,27 @@
>>>># description: Activates/Deactivates all network interfaces
>>>>configured to \
>>>>#              start at boot time.
>>>># probe: true
>>>>-
>>>>+set -x
>>>>shopt -s extglob
>>>>CONFIGS=/etc/config.d/network
>>>>
>>>>+to_lower () { tr 'A-Z' 'a-z' <<< "$*"; }
>>>>+ip_validator () {
>>>>+    _IFS=$IFS
>>>>+    IFS=. numbers=( $1 )
>>>>+    IFS=$_IFS
>>>>+    if [ ${#numbers[@]} == 4 ] ; then
>>>>+    for i in ${numbers[*]} ; do
>>>>+        if [[ ! "$i" =~ "[0-9]{1,3}" ]] ; then
>>>>+        return 1
>>>>+        fi
>>>>+    done
>>>>+    else
>>>>+    return 1
>>>>+    fi
>>>>+    return 0
>>>>+}
>>>>+
>>>>chkresult() {
>>>>  if [ $? -eq "-1" ] ; then
>>>>      echo -e $RESULT_FAIL
>>>>@@ -67,23 +84,25 @@
>>>>        return -1;
>>>>    fi;
>>>>
>>>>-    case $ADDRESS in
>>>>-        [dD][hH][cC][pP])
>>>>+    address=$(to_lower $ADDRESS)
>>>>+    case $address in
>>>>+        dhcp)
>>>>            if [ -z $DHCP_CLIENT ]; then
>>>>            echo -n "DHCP client not specified";
>>>>            return -1;
>>>>        fi;
>>>>-        case $DHCP_CLIENT in
>>>>-            [dD][hH][cC][pP][cC][dD])
>>>>+        dhcp_client=$(to_lower $DHCP_CLIENT)
>>>>+        case $dhcp_client in
>>>>+            dhcpcd)
>>>>                PIDFILE=/etc/dhcpc/dhcpcd-$1.pid
>>>>            RUNFILE=/usr/sbin/dhcpcd
>>>>            ;;
>>>>-            [dD][hH][cC][lL][iI][eE][nN][tT])
>>>>+            dhclient)
>>>>                PIDFILE=/var/run/dhclient-$1.pid
>>>>            RUNFILE=/sbin/dhclient
>>>>            DHCP_OPTIONS="$DHCP_OPTIONS -pf $PIDFILE -lf
>>>>/var/state/dhcp/dhclient-$1.leases"
>>>>            ;;
>>>>-            [uU][dD][hH][cC][pP][cC])
>>>>+            udhcpc)
>>>>                PIDFILE=/var/run/udhcpc-$1.pid
>>>>            RUNFILE=/sbin/udhcpc
>>>>            DHCP_OPTIONS="$DHCP_OPTIONS -p $PIDFILE -i"
>>>>@@ -114,7 +133,11 @@
>>>>            fi;
>>>>        fi;
>>>>        ;;
>>>>-
>>>>?([0-9])?([0-9])[0-9].?([0-9])?([0-9])[0-9].?([0-9])?([0-9])[0-9].?([0-9
>>>>])?([0-9])[0-9])
>>>>
>>>>+        *)  # we must validate IP addr
>>>>+        if ! ip_validator $address ; then
>>>>+            echo -n "IP address $address is not valid"
>>>>+            return -1
>>>>+        fi
>>>>        if [ ! -x /sbin/ifconfig ]; then
>>>>            echo -n "ifconfig not installed";
>>>>            return -1;
>>>>@@ -152,14 +175,16 @@
>>>>
>>>>    . $CONFIGS/$1;
>>>>
>>>>-    case $ADDRESS in
>>>>-        [dD][hH][cC][pP])
>>>>-            case $DHCP_CLIENT in
>>>>-            [dD][hH][cC][pP][cC][dD])
>>>>+    address=$(to_lower $ADDRESS)
>>>>+    case $address in
>>>>+        dhcp)
>>>>+        dhcp_client=$(to_lower $DHCP_CLIENT)
>>>>+            case $dhcp_client in
>>>>+            dhcpcd)
>>>>            KILLCMD="dhcpcd -k"
>>>>                PIDFILE=/etc/dhcpc/dhcpcd-$1.pid
>>>>            ;;
>>>>-            [dD][hH][cC][lL][iI][eE][nN][tT])
>>>>+            dhclient)
>>>>                PIDFILE=/var/run/dhclient-$1.pid
>>>>            ;;
>>>>        esac
>>>>@@ -187,7 +212,11 @@
>>>>            esac
>>>>            fi;
>>>>        ;;
>>>>-
>>>>?([0-9])?([0-9])[0-9].?([0-9])?([0-9])[0-9].?([0-9])?([0-9])[0-9].?([0-9
>>>>])?([0-9])[0-9])
>>>>
>>>>+        *)  # we must validate IP addr
>>>>+        if ! ip_validator $address ; then
>>>>+            echo -n "IP address $address is not valid"
>>>>+            return -1
>>>>+        fi
>>>>        if [ `ifconfig | grep $1 | wc -l` -eq 1 ]; then
>>>>            if [ ! -x /sbin/ifconfig ]; then
>>>>                   echo -n "ifconfig not installed";
>>>
>>>_______________________________________________
>>>Lunar mailing list
>>>Lunar at lunar-linux.org
>>>http://lunar-linux.org/mailman/listinfo/lunar
>>
>>_______________________________________________
>>Lunar mailing list
>>Lunar at lunar-linux.org
>>http://lunar-linux.org/mailman/listinfo/luna
> 
> r
> 
> 
> ------------------------------------------------------------------------
> 
> _______________________________________________
> Lunar mailing list
> Lunar at lunar-linux.org
> http://lunar-linux.org/mailman/listinfo/lunar


More information about the Lunar mailing list