5b84bec2b94cbfa9f12f1b99a8ab26d97b50393b
[grml-scripts.git] / usr_sbin / grml-pptp-xdsl-students
1 #!/bin/sh
2 # Filename:      grml-pptp-xdsl-students
3 # Purpose:       connect via pptp to inode ["students-setup"] (www.inode.at)
4 # Authors:       grml-team (grml.org), (c) Martin Hecher <hecka@grml.org>
5 # Bug-Reports:   see http://grml.org/bugs/
6 # License:       This file is licensed under the GPL v2.
7 # Latest change: Sun Jan 15 16:19:24 CET 2006 [mika]
8 ################################################################################
9
10 ################################################################################
11 # Notes:
12 # This script is based on 'knoppix-pptp' (version 0.3.1)
13 # by Wolfgang Scheicher
14 # and based on grml-pptp-inode
15 # by Andreas 'Jimmy' Gredler
16 ################################################################################
17
18 LANG=C
19 DIALOG="dialog"
20
21 if [ "$UID" != 0 ];  then
22   sudo $0
23   exit
24 fi
25
26 setroute()
27 {
28 set $(grep "option routers" /var/lib/dhcp3/dhclient.leases | tail -1 | cut -f5 -d' ' | tr -d ";")
29
30 ROUTER="$1"
31 ANT="10.0.0.138"
32
33 if route -n | grep $ANT >>/dev/null
34   then
35     /sbin/route del $ANT
36   fi
37
38 /sbin/route add $ANT gw $ROUTER
39
40 if ifconfig | grep ppp0 >>/dev/null
41    then
42       set $(ifconfig ppp0 | grep P-t-P | tr -s [:blank:] | cut -f4 -d' ' | cut -b7-)
43       GATEWAY="$1"
44       /sbin/route del default
45       /sbin/route add default gw $GATEWAY
46       exit 0
47    fi
48 }
49
50 runit(){
51
52 /sbin/dhclient ${NET_DEVICE}
53
54 echo "name ${VPNUSERNAME}" > /etc/ppp/peers/inode
55 cat >> /etc/ppp/peers/inode << "EOF"
56 remotename XDSL
57 defaultroute
58 noipdefault
59 noauth
60 persist
61 logfile /var/log/pptp.log
62
63 EOF
64
65 echo "${VPNUSERNAME} XDSL ${VPNPASSWORD} *" >> /etc/ppp/pap-secrets
66 chmod 0600 /etc/ppp/pap-secrets
67
68 echo -e "#!/bin/sh\nLANG=C\nVPNSERVER=\"${VPNSERVER}\"\n" > /etc/init.d/pptp
69
70 cat >> /etc/init.d/pptp << "EOF"
71
72 PPTP="/usr/sbin/pptp $VPNSERVER call inode"
73
74 case "$1" in
75   start)
76       echo "Starting up XDSL: pptp"
77       start-stop-daemon --start --exec $PPTP
78       if [ $? == 0 ]; then
79         echo "."
80       fi
81     ;;
82   stop)
83       echo "Shutting down XDSL: pptp"
84       start-stop-daemon --stop --exec $PPTP
85       if [ $? == 0 ]; then
86         /sbin/route del -host $VPNSERVER
87         /sbin/route add default gw $GATEWAY
88         echo "."
89       fi
90     ;;
91   reconnect)
92     echo -n "Reconnecting XDSL: pptd"
93     start-stop-daemon --start --exec $PPTP
94     echo "."
95     ;;
96   *)
97       echo "Usage: /etc/init.d/pptp {start|stop|reconnect}"
98       exit 1
99     ;;
100 esac
101
102 exit 0
103 EOF
104
105 chmod +x /etc/init.d/pptp
106 touch /var/log/pptp.log
107 /etc/init.d/pptp start
108 $DIALOG --title "Information" --no-cancel --msgbox "Please click OK and wait until remote IP is assigned." 0 0
109 $DIALOG --title "PPTP Log" --no-cancel --tailbox /var/log/pptp.log 0 0
110 }
111
112 [ -n "$VPNSERVER"   ] || VPNSERVER="10.0.0.138"
113 [ -n "$VPNUSERNAME" ] || VPNUSERNAME="$(cat /etc/ppp/pap-secrets | grep XDSL | cut -d " " -f1)"
114 [ -n "$VPNPASSWORD" ] || VPNPASSWORD="$(cat /etc/ppp/pap-secrets | grep XDSL | cut -d " " -f3)"
115
116 if [ -z "$VPNUSERNAME" ] || [ -z "$VPNPASSWORD" ] ; then
117
118   COMMAND1=$($DIALOG --stdout --title "Inode XDSL Graz" --inputbox \
119   "Account name (e.g. grml@tug):" 0 35) || exit 0
120   COMMAND2=$($DIALOG --stdout --title "Inode XDSL Graz" --passwordbox "Account password (hidden typing):" 0 40) || exit 0
121
122   TMP=$(mktemp)
123
124   bailout(){
125   rm -f "$TMP"
126   exit $1
127   }
128
129   NETDEVICES="$(cat /proc/net/dev | awk -F: '/[0-9]:/{print $1}')"
130
131   wireless(){
132    case "$(cat /proc/net/wireless 2>/dev/null)" in *$1*) return 0;; esac
133    # Card exists but is not configured yet
134    [ -n "$(iwconfig $1 2>/dev/null | head -1)" ] && return 0
135    return 1
136   }
137
138   if [ -z "$NETDEVICES" ]; then
139     $DIALOG --msgbox "No network devices found." 15 45
140     bailout
141   fi
142
143   count="$(echo "$NETDEVICES" | wc -w)"
144
145   if [ "$count" -gt 1 ]; then
146     DEVICELIST=""
147     for DEVICE in $NETDEVICES; do
148       wireless "$DEVICE" && DEVICELIST="$DEVICELIST ${DEVICE} Wireless" || DEVICELIST="$DEVICELIST ${DEVICE} LAN"
149     done
150     rm -f "$TMP"
151     $DIALOG --menu "Network device to connect from:" 18 45 12 $DEVICELIST 2>"$TMP" || bailout
152     read NET_DEVICE <"$TMP" ; rm -f "$TMP"
153     else
154     # Remove additional spaces
155     NET_DEVICE="$(echo $NETDEVICES)"
156   fi
157
158   VPNUSERNAME=${COMMAND1%/*}
159   VPNPASSWORD=${COMMAND2#*/}
160   [ ! -z "$VPNUSERNAME" ] || exit 1
161   [ ! -z "$VPNPASSWORD" ] || exit 1
162   [ ! -z "$NET_DEVICE" ] || exit 1
163   runit
164   setroute
165 else
166   $DIALOG --title "Inode XDSL Graz" --msgbox "Found already configured
167   account.\nIf the settings are wrong, delete the entries in
168   /etc/ppp/pap-secrets" 10 45
169   runit
170 fi
171
172 ## END OF FILE #################################################################