Ticket #31625: down.sh

File down.sh, 3.3 KB (added by mmpestorich (Mike M Pestorich), 13 years ago)
Line 
1#!/bin/bash -e
2
3trap "" TSTP
4trap "" HUP
5trap "" INT
6
7export PATH="/bin:/sbin:/usr/sbin:/usr/bin"
8
9readonly LOG_MESSAGE_COMMAND=$(basename "${0}")
10
11# Quick check - is the configuration there?
12if ! scutil -w State:/Network/OpenVPN &>/dev/null -t 1 ; then
13        # Configuration isn't there, so we forget it
14        echo "$(date '+%a %b %e %T %Y') *OpenVPN $LOG_MESSAGE_COMMAND: WARNING: No existing OpenVPN DNS configuration found; not tearing down anything; exiting."
15        exit 0
16fi
17
18# Get info saved by the up script
19OPENVPN_CONFIG="$(/usr/sbin/scutil <<-EOF
20        open
21        show State:/Network/OpenVPN
22        quit
23EOF)"
24
25MONITOR_NETWORK="$(echo "${OPENVPN_CONFIG}" | grep -i '^[[:space:]]*MonitorNetwork :' | sed -e 's/^.*: //g')"
26WATCHER_PLIST="$(echo "${OPENVPN_CONFIG}" | grep -i '^[[:space:]]*WatcherPlist :' | sed -e 's/^.*: //g')"
27PRIMARY_SERVICE_ID="$(echo "${OPENVPN_CONFIG}" | grep -i '^[[:space:]]*Service :' | sed -e 's/^.*: //g')"
28SCRIPT_LOG_FILE="$(echo "${OPENVPN_CONFIG}" | grep -i '^[[:space:]]*ScriptLogFile :' | sed -e 's/^.*: //g')"
29IS_TAP="$(echo "${OPENVPN_CONFIG}" | grep -i '^[[:space:]]*IsTapInterface :' | sed -e 's/^.*: //g')"
30bRouteGatewayIsDhcp="$(echo "${OPENVPN_CONFIG}" | grep -i '^[[:space:]]*RouteGatewayIsDhcp :' | sed -e 's/^.*: //g')"
31
32# @param String message - The message to log
33logMessage()
34{
35        echo "$(date '+%a %b %e %T %Y') *OpenVPN $LOG_MESSAGE_COMMAND: "${@} >> "${SCRIPT_LOG_FILE}"
36}
37
38trim()
39{
40        echo ${@}
41}
42
43if ${IS_TAP} ; then
44        if [ "$bRouteGatewayIsDhcp" == "true" ]; then
45                if [ -z "$dev" ]; then
46                        logMessage "Cannot configure TAP interface for DHCP without \$dev being defined. Device may not have disconnected properly."
47                else
48                        set +e
49                        ipconfig set "$dev" NONE 2>/dev/null
50                        set -e
51                fi
52        fi
53fi
54
55# Issue warning if the primary service ID has changed
56PRIMARY_SERVICE_ID_CURRENT="$( (scutil | grep Service | sed -e 's/.*Service : //')<<- EOF
57        open
58        show State:/Network/OpenVPN
59        quit
60EOF)"
61if [ "${PRIMARY_SERVICE_ID}" != "${PRIMARY_SERVICE_ID_CURRENT}" ] ; then
62        logMessage "Ignoring change of Network Primary Service from ${PRIMARY_SERVICE_ID} to ${PRIMARY_SERVICE_ID_CURRENT}"
63fi
64
65# Remove leasewatcher
66if ${MONITOR_NETWORK} ; then
67        launchctl unload "${WATCHER_PLIST}"
68        logMessage "Cancelled monitoring of system configuration changes"
69fi
70
71# Restore configurations
72DNS_OLD="$(/usr/sbin/scutil <<-EOF
73        open
74        show State:/Network/OpenVPN/OldDNS
75        quit
76EOF)"
77WINS_OLD="$(/usr/sbin/scutil <<-EOF
78        open
79        show State:/Network/OpenVPN/OldSMB
80        quit
81EOF)"
82NO_SUCH_KEY="<dictionary> {
83  NoSuchKey : true
84}"
85
86if [ "${DNS_OLD}" = "${NO_SUCH_KEY}" ] ; then
87        scutil <<- EOF
88                open
89                remove State:/Network/Service/${PRIMARY_SERVICE_ID}/DNS
90                quit
91EOF
92else
93        scutil <<- EOF
94                open
95                get State:/Network/OpenVPN/OldDNS
96                set State:/Network/Service/${PRIMARY_SERVICE_ID}/DNS
97                quit
98EOF
99fi
100
101if [ "${WINS_OLD}" = "${NO_SUCH_KEY}" ] ; then
102        scutil <<- EOF
103                open
104                remove State:/Network/Service/${PRIMARY_SERVICE_ID}/SMB
105                quit
106EOF
107else
108        scutil <<- EOF
109                open
110                get State:/Network/OpenVPN/OldSMB
111                set State:/Network/Service/${PRIMARY_SERVICE_ID}/SMB
112                quit
113EOF
114fi
115
116logMessage "Restored the DNS and WINS configurations"
117
118# Remove our system configuration data
119scutil <<- EOF
120        open
121        remove State:/Network/OpenVPN/SMB
122        remove State:/Network/OpenVPN/DNS
123        remove State:/Network/OpenVPN/OldSMB
124        remove State:/Network/OpenVPN/OldDNS
125        remove State:/Network/OpenVPN
126        quit
127EOF
128
129exit 0