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 |
||
535.1.8
by teddy at recompile
* network-hooks.s/bridge: Don't use interface names directly; search |
23 |
addrtoif(){
|
24 |
grep -liFe "$1" /sys/class/net/*/address | sed -e 's,.*/\([^/]*\)/[^/]*,\1,' |
|
25 |
}
|
|
26 |
||
535.1.1
by teddy at recompile
Add wireless network hook |
27 |
# Read config file
|
28 |
if [ -e "$CONFIG" ]; then |
|
29 |
. "$CONFIG" |
|
30 |
else
|
|
31 |
exit |
|
32 |
fi
|
|
33 |
||
535.1.8
by teddy at recompile
* network-hooks.s/bridge: Don't use interface names directly; search |
34 |
ifkeys="`env | sed -n -e 's/^ADDRESS_\([^=]*\)=.*/\1/p' \"$CONFIG\" | sort -u`" |
535.1.1
by teddy at recompile
Add wireless network hook |
35 |
|
36 |
# Exit if DEVICE is set and is not any of the wireless interfaces
|
|
37 |
if [ -n "$DEVICE" ]; then |
|
38 |
while :; do |
|
535.1.8
by teddy at recompile
* network-hooks.s/bridge: Don't use interface names directly; search |
39 |
for KEY in $ifkeys; do |
40 |
ADDRESS=`eval 'echo "$ADDRESS_'"$KEY"\"` |
|
41 |
INTERFACE=`addrtoif "$ADDRESS"` |
|
42 |
if [ "$INTERFACE" = "$DEVICE" ]; then |
|
535.1.1
by teddy at recompile
Add wireless network hook |
43 |
break 2 |
44 |
fi |
|
45 |
done |
|
46 |
exit |
|
47 |
done |
|
48 |
fi
|
|
49 |
||
50 |
wpa_supplicant=/sbin/wpa_supplicant |
|
51 |
wpa_cli=/sbin/wpa_cli |
|
52 |
ip=/bin/ip |
|
53 |
||
54 |
# Used by the wpa_interface_* functions in the wireless.conf file
|
|
55 |
wpa_cli_set(){
|
|
56 |
case "$1" in |
|
57 |
ssid|psk) arg="\"$2\"" ;; |
|
58 |
*) arg="$2" ;; |
|
59 |
esac |
|
60 |
"$wpa_cli" -p "$CTRLDIR" -i "$INTERFACE" set_network "$NETWORK" \ |
|
61 |
"$1" "$arg" 2>&1 | sed -e '/^OK$/d' |
|
62 |
}
|
|
63 |
||
64 |
if [ $VERBOSITY -gt 0 ]; then |
|
65 |
WPAS_OPTIONS="-d $WPAS_OPTIONS" |
|
66 |
fi
|
|
67 |
if [ -n "$PIDFILE" ]; then |
|
68 |
WPAS_OPTIONS="-P$PIDFILE $WPAS_OPTIONS" |
|
69 |
fi
|
|
70 |
||
71 |
case "${MODE:-$1}" in |
|
72 |
start) |
|
73 |
mkdir -m u=rwx,go= -p "$CTRLDIR" |
|
74 |
"$wpa_supplicant" -B -g "$CTRL" -p "$CTRLDIR" $WPAS_OPTIONS |
|
535.1.8
by teddy at recompile
* network-hooks.s/bridge: Don't use interface names directly; search |
75 |
for KEY in $ifkeys; do |
76 |
ADDRESS=`eval 'echo "$ADDRESS_'"$KEY"\"` |
|
77 |
INTERFACE=`addrtoif "$ADDRESS"` |
|
78 |
DRIVER=`eval 'echo "$WPA_DRIVER_'"$KEY"\"` |
|
79 |
IFDELAY=`eval 'echo "$DELAY_'"$KEY"\"` |
|
535.1.1
by teddy at recompile
Add wireless network hook |
80 |
"$wpa_cli" -g "$CTRL" interface_add "$INTERFACE" "" \ |
81 |
"${DRIVER:-wext}" "$CTRLDIR" > /dev/null \ |
|
82 |
| sed -e '/^OK$/d' |
|
83 |
NETWORK=`"$wpa_cli" -p "$CTRLDIR" -i "$INTERFACE" add_network` |
|
535.1.8
by teddy at recompile
* network-hooks.s/bridge: Don't use interface names directly; search |
84 |
eval wpa_interface_"$KEY" |
535.1.1
by teddy at recompile
Add wireless network hook |
85 |
"$wpa_cli" -p "$CTRLDIR" -i "$INTERFACE" enable_network \ |
86 |
"$NETWORK" | sed -e '/^OK$/d' |
|
535.1.5
by Teddy Hogeborn
* network-hooks.d/wireless (start): Bug fix: background "sleep" |
87 |
sleep "${IFDELAY:-$DELAY}" & |
535.1.1
by teddy at recompile
Add wireless network hook |
88 |
sleep=$! |
89 |
while :; do |
|
535.1.3
by Teddy Hogeborn
* network-hooks.d/wireless (start): Bug fixes: Don't shadow "$DELAY". |
90 |
kill -0 $sleep 2>/dev/null || break |
535.1.1
by teddy at recompile
Add wireless network hook |
91 |
STATE=`"$wpa_cli" -p "$CTRLDIR" -i "$INTERFACE" status | sed -n -e 's/^wpa_state=//p'` |
92 |
if [ "$STATE" = COMPLETED ]; then |
|
535.1.7
by teddy at recompile
* network-hooks.s/wireless (start): Wait until interface is up. |
93 |
while :; do |
94 |
kill -0 $sleep 2>/dev/null || break 2 |
|
95 |
UP=`cat /sys/class/net/"$INTERFACE"/operstate` |
|
96 |
if [ "$UP" = up ]; then |
|
97 |
kill $sleep 2>/dev/null |
|
98 |
break 2 |
|
99 |
fi |
|
100 |
sleep 1 |
|
101 |
done |
|
535.1.1
by teddy at recompile
Add wireless network hook |
102 |
fi |
103 |
sleep 1 |
|
104 |
done & |
|
105 |
wait $sleep || : |
|
535.1.8
by teddy at recompile
* network-hooks.s/bridge: Don't use interface names directly; search |
106 |
IPADDRS=`eval 'echo "$IPADDRS_'"$KEY"\"` |
535.1.1
by teddy at recompile
Add wireless network hook |
107 |
if [ -n "$IPADDRS" ]; then |
108 |
if [ "$IPADDRS" = dhcp ]; then |
|
109 |
ipconfig -c dhcp -d "$INTERFACE" || : |
|
110 |
#dhclient "$INTERFACE" |
|
111 |
else |
|
112 |
for ipaddr in $IPADDRS; do |
|
113 |
"$ip" addr add "$ipaddr" dev "$INTERFACE" |
|
114 |
done |
|
115 |
fi |
|
116 |
fi |
|
535.1.8
by teddy at recompile
* network-hooks.s/bridge: Don't use interface names directly; search |
117 |
ROUTES=`eval 'echo "$ROUTES_'"$KEY"\"` |
535.1.1
by teddy at recompile
Add wireless network hook |
118 |
if [ -n "$ROUTES" ]; then |
119 |
for route in $ROUTES; do |
|
120 |
"$ip" route add "$route" dev "$BRIDGE" |
|
121 |
done |
|
122 |
fi |
|
123 |
done |
|
124 |
;; |
|
125 |
stop) |
|
126 |
"$wpa_cli" -g "$CTRL" terminate 2>&1 | sed -e '/^OK$/d' |
|
535.1.8
by teddy at recompile
* network-hooks.s/bridge: Don't use interface names directly; search |
127 |
for KEY in $ifkeys; do |
128 |
ADDRESS=`eval 'echo "$ADDRESS_'"$KEY"\"` |
|
129 |
INTERFACE=`addrtoif "$ADDRESS"` |
|
535.1.1
by teddy at recompile
Add wireless network hook |
130 |
"$ip" addr show scope global permanent dev "$INTERFACE" \ |
131 |
| while read type addr rest; do |
|
132 |
case "$type" in |
|
133 |
inet|inet6) |
|
134 |
"$ip" addr del "$addr" dev "$INTERFACE" |
|
135 |
;; |
|
136 |
esac |
|
137 |
done |
|
138 |
"$ip" link set dev "$INTERFACE" down |
|
139 |
done |
|
140 |
;; |
|
141 |
files) |
|
142 |
echo "$wpa_supplicant" |
|
143 |
echo "$wpa_cli" |
|
144 |
echo "$ip" |
|
145 |
;; |
|
146 |
modules) |
|
147 |
if [ "$IPADDRS" = dhcp ]; then |
|
148 |
echo af_packet |
|
149 |
fi |
|
535.1.3
by Teddy Hogeborn
* network-hooks.d/wireless (start): Bug fixes: Don't shadow "$DELAY". |
150 |
sed -n -e 's/#.*$//' -e 's/[ ]*$//' \ |
151 |
-e 's/^MODULE_[^=]\+=//p' "$CONFIG" |
|
535.1.1
by teddy at recompile
Add wireless network hook |
152 |
;; |
153 |
esac
|