This avoids eval and all other sorts of things. We also now exit when we get an invalid zone name.
Signed-off-by: Jonatan Schlag jonatan.schlag@ipfire.org --- src/initscripts/system/network | 52 ++++++++++++++++++++-------------- 1 file changed, 31 insertions(+), 21 deletions(-)
diff --git a/src/initscripts/system/network b/src/initscripts/system/network index 06240f53c..008fbbe2b 100644 --- a/src/initscripts/system/network +++ b/src/initscripts/system/network @@ -31,41 +31,51 @@ if ! [[ "${DO}" == "start" || "${DO}" == "restart" || "${DO}" == "stop" ]]; the exit 1 fi
-if [ -n "${1}" ]; then - ALL=0 - for i in green red blue orange; do - eval "${i}=0" - done -else - ALL=1 - for i in green red blue orange; do - eval "${i}=1" - done +declare -A ZONE_ACTION + +ZONE_ACTION[blue]=false +ZONE_ACTION[green]=false +ZONE_ACTION[orange]=false +ZONE_ACTION[red]=false + +if [ $# -eq 0 ]; then + ZONE_ACTION[blue]=true + ZONE_ACTION[green]=true + ZONE_ACTION[orange]=true + ZONE_ACTION[red]=true fi
-while [ ! $# = 0 ]; do +while [ $# -ne 0 ]; do + ZONE_VALID=false for i in green red blue orange; do if [ "${i}" == "${1}" ]; then - eval "${i}=1" + ZONE_ACTION[${i}]=true + ZONE_VALID=true shift + break fi done + + if ! ${ZONE_VALID}; then + echo "'${1}' is not a valid zone. Cannot go on." + exit 1 + fi done
case "${DO}" in start) # Starting interfaces... # GREEN - [ "$green" == "1" ] && /etc/rc.d/init.d/networking/green start + ${ZONE_ACTION[green]} && /etc/rc.d/init.d/networking/green start
# BLUE - [ "$blue" == "1" ] && /etc/rc.d/init.d/networking/blue start + ${ZONE_ACTION[blue]} && /etc/rc.d/init.d/networking/blue start
# ORANGE - [ "$orange" == "1" ] && /etc/rc.d/init.d/networking/orange start + ${ZONE_ACTION[orange]} && /etc/rc.d/init.d/networking/orange start
# RED - [ "$red" == "1" ] && /etc/rc.d/init.d/networking/red start + ${ZONE_ACTION[red]} && /etc/rc.d/init.d/networking/red start
boot_mesg "Mounting network file systems..." mount -a -O _netdev @@ -79,16 +89,16 @@ case "${DO}" in
# Stopping interfaces... # GREEN - [ "$green" == "1" ] && /etc/rc.d/init.d/networking/green stop + ${ZONE_ACTION[green]} && /etc/rc.d/init.d/networking/green stop
# BLUE - [ "$blue" == "1" ] && /etc/rc.d/init.d/networking/blue stop + ${ZONE_ACTION[blue]} && /etc/rc.d/init.d/networking/blue stop
# ORANGE - [ "$orange" == "1" ] && /etc/rc.d/init.d/networking/orange stop + ${ZONE_ACTION[orange]} && /etc/rc.d/init.d/networking/orange stop
# RED - if [ "$red" == "1" ]; then + if ${ZONE_ACTION[red]}; then /etc/rc.d/init.d/networking/red stop fi
@@ -97,7 +107,7 @@ case "${DO}" in
restart) for i in green red blue orange; do - if [ "${!i}" == "1" ]; then + if {ZONE_ACTION[${i}]}; then ARGS+=" ${i}" fi done