Do not leak wireless options into non-wireless device configurations on concurrent...
[grml-network.git] / sbin / netcardconfig
index 41f08c9..d9440e6 100755 (executable)
@@ -28,58 +28,58 @@ bailout() {
 writeiwline() {
   IWOURLINE=""
   if [ -n "$NWID" ]; then
-    IWOURLINE="$IWOURLINE wireless-nwid $NWID\n"
+    IWOURLINE="$IWOURLINE\twireless-nwid $NWID\n"
   fi
 
   if [ -n "$MODE" ]; then
-    IWOURLINE="$IWOURLINE wireless-mode $MODE\n"
+    IWOURLINE="$IWOURLINE\twireless-mode $MODE\n"
   fi
 
   if [ -n "$CHANNEL" ]; then
-    IWOURLINE="$IWOURLINE wireless-channel $CHANNEL\n"
+    IWOURLINE="$IWOURLINE\twireless-channel $CHANNEL\n"
   fi
 
   if [ -n "$FREQ" ]; then
-    IWOURLINE="$IWOURLINE wireless-freq $FREQ\n"
+    IWOURLINE="$IWOURLINE\twireless-freq $FREQ\n"
   fi
 
   if [ -n "$KEY" ]; then
     if [ "$PUBKEY" -eq 1 ]; then
       # Store the key in interfaces in wireless-key
-      IWOURLINE="$IWOURLINE wireless-key $KEY\n"
+      IWOURLINE="$IWOURLINE\twireless-key $KEY\n"
     else
       # Store the key in /etc/network/wep.$DV which is root readable only
       # Use pre-up in interfaces to read and set it
-      echo "$KEY" > "/etc/network/wep.$DV" && chmod 600 "/etc/network/wep.$DV" && IWOURLINE="$IWOURLINE pre-up KEY=\$(cat /etc/network/wep.$DV) && iwconfig $DV key \$KEY\n"
+      echo "$KEY" > "/etc/network/wep.$DV" && chmod 600 "/etc/network/wep.$DV" && IWOURLINE="$IWOURLINE\tpre-up KEY=\$(cat /etc/network/wep.$DV) && iwconfig $DV key \$KEY\n"
     fi
   fi
 
   for mod in /sys/module/rt2??0/ ; do
     if [ -d "$mod" ]; then
-      IWPREUPLINE="$IWPREUPLINE pre-up /sbin/ip link set $DV up\n"
+      IWPREUPLINE="$IWPREUPLINE\tpre-up /sbin/ip link set $DV up\n"
       break
     fi
   done
 
   if [ -n "$IWCONFIG" ]; then
-    IWPREUPLINE="$IWPREUPLINE iwconfig $IWCONFIG\n"
+    IWPREUPLINE="$IWPREUPLINE\tiwconfig $IWCONFIG\n"
   fi
 
   if [ -n "$IWSPY" ]; then
-    IWPREUPLINE="$IWPREUPLINE iwspy $IWSPY\n"
+    IWPREUPLINE="$IWPREUPLINE\tiwspy $IWSPY\n"
   fi
 
   if [ -n "$IWPRIV" ]; then
-    IWPREUPLINE="$IWPREUPLINE iwpriv $IWPRIV\n"
+    IWPREUPLINE="$IWPREUPLINE\tiwpriv $IWPRIV\n"
   fi
 
   # execute ESSID last, but make sure that it is written as first option
   if [ -n "$ESSID" ]; then
-    IWOURLINE="$IWOURLINE wireless-essid $ESSID\n"
+    IWOURLINE="$IWOURLINE\twireless-essid $ESSID\n"
   fi
 
   if [ "$WPAON" -gt 0 ]; then
-    IWOURLINE="$IWOURLINE wpa-ssid $ESSID\n wpa-psk $WPASECRET\n"
+    IWOURLINE="$IWOURLINE\twpa-ssid $ESSID\n\twpa-psk $WPASECRET\n"
   fi
 
   IWOURLINE="$IWOURLINE $IWPREUPLINE"
@@ -190,10 +190,11 @@ configiface() {
   DV=$DEVICENAME
   ifdown "${DV}" --force
   sleep 3
-  # wireless config
-  WLDEVICECOUNT="$(LANG=C LC_MESSAGEWS=C iwconfig "$DV" 2>/dev/null | wc -l)"
+  # INTERACTIVE=true
   if "${INTERACTIVE}" ; then
+    # Setup wireless options?
     if [ $iswireless -gt 0 ] && $DIALOG --yesno "$MESSAGE13" 8 45; then
+      WLDEVICECOUNT="$(LANG=C LC_MESSAGEWS=C iwconfig "$DV" 2>/dev/null | wc -l)"
       ESSID=""
       NWID=""
       MODE=""
@@ -432,8 +433,12 @@ configiface() {
       $DIALOG --inputbox "$MESSAGEW20 $DEVICENAME $MESSAGEW21" 15 50 "$IWPRIV" 2>"$TMP" || bailout 1
       read -r IWPRIV <"$TMP" ; rm -f "$TMP"
 
-      writeiwline
-    fi
+      unset IWOURLINE
+      if [ "$iswireless" = "1" ] ; then
+        writeiwline
+      fi
+
+    fi # Setup wireless options?
 
     # Configure VLAN on this interface?
     if $DIALOG --defaultno --yesno "$MESSAGE16" 8 45; then
@@ -445,8 +450,9 @@ configiface() {
         DV="vlan$VLAN"
       fi
     fi
-  fi
+  fi # INTERACTIVE=true
 
+  # Use DHCP broadcast?
   if ("${INTERACTIVE}" && "${DIALOG}" --yesno "${MESSAGE2}" 8 45) || \
     (! "${INTERACTIVE}" && [[ "${METHOD}" == 'dhcp' ]]) ; then
     if [ -w /etc/network/interfaces ]; then
@@ -457,7 +463,14 @@ configiface() {
         {if(!(found+lastblank)){print}}
         END{print "iface '"$DV"' inet dhcp";if("'"$PDV"'"!=""){print "\tvlan-raw-device '"$PDV"'"}}' \
         /etc/network/interfaces >"$TMP"
-      echo -e "$IWOURLINE" >> "$TMP"
+      case "$DV" in
+        "$WLAN")
+          # write wireless configuration only when we are dealing with a wireless device,
+          # it might be set from a previous configuration run of a wireless device
+          # while the currently configured network device isn't a wireless device
+          echo -e "$IWOURLINE" >> "$TMP"
+          ;;
+      esac
       #echo -e "\n\n" >> $TMP
       cat "$TMP" >/etc/network/interfaces
       rm -f "$TMP"
@@ -499,6 +512,17 @@ configiface() {
     fi
 
     if [ -w /etc/network/interfaces ]; then
+      case "$DV" in
+        "$WLAN")
+          ;;
+        *)
+          # ensure we don't leak the IWOURLINE into the
+          # following awk command line, if we are configuring
+          # a device without wireless capabilities
+          unset IWOURLINE
+          ;;
+      esac
+
       awk '/iface/{if(/'"$DV"'/){found=1}else{found=0}}
         {if(!found){print}}
         END{print "\niface '"$DV"' inet static\n\taddress '"$IP"'\n\tnetmask '"$NM"'\n\tnetwork '"${IP%.*}.0"'";if("'"$BC"'"!=""){print "\tbroadcast '"$BC"'"};if("'"$DG"'"!=""){print "\tgateway '"$DG"'"};if("'"$NS"'"!=""){print "\tdns-nameservers '"$NS"'"};if("'"$PDV"'"!=""){print "\tvlan-raw-device '"$PDV"'"};if("'"$IWOURLINE"'"!=""){print "'"$IWOURLINE"'"};print "\n"}' \
@@ -511,7 +535,7 @@ configiface() {
       #addauto
     fi
 
-  fi
+  fi # Use DHCP broadcast?
   echo "Done."
 }