/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: 2011-12-31 20:07:11 UTC
  • mfrom: (535.1.9 wireless-network-hook)
  • Revision ID: teddy@recompile.se-20111231200711-6dli3r8drftem57r
Merge new wireless network hook.  Fix bridge network hook to use
hardware addresses instead of interface names.  Implement and document
new "CONNECT" environment variable for network hooks.

Show diffs side-by-side

added added

removed removed

Lines of Context:
6
6
# configuration file(s) should be copied into the
7
7
# /etc/mandos/network-hooks.d directory.
8
8
9
 
# Copyright © 2012 Teddy Hogeborn
10
 
# Copyright © 2012 Björn Påhlsson
11
 
12
9
# Copying and distribution of this file, with or without modification,
13
10
# are permitted in any medium without royalty provided the copyright
14
11
# notice and this notice are preserved.  This file is offered as-is,
73
70
    WPAS_OPTIONS="-P$PIDFILE $WPAS_OPTIONS"
74
71
fi
75
72
 
76
 
do_start(){
77
 
    mkdir -m u=rwx,go= -p "$CTRLDIR"
78
 
    "$wpa_supplicant" -B -g "$CTRL" -p "$CTRLDIR" $WPAS_OPTIONS
79
 
    for KEY in $ifkeys; do
80
 
        ADDRESS=`eval 'echo "$ADDRESS_'"$KEY"\"`
81
 
        INTERFACE=`addrtoif "$ADDRESS"`
82
 
        DRIVER=`eval 'echo "$WPA_DRIVER_'"$KEY"\"`
83
 
        IFDELAY=`eval 'echo "$DELAY_'"$KEY"\"`
84
 
        "$wpa_cli" -g "$CTRL" interface_add "$INTERFACE" "" \
85
 
            "${DRIVER:-wext}" "$CTRLDIR" > /dev/null \
86
 
            | sed -e '/^OK$/d'
87
 
        NETWORK=`"$wpa_cli" -p "$CTRLDIR" -i "$INTERFACE" add_network`
88
 
        eval wpa_interface_"$KEY"
89
 
        "$wpa_cli" -p "$CTRLDIR" -i "$INTERFACE" enable_network \
90
 
            "$NETWORK" | sed -e '/^OK$/d'
91
 
        sleep "${IFDELAY:-$DELAY}" &
92
 
        sleep=$!
93
 
        while :; do
94
 
            kill -0 $sleep 2>/dev/null || break
95
 
            STATE=`"$wpa_cli" -p "$CTRLDIR" -i "$INTERFACE" status \
96
 
                | sed -n -e 's/^wpa_state=//p'`
97
 
            if [ "$STATE" = COMPLETED ]; then
98
 
                while :; do
99
 
                    kill -0 $sleep 2>/dev/null || break 2
100
 
                    UP=`cat /sys/class/net/"$INTERFACE"/operstate`
101
 
                    if [ "$UP" = up ]; then
102
 
                        kill $sleep 2>/dev/null
103
 
                        break 2
104
 
                    fi
105
 
                    sleep 1
106
 
                done
107
 
            fi
108
 
            sleep 1
109
 
        done &
110
 
        wait $sleep || :
111
 
        IPADDRS=`eval 'echo "$IPADDRS_'"$KEY"\"`
112
 
        if [ -n "$IPADDRS" ]; then
113
 
            if [ "$IPADDRS" = dhcp ]; then
114
 
                ipconfig -c dhcp -d "$INTERFACE" || :
115
 
                #dhclient "$INTERFACE"
116
 
            else
117
 
                for ipaddr in $IPADDRS; do
118
 
                    "$ip" addr add "$ipaddr" dev "$INTERFACE"
119
 
                done
120
 
            fi
121
 
        fi
122
 
        ROUTES=`eval 'echo "$ROUTES_'"$KEY"\"`
123
 
        if [ -n "$ROUTES" ]; then
124
 
            for route in $ROUTES; do
125
 
                "$ip" route add "$route" dev "$BRIDGE"
126
 
            done
127
 
        fi
128
 
    done
129
 
}
130
 
 
131
 
do_stop(){
132
 
    "$wpa_cli" -g "$CTRL" terminate 2>&1 | sed -e '/^OK$/d'
133
 
    for KEY in $ifkeys; do
134
 
        ADDRESS=`eval 'echo "$ADDRESS_'"$KEY"\"`
135
 
        INTERFACE=`addrtoif "$ADDRESS"`
136
 
        "$ip" addr show scope global permanent dev "$INTERFACE" \
137
 
            | while read type addr rest; do
 
73
case "${MODE:-$1}" in
 
74
    start)
 
75
        mkdir -m u=rwx,go= -p "$CTRLDIR"
 
76
        "$wpa_supplicant" -B -g "$CTRL" -p "$CTRLDIR" $WPAS_OPTIONS
 
77
        for KEY in $ifkeys; do
 
78
            ADDRESS=`eval 'echo "$ADDRESS_'"$KEY"\"`
 
79
            INTERFACE=`addrtoif "$ADDRESS"`
 
80
            DRIVER=`eval 'echo "$WPA_DRIVER_'"$KEY"\"`
 
81
            IFDELAY=`eval 'echo "$DELAY_'"$KEY"\"`
 
82
            "$wpa_cli" -g "$CTRL" interface_add "$INTERFACE" "" \
 
83
                "${DRIVER:-wext}" "$CTRLDIR" > /dev/null \
 
84
                | sed -e '/^OK$/d'
 
85
            NETWORK=`"$wpa_cli" -p "$CTRLDIR" -i "$INTERFACE" \
 
86
                add_network`
 
87
            eval wpa_interface_"$KEY"
 
88
            "$wpa_cli" -p "$CTRLDIR" -i "$INTERFACE" enable_network \
 
89
                "$NETWORK" | sed -e '/^OK$/d'
 
90
            sleep "${IFDELAY:-$DELAY}" &
 
91
            sleep=$!
 
92
            while :; do
 
93
                kill -0 $sleep 2>/dev/null || break
 
94
                STATE=`"$wpa_cli" -p "$CTRLDIR" -i "$INTERFACE" \
 
95
                    status | sed -n -e 's/^wpa_state=//p'`
 
96
                if [ "$STATE" = COMPLETED ]; then
 
97
                    while :; do
 
98
                        kill -0 $sleep 2>/dev/null || break 2
 
99
                        UP=`cat /sys/class/net/"$INTERFACE"/operstate`
 
100
                        if [ "$UP" = up ]; then
 
101
                            kill $sleep 2>/dev/null
 
102
                            break 2
 
103
                        fi
 
104
                        sleep 1
 
105
                    done
 
106
                fi
 
107
                sleep 1
 
108
            done &
 
109
            wait $sleep || :
 
110
            IPADDRS=`eval 'echo "$IPADDRS_'"$KEY"\"`
 
111
            if [ -n "$IPADDRS" ]; then
 
112
                if [ "$IPADDRS" = dhcp ]; then
 
113
                    ipconfig -c dhcp -d "$INTERFACE" || :
 
114
                    #dhclient "$INTERFACE"
 
115
                else
 
116
                    for ipaddr in $IPADDRS; do
 
117
                        "$ip" addr add "$ipaddr" dev "$INTERFACE"
 
118
                    done
 
119
                fi
 
120
            fi
 
121
            ROUTES=`eval 'echo "$ROUTES_'"$KEY"\"`
 
122
            if [ -n "$ROUTES" ]; then
 
123
                for route in $ROUTES; do
 
124
                    "$ip" route add "$route" dev "$BRIDGE"
 
125
                done
 
126
            fi
 
127
        done
 
128
        ;;
 
129
    stop)
 
130
        "$wpa_cli" -g "$CTRL" terminate 2>&1 | sed -e '/^OK$/d'
 
131
        for KEY in $ifkeys; do
 
132
            ADDRESS=`eval 'echo "$ADDRESS_'"$KEY"\"`
 
133
            INTERFACE=`addrtoif "$ADDRESS"`
 
134
            "$ip" addr show scope global permanent dev "$INTERFACE" \
 
135
                | while read type addr rest; do
138
136
                case "$type" in
139
137
                    inet|inet6)
140
138
                        "$ip" addr del "$addr" dev "$INTERFACE"
141
139
                        ;;
142
140
                esac
143
141
            done
144
 
        "$ip" link set dev "$INTERFACE" down
145
 
    done
146
 
}
147
 
 
148
 
case "${MODE:-$1}" in
149
 
    start|stop)
150
 
        do_"${MODE:-$1}"
 
142
            "$ip" link set dev "$INTERFACE" down
 
143
        done
151
144
        ;;
152
145
    files)
153
146
        echo "$wpa_supplicant"