Fix bashism/non-POSIX usage of $UID.
[grml-network.git] / sbin / grml-network
1 #!/bin/bash
2 # Filename:      grml-network
3 # Purpose:       simple frontend to varous connection tools
4 # Authors:       (c) Klaus Knopper Mar 2004, (c) Michael Prokop <mika@grml.org>
5 # Bug-Reports:   see http://grml.org/bugs/
6 # License:       This file is licensed under the GPL v2.
7 ################################################################################
8
9 PATH="/bin:/sbin:/usr/bin:/usr/sbin:/usr/X11R6/bin:/usr/local/bin"
10 export PATH
11
12 if [ $(id -ru) -ne 0 ] ; then
13   echo 1>&2 "Error: please run this script with uid 0 (root)." ; exit 1
14 fi
15
16 # XDIALOG_HIGH_DIALOG_COMPAT=1
17 # export XDIALOG_HIGH_DIALOG_COMPAT
18
19 CHECK=""
20 [ "$1" = "check" ] && CHECK="yes"
21
22 TMP=$(mktemp)
23
24 bailout(){
25   rm -f "$TMP"
26   exit $1
27 }
28
29 DIALOG="dialog"
30 # [ -n "$DISPLAY" ] && [ -x /usr/bin/Xdialog ] && DIALOG="Xdialog"
31
32 trap bailout 1 2 3 15
33
34 # LANGUAGE etc.
35 [ -r /etc/default/locale ] && . /etc/default/locale
36
37 gauge(){
38   rm -f "$TMP.done"
39   status=0
40   while [ ! -e "$TMP.done" ]; do
41     echo "$status"
42     status="`expr \( 100 - $status \) / 4 + $status`"
43     sleep 1
44   done | $DIALOG --title "$0" --gauge "$1" 8 75 0
45 }
46
47 # Stop status bar
48 killgauge(){
49   touch "$TMP.done" ; wait ; rm -f "$TMP.done"
50 }
51
52 # Provider specific setup - menu
53 provider () {
54   MENUINTERNET=$($DIALOG --stdout --clear --title "$PN" --menu \
55   "This script is a submenu of grml-network to set up an internet connection" 14 65 7 \
56   "TUG"      "Connect via vpnc to TU Graz" \
57   "VCGraz"   "Connect via pptp to VC-Graz" \
58   "Inode"    "Connect via pptp to Inode" \
59   "Students" "Connect via pptp to Inode-Students" \
60   "Exit" "Exit this program")
61
62   retval=$?
63   case $retval in
64       (0)
65         if [ $MENUINTERNET == TUG ] ; then
66                 exec grml-vpnc-tugraz
67         fi
68         if [ $MENUINTERNET == VCGraz ] ; then
69                 exec grml-pptp-vcgraz
70         fi
71         if [ $MENUINTERNET == Inode ] ; then
72                 exec grml-pptp-inode
73         fi
74         if [ $MENUINTERNET == Students ] ; then
75                 exec grml-pptp-xdsl-students
76         fi ;;
77       (1)   echo "Cancel pressed." ;;
78       (255) echo "ESC pressed."    ;;
79   esac
80 }
81
82 main(){
83   if [ -z "$NOCHECK" -a -x /usr/bin/nmap ] ; then
84   gauge "Checking network status..." &
85     STATUS=""
86     GW="`echo $(route -n | awk '/^0\.0\.0\.0/{print $2}')`"
87     GWDEV="`echo $(route -n | awk '/^0\.0\.0\.0/{print $NF}')`"
88     NMAP="$(nmap -sP --host_timeout 4000 --max_rtt_timeout 4000 $GW 2>/dev/null)"
89
90     if [ "$?" = 0 ]; then
91       echo "$NMAP" | grep -q "down" >/dev/null 2>&1 || STATUS="online"
92     fi
93
94     killgauge
95
96     if [ -n "$STATUS" ]; then
97        [ -n "$CHECK" ] && exit 0 # exit if we are already connected
98        STATUS="Online ($GWDEV)"
99     else
100        STATUS="Offline"
101     fi
102   else
103     STATUS="Unknown"
104   fi
105
106 # Language-dependent Messages
107 case "$LANGUAGE" in
108   de*|at*|ch*)
109     TITLE1="Netzwerk-Setup"
110     STATUS="Status: $STATUS"
111     MESSAGE1="Bitte auswaehlen:"
112     MODEMSETUP="/dev/modem-Schnittstelle (neu) konfigurieren"
113     NETCARD="Netzwerkkarten (LAN/WLAN) Konfiguration"
114     WIRELESS="Wireless Zugang"
115     GPRS="Einwahl per Handy/GPRS"
116     DSL="Einwahl per DSL-Modem"
117     ISDN="Einwahl per ISDN"
118     MODEM="Einwahl per Analogmodem"
119     PROVIDER="Provider spezifische Einstellungen"
120     EXIT="Beenden"
121     ;;
122   *)
123     TITLE1="Network Setup"
124     STATUS="Current state: $STATUS"
125     MESSAGE1="Please select:"
126     MODEMSETUP="(re)configure /dev/modem device"
127     NETCARD="Configure network card (LAN/WLAN)"
128     WIRELESS="Wireless access"
129     GPRS="Dial via cellphone/GPRS"
130     DSL="Dial via DSL-adapter"
131     ISDN="Dial via ISDN"
132     MODEM="Dial via analog modem"
133     PROVIDER="Provider specific setup"
134     EXIT="Quit"
135    ;;
136 esac
137
138 # Shortcut description selected
139 TYPES=(netcardconfig "$NETCARD" \
140 provider "$PROVIDER" \
141 modemlink "$MODEMSETUP" \
142 gprsconnect "$GPRS" \
143 pppoeconf "$DSL" \
144 isdnconfig "$ISDN" \
145 wvdial "$MODEM")
146
147 type wvdial      >/dev/null 2>&1 || { unset TYPES[13]; unset TYPES[12]; }
148 type isdnconfig  >/dev/null 2>&1 || { unset TYPES[11]; unset TYPES[10];  }
149 type pppoeconf   >/dev/null 2>&1 || { unset TYPES[9];  unset TYPES[8];  }
150 type gprsconnect >/dev/null 2>&1 || { unset TYPES[7];  unset TYPES[6];  }
151 type modemlink   >/dev/null 2>&1 || { unset TYPES[5];  unset TYPES[4];  }
152
153 rm -f "$TMP"
154
155 $DIALOG --clear --cancel-label "$EXIT" --title "$TITLE1" --menu "$STATUS
156
157 $MESSAGE1" 18 75 10 "${TYPES[@]}" 2>"$TMP" || bailout 1
158
159 read TYPE <"$TMP"
160 TYPE="${TYPE#\"}"; TYPE="${TYPE%\"}"
161 rm -f "$TMP"
162
163 case "$TYPE" in
164   wvdial) [ -e /etc/wvdial.conf ] || wvdialconf /etc/wvdial.conf ;;
165 esac
166
167 eval $TYPE
168 return "$?"
169 }
170
171 if [ -z "$NOCHECK" ] ; then
172   while true; do
173     main
174   done
175 else
176   main
177 fi
178
179 ## END OF FILE #################################################################