/mandos/trunk

To get this branch, use:
bzr branch http://bzr.recompile.se/loggerhead/mandos/trunk

« back to all changes in this revision

Viewing changes to network-hooks.d/wireless

  • Committer: Teddy Hogeborn
  • Date: 2008-08-02 10:48:24 UTC
  • Revision ID: teddy@fukt.bsnet.se-20080802104824-fx0miwp9o4g9r31e
* plugbasedclient.c (struct process): New fields "eof", "completed",
                                      and "status".
  (handle_sigchld): New function.
  (main): Initialize "dir" to NULL to only closedir() it if necessary.
          Move "process_list" to be a global variable to be accessible
          by "handle_sigchld".  Make "handle_sigchld" handle SIGCHLD.
          Remove redundant check for NULL "dir".  Free "filename" when
          no longer used.  Block SIGCHLD around fork()/exec().
          Restore normal signals in child.  Only loop while running
          processes exist.  Print process buffer when the process is
          done and it has emitted EOF, not when it only emits EOF.
          Remove processes from list which exit non-cleanly.  In
          cleaning up, closedir() if necessary.  Bug fix: set next
          pointer correctly when freeing process list.

* plugins.d/passprompt.c (main): Do not ignore SIGQUIT.

Show diffs side-by-side

added added

removed removed

Lines of Context:
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