bzr branch
http://bzr.recompile.se/loggerhead/mandos/trunk
535.1.1
by teddy at recompile
Add wireless network hook |
1 |
#!/bin/sh
|
2 |
#
|
|
3 |
# This is an example of a Mandos client network hook. This hook
|
|
4 |
# brings up a wireless interface as specified in a separate
|
|
5 |
# configuration file. To be used, this file and any needed
|
|
6 |
# configuration file(s) should be copied into the
|
|
7 |
# /etc/mandos/network-hooks.d directory.
|
|
8 |
#
|
|
9 |
# Copying and distribution of this file, with or without modification,
|
|
10 |
# are permitted in any medium without royalty provided the copyright
|
|
11 |
# notice and this notice are preserved. This file is offered as-is,
|
|
12 |
# without any warranty.
|
|
13 |
||
14 |
set -e |
|
15 |
||
16 |
RUNDIR="/run" |
|
17 |
CTRL="$RUNDIR/wpa_supplicant-global" |
|
18 |
CTRLDIR="$RUNDIR/wpa_supplicant" |
|
19 |
PIDFILE="$RUNDIR/wpa_supplicant-mandos.pid" |
|
20 |
||
21 |
CONFIG="$MANDOSNETHOOKDIR/wireless.conf" |
|
22 |
||
23 |
# Read config file
|
|
24 |
if [ -e "$CONFIG" ]; then |
|
25 |
. "$CONFIG" |
|
26 |
else
|
|
27 |
exit |
|
28 |
fi
|
|
29 |
||
30 |
interfaces="`env|sed -n -e 's/^\(MODULE\|IPADDRS\|ROUTES\|WPA_DRIVER\)_\([^=]*\)=.*/\2/p' \"$CONFIG\" |sort -u`" |
|
31 |
||
32 |
# Exit if DEVICE is set and is not any of the wireless interfaces
|
|
33 |
if [ -n "$DEVICE" ]; then |
|
34 |
while :; do |
|
35 |
for IF in $interfaces; do |
|
36 |
if [ "$IF" = "$DEVICE" ]; then |
|
37 |
break 2 |
|
38 |
fi |
|
39 |
done |
|
40 |
exit |
|
41 |
done |
|
42 |
fi
|
|
43 |
||
44 |
wpa_supplicant=/sbin/wpa_supplicant |
|
45 |
wpa_cli=/sbin/wpa_cli |
|
46 |
ip=/bin/ip |
|
47 |
||
48 |
# Used by the wpa_interface_* functions in the wireless.conf file
|
|
49 |
wpa_cli_set(){
|
|
50 |
case "$1" in |
|
51 |
ssid|psk) arg="\"$2\"" ;; |
|
52 |
*) arg="$2" ;; |
|
53 |
esac |
|
54 |
"$wpa_cli" -p "$CTRLDIR" -i "$INTERFACE" set_network "$NETWORK" \ |
|
55 |
"$1" "$arg" 2>&1 | sed -e '/^OK$/d' |
|
56 |
}
|
|
57 |
||
58 |
if [ $VERBOSITY -gt 0 ]; then |
|
59 |
WPAS_OPTIONS="-d $WPAS_OPTIONS" |
|
60 |
fi
|
|
61 |
if [ -n "$PIDFILE" ]; then |
|
62 |
WPAS_OPTIONS="-P$PIDFILE $WPAS_OPTIONS" |
|
63 |
fi
|
|
64 |
||
65 |
case "${MODE:-$1}" in |
|
66 |
start) |
|
67 |
mkdir -m u=rwx,go= -p "$CTRLDIR" |
|
68 |
"$wpa_supplicant" -B -g "$CTRL" -p "$CTRLDIR" $WPAS_OPTIONS |
|
69 |
for INTERFACE in $interfaces; do |
|
70 |
DRIVER=`eval 'echo "$WPA_DRIVER_'"$INTERFACE"\"` |
|
71 |
DELAY=`eval 'echo "$DELAY_'"$INTERFACE"\"` |
|
72 |
"$wpa_cli" -g "$CTRL" interface_add "$INTERFACE" "" \ |
|
73 |
"${DRIVER:-wext}" "$CTRLDIR" > /dev/null \ |
|
74 |
| sed -e '/^OK$/d' |
|
75 |
NETWORK=`"$wpa_cli" -p "$CTRLDIR" -i "$INTERFACE" add_network` |
|
76 |
eval wpa_interface_"$INTERFACE" |
|
77 |
"$wpa_cli" -p "$CTRLDIR" -i "$INTERFACE" enable_network \ |
|
78 |
"$NETWORK" | sed -e '/^OK$/d' |
|
79 |
( sleep "${DELAY:-$DELAY}" || : ) & |
|
80 |
sleep=$! |
|
81 |
while :; do |
|
82 |
kill -0 $sleep || break |
|
83 |
STATE=`"$wpa_cli" -p "$CTRLDIR" -i "$INTERFACE" status | sed -n -e 's/^wpa_state=//p'` |
|
84 |
if [ "$STATE" = COMPLETED ]; then |
|
85 |
kill $sleep |
|
86 |
break |
|
87 |
fi |
|
88 |
sleep 1 |
|
89 |
done & |
|
90 |
wait $sleep || : |
|
91 |
IPADDRS=`eval 'echo "$IPADDRS_'"$INTERFACE"\"` |
|
92 |
if [ -n "$IPADDRS" ]; then |
|
93 |
if [ "$IPADDRS" = dhcp ]; then |
|
94 |
ipconfig -c dhcp -d "$INTERFACE" || : |
|
95 |
#dhclient "$INTERFACE" |
|
96 |
else |
|
97 |
for ipaddr in $IPADDRS; do |
|
98 |
"$ip" addr add "$ipaddr" dev "$INTERFACE" |
|
99 |
done |
|
100 |
fi |
|
101 |
fi |
|
102 |
ROUTES=`eval 'echo "$ROUTES_'"$INTERFACE"\"` |
|
103 |
if [ -n "$ROUTES" ]; then |
|
104 |
for route in $ROUTES; do |
|
105 |
"$ip" route add "$route" dev "$BRIDGE" |
|
106 |
done |
|
107 |
fi |
|
108 |
done |
|
109 |
;; |
|
110 |
stop) |
|
111 |
"$wpa_cli" -g "$CTRL" terminate 2>&1 | sed -e '/^OK$/d' |
|
112 |
for INTERFACE in $interfaces; do |
|
113 |
"$ip" addr show scope global permanent dev "$INTERFACE" \ |
|
114 |
| while read type addr rest; do |
|
115 |
case "$type" in |
|
116 |
inet|inet6) |
|
117 |
"$ip" addr del "$addr" dev "$INTERFACE" |
|
118 |
;; |
|
119 |
esac |
|
120 |
done |
|
121 |
"$ip" link set dev "$INTERFACE" down |
|
122 |
done |
|
123 |
;; |
|
124 |
files) |
|
125 |
echo "$wpa_supplicant" |
|
126 |
echo "$wpa_cli" |
|
127 |
echo "$ip" |
|
128 |
;; |
|
129 |
modules) |
|
130 |
if [ "$IPADDRS" = dhcp ]; then |
|
131 |
echo af_packet |
|
132 |
fi |
|
133 |
sed -n -e 's/#.*$//' -e 's/[ ]*$//' -e 's/^MODULE=//p' \ |
|
134 |
"$CONFIG" |
|
135 |
;; |
|
136 |
esac
|