#!/bin/sh # @vasm : VWIRELESSSET # @level: root # @description: quick add a wireless connection, all defaults # # (c) JohnVan, 2004 # (c) Vector Linux, 2004 # # Released under GNU GPL VDIR=$(dirname $0) . $VDIR/vasm-functions check_root # Path to files wdir=/etc/wireless # Paths to binaries CHMOD=/bin/chmod # Defaults defchmod=600 ###################################################################################### ## MAIN promptDesc() { # Ask description while [ 1 ]; do TITLE="Connection Description" TEXT="Enter short description:" inputwizard "$TEXT" "$TITLE" "$INFO" STATUS=$? [ $STATUS != 0 ] && return $STATUS tINFO=$(cat $freply) if [ -z "$tINFO" ]; then continue else INFO=$tINFO return 0 fi done } MenuEncrypt() { # Ask about encryption DIMENSION="12 68 3" TITLE="Encryption Method" TEXT="\n What type of encryption?\n Select one:" $WCMD $LEFT_ALIGN --backtitle "$BACKTITLE" --title "$TITLE" --menu "$TEXT" $DIMENSION \ "Plaintext" "No encryption - not secure " \ "WEP" "Simple form of encryption available on most cards" \ "WPA/RSN" "Stronger form of encryption" \ 2> $freply STATUS=$? [ $STATUS != 0 ] && return $STATUS tEncryption=$(cat $freply) if [ $tEncryption == "WEP" ]; then while [ 1 ]; do TEXT="Enter Encryption key as HEX 4567-89AB-C or STRING s:password\n" inputwizard "$TEXT" "$TITLE" "$KEY" STATUS=$? [ $STATUS != 0 ] && return $STATUS tKEY=$(cat $freply) if [ -z "$tKEY" ]; then continue elif [ "`echo $tKEY | grep -e '[^0-9A-Fa-f]'`" ]; then if [ ! "`echo $tKEY | grep -e '^s:*'`" ]; then retrybox "KEY '$tKEY' contains illegal characters" fi fi KEY=$tKEY Encryption=$tEncryption return 0 done elif [ $tEncryption == "WPA/RSN" ]; then TEXT="Enter Private Shared Key\n" while [ 1 ]; do inputwizard "$TEXT" "$TITLE" "$PSKEY" STATUS=$? [ $STATUS != 0 ] && return $STATUS tPSKEY=$(cat $freply) len=`echo ${#tPSKEY}` if [ $len -gt 7 -a $len -lt 64 ]; then PSKEY=$tPSKEY Encryption=$tEncryption return 0 fi retrybox "Passphrase length must be between 8 & 63 characters in length" done else Encryption=$tEncryption fi } menuSave() { DIMENSION="12 60 2" TITLE="OKAY TO SAVE?" TEXT="\n Is it okay to save information" $DCMD $LEFT_ALIGN --backtitle "$BACKTITLE" --title "$TITLE" --menu "$TEXT" $DIMENSION \ "Yes" "I'm Satisfied " \ "No" "Do not save" \ 2> $freply STATUS=$? [ $STATUS != 0 ] && return $STATUS SAVE=$(cat $freply) if [ $SAVE = "No" ]; then exit 1 ; fi if [ $NEWESSID = "YES" ]; then # copy over blank template cp $wdir/blankessid.conf $wdir/$ESSID.essid.conf else # create backup copy cp $wdir/$ESSID.essid.conf $wdir/$ESSID.essid.bkp if [ -f $wdir/$ESSID.wpa.conf ]; then cp $wdir/$ESSID.wpa.conf $wdir/$ESSID.wpa.bkp fi fi write_ESSID_Conf if [ $Encryption = "WPA/RSN" ]; then write_WPA_Conf; fi } write_ESSID_Conf(){ echo "writing ESSID configuration file for $ESSID" ESSID_file=$wdir/$ESSID.essid.conf cat $ESSID_file | sed " s|^ESSID=.*|ESSID=\"$ESSID\"| s#^INFO=.*#INFO=\"$INFO\"# s#^NWID=.*#NWID=\"$NWID\"# s#^MODE=.*#MODE=\"$MODE\"# s#^FREQ=.*#FREQ=\"$FREQ\"# s#^CHANNEL=.*#CHANNEL=\"$CHANNEL\"# s#^SENS=.*#SENS=\"$SENS\"# s#^RATE=.*#RATE=\"$RATE\"# s#^RTS=.*#RTS=\"$RTS\"# s#^FRAG=.*#FRAG=\"$FRAG\"# s#^IWCONFIG=.*#IWCONFIG=\"$IWCONFIG\"# s#^IWSPY=.*#IWSPY=\"$IWSPY\"# s#^IWPRIV=.*#IWPRIV=\"$IWPRIV\"# s#^KEY=.*#KEY=\"$KEY\"# " > $ESSID_file if [ $? != 0 ]; then cp $wdir/$ESSID.essid.bkp ESSID_file; echo "FAILED" ; fi if [ $Encryption="WPA/RSN" ]; then cat $ESSID_file | sed " s#^WPA=.*#WPA=yes# s|^WPACONF=.*|WPACONF=$wdir/$ESSID.wpa.conf|" > $ESSID_file if [ $? != 0 ]; then cp $wdir/$ESSID.essid.bkp ESSID_file; echo "FAILED" ; fi fi $CHMOD $defchmod $ESSID_file } write_WPA_Conf(){ echo "writing WPA Supplicant configuration file for $ESSID" WPA_file=$wdir/$ESSID.wpa.conf if [ "$NEWESSID" = "YES" ]; then echo "ctrl_interface=/var/run/wpa_supplicant # for wpa_cli support" > $WPA_file echo "ap_scan=1" >> $WPA_file wpa_passphrase "$ESSID" "$PSKEY" 1>> $WPA_file else hexpsk=`wpa_passphrase "$ESSID" "$PSKEY"|grep [^#]psk` cat $WPA_file | sed " s/#psk=.*/#psk=\"$PSKEY\"/ s/[^#]psk=.*/$hexpsk/" > $WPA_file fi $CHMOD $defchmod $ESSID_file } menuParams() { while [ 1 ]; do DIMENSION="20 76 10" TITLE="ADD CONNECTION" TEXT="\n Basic Parameters are completed.\n you may enter optional parameters then select DONE:\n" $DCMD $LEFT_ALIGN --backtitle "$BACKTITLE" --title "$TITLE" --menu "$TEXT" $DIMENSION \ "DONE" "Finished Making Changes" \ "INFO" "= \"$INFO\" --- DESCRIPTION" \ "ENCRYPTION" "= $Encryption $PSKEY $KEY --- Change Encryption" \ "NWID" "= \"$NWID\" --- NWID/Domain (cell identifier) : 89AB, 100, off" \ "MODE" "= \"$MODE\" --- Operation mode : Ad-Hoc, Managed, Master, Repeater, Secondary, auto" \ "FREQ" "= \"$FREQ\" --- 2.422G, 2.46G (frequency)" \ "CHANNEL" "= \"$CHANNEL\" --- 1, 2 ,3" \ "SENS" "= \"$SENS\" --- Sensitivity (cell size + roaming speed) : 1, 2, 3 ; -70 (dBm)" \ "RATE" "= \"$RATE\" --- Bit rate : auto, 1M, 11M" \ "RTS" "= \"$RTS\" --- RTS threshold : off, 500" \ "FRAG" "= \"$FRAG\" --- Fragmentation threshold : off, 1000" \ "IWCONFIG" "= \"$IWCONFIG\" --- Other iwconfig parameters : power off, ap 01:23:45:67:89:AB" \ "IWSPY" "= \"$IWSPY\" --- iwspy parameters : + 01:23:45:67:89:AB" \ "IWPRIV" "= \"$IWPRIV\" --- iwpriv parameters : set_port 2, set_histo 50 60" \ 2> $freply STATUS=$? [ $STATUS != 0 ] && return $STATUS choice=$(cat $freply) case $choice in INFO) promptDesc ;; ENCRYPTION) MenuEncrypt ;; NWID) inputwizard "NWID/Domain (cell identifier) : 89AB, 100, off" "NWID" "$NWID" STATUS=$? [ $STATUS != 0 ] && return $STATUS NWID=$(cat $freply) ;; MODE) inputwizard "Operation mode : Ad-Hoc, Managed, Master, Repeater, Secondary, auto" "Set Mode" "$MODE" STATUS=$? [ $STATUS != 0 ] && return $STATUS NWID=$(cat $freply) ;; FREQ) inputwizard "2.422G, 2.46G (frequency)" "Set Freq" "$FREQ" STATUS=$? [ $STATUS != 0 ] && return $STATUS FREQ=$(cat $freply) ;; CHANNEL) inputwizard "CHANNEL --- 1, 2 ,3" "Set Channel" "$CHANNEL" STATUS=$? [ $STATUS != 0 ] && return $STATUS CHANNEL=$(cat $freply) ;; SENS) inputwizard "Sensitivity (cell size + roaming speed) : 1, 2, 3 ; -70 (dBm)" "Set Sensitivity" "$SENS" STATUS=$? [ $STATUS != 0 ] && return $STATUS SENS=$(cat $freply) ;; RATE) inputwizard "Bit rate : auto, 1M, 11M, 54M" "Set Bit Rate" "$RATE" STATUS=$? [ $STATUS != 0 ] && return $STATUS RATE=$(cat $freply) ;; RTS) inputwizard "RTS threshold : off, 500" "Set RTS Threshold" "$RTS" STATUS=$? [ $STATUS != 0 ] && return $STATUS RTS=$(cat $freply) ;; FRAG) inputwizard "Fragmentation threshold : off, 1000" "Set Fragmentation Threshold" "$FRAG" STATUS=$? [ $STATUS != 0 ] && return $STATUS FRAG=$(cat $freply) ;; IWCONFIG) inputwizard "Other iwconfig parameters : power off, ap 01:23:45:67:89:AB" "Other Iwconfig" "$IWCONFIG" STATUS=$? [ $STATUS != 0 ] && return $STATUS IWCONFIG=$(cat $freply) ;; IWSPY) inputwizard "iwspy parameters : + 01:23:45:67:89:AB" "Set IWSPY Parameters" "$IWSPY" STATUS=$? [ $STATUS != 0 ] && return $STATUS IWSPY=$(cat $freply) ;; IWPRIV) inputwizard "iwpriv parameters : set_port 2, set_histo 50 60" "Set IWPRIV Parameters" "$IWPRIV" STATUS=$? [ $STATUS != 0 ] && return $STATUS IWPRIV=$(cat $freply) ;; DONE) return 0 ;; esac done } # Main Program # if a new connection prompt for basic info ESSID=$1 # else if existing connection get parameters from file(s). if [ -f "$wdir"/"$ESSID".essid.conf ]; then . "$wdir"/"$ESSID".essid.conf NEWESSID="NO" if [ "$WPA" == "yes" ]; then Encryption="WPA/RSN" tmp="`grep \#psk $wdir/$ESSID.wpa.conf`" if [ ! -z tmp ]; then PSKEY=`echo $tmp | cut -f 2 -d '='` PSKEY=`echo $PSKEY | cut -f2 -d '"'` echo $PSKEY else tmp="`grep psk $wdir/$ESSID.wpa.conf`" if [ ! -z tmp ]; then PSKEY="`echo $tmp | cut -f 2 -d '='`" echo $tmp fi fi elif [ -z $KEY ]; then Encryption="Plaintext" else Encryption="WEP" fi wizard menuParams menuSave else . $wdir/blankessid.conf NEWESSID="YES" ESSID=$1 while [ 1 ]; do wizard promptDesc MenuEncrypt menuParams menuSave done fi