/openvpn/scripts/macOS/openvpn-osx-tuntap.sh |
@@ -41,34 +41,34 @@ |
flushDNSCache() |
{ |
if [ "${OSVER}" = "10.4" ] ; then |
if [ -f /usr/sbin/lookupd ] ; then |
set +e # we will catch errors from lookupd |
/usr/sbin/lookupd -flushcache |
set -e # bash should again fail on errors |
fi |
else |
if [ -f /usr/bin/dscacheutil ] ; then |
set +e # we will catch errors from dscacheutil |
/usr/bin/dscacheutil -flushcache |
set -e # bash should again fail on errors |
fi |
if [ -f /usr/sbin/discoveryutil ] ; then |
set +e # we will catch errors from discoveryutil |
/usr/sbin/discoveryutil udnsflushcaches |
/usr/sbin/discoveryutil mdnsflushcache |
set -e # bash should again fail on errors |
fi |
set +e # "grep" will return error status (1) if no matches are found, so don't fail on individual errors |
hands_off_ps="$( ps -ax | grep HandsOffDaemon | grep -v grep.HandsOffDaemon )" |
set -e # We instruct bash that it CAN again fail on errors |
if [ -z "${hands_off_ps}" ] ; then |
if [ -f /usr/bin/killall ] ; then |
set +e # ignore errors if mDNSResponder isn't currently running |
/usr/bin/killall -HUP mDNSResponder |
set -e # bash should again fail on errors |
fi |
fi |
fi |
if [ -f /usr/sbin/lookupd ] ; then |
set +e # we will catch errors from lookupd |
/usr/sbin/lookupd -flushcache |
set -e # bash should again fail on errors |
fi |
else |
if [ -f /usr/bin/dscacheutil ] ; then |
set +e # we will catch errors from dscacheutil |
/usr/bin/dscacheutil -flushcache |
set -e # bash should again fail on errors |
fi |
if [ -f /usr/sbin/discoveryutil ] ; then |
set +e # we will catch errors from discoveryutil |
/usr/sbin/discoveryutil udnsflushcaches |
/usr/sbin/discoveryutil mdnsflushcache |
set -e # bash should again fail on errors |
fi |
set +e # "grep" will return error status (1) if no matches are found, so don't fail on individual errors |
hands_off_ps="$( ps -ax | grep HandsOffDaemon | grep -v grep.HandsOffDaemon )" |
set -e # We instruct bash that it CAN again fail on errors |
if [ -z "${hands_off_ps}" ] ; then |
if [ -f /usr/bin/killall ] ; then |
set +e # ignore errors if mDNSResponder isn't currently running |
/usr/bin/killall -HUP mDNSResponder |
set -e # bash should again fail on errors |
fi |
fi |
fi |
} |
|
########################################################################### |
@@ -79,131 +79,131 @@ |
readonly PSID="DHCP-$dev" |
|
# Set up the DYN_* variables to contain what is asked for (dynamically, by a 'push' directive, for example) |
declare -a vDNS=("${!1}") |
declare -a vSMB=("${!3}") |
declare -a vSD=("${!4}") |
declare -a vDNS=("${!1}") |
declare -a vSMB=("${!3}") |
declare -a vSD=("${!4}") |
|
if [ ${#vDNS[*]} -eq 0 ] ; then |
readonly DYN_DNS_SA="" |
else |
readonly DYN_DNS_SA="${!1}" |
fi |
|
if [ ${#vSMB[*]} -eq 0 ] ; then |
readonly DYN_SMB_WA="" |
else |
readonly DYN_SMB_WA="${!3}" |
fi |
if [ ${#vDNS[*]} -eq 0 ] ; then |
readonly DYN_DNS_SA="" |
else |
readonly DYN_DNS_SA="${!1}" |
fi |
|
if [ ${#vSMB[*]} -eq 0 ] ; then |
readonly DYN_SMB_WA="" |
else |
readonly DYN_SMB_WA="${!3}" |
fi |
|
if [ ${#vSD[*]} -eq 0 ] ; then |
readonly DYN_DNS_SD="" |
else |
readonly DYN_DNS_SD="${!4}" |
fi |
|
DYN_DNS_DN="$2" |
if [ ${#vSD[*]} -eq 0 ] ; then |
readonly DYN_DNS_SD="" |
else |
readonly DYN_DNS_SD="${!4}" |
fi |
|
DYN_DNS_DN="$2" |
|
# set up the FIN_* variables with what we want to set things to |
# Three FIN_* variables are simple -- no aggregation is done for them |
if [ ! -z "${DYN_DNS_DN}" ] ; then |
readonly FIN_DNS_DN="${DYN_DNS_DN}" |
else |
readonly FIN_DNS_DN="" |
fi |
|
if [ ! -z "${DYN_SMB_NN}" ] ; then |
readonly FIN_SMB_NN="${DYN_SMB_NN}" |
else |
readonly FIN_SMB_NN="" |
fi |
|
if [ ! -z "${DYN_SMB_WG}" ] ; then |
readonly FIN_SMB_WG="${DYN_SMB_WG}" |
else |
readonly FIN_SMB_WG="" |
fi |
# Three FIN_* variables are simple -- no aggregation is done for them |
if [ ! -z "${DYN_DNS_DN}" ] ; then |
readonly FIN_DNS_DN="${DYN_DNS_DN}" |
else |
readonly FIN_DNS_DN="" |
fi |
|
if [ ! -z "${DYN_SMB_NN}" ] ; then |
readonly FIN_SMB_NN="${DYN_SMB_NN}" |
else |
readonly FIN_SMB_NN="" |
fi |
|
if [ ! -z "${DYN_SMB_WG}" ] ; then |
readonly FIN_SMB_WG="${DYN_SMB_WG}" |
else |
readonly FIN_SMB_WG="" |
fi |
|
# DNS ServerAddresses (FIN_DNS_SA) are aggregated for 10.4 and 10.5 |
if [ ${#vDNS[*]} -eq 0 ] ; then |
readonly FIN_DNS_SA="" |
else |
case "${OSVER}" in |
10.4 | 10.5 ) |
# We need to remove duplicate DNS entries, so that our reference list matches MacOSX's |
SDNS="$( echo -n "${DYN_DNS_SA}" | tr ' ' '\n' )" |
# DNS ServerAddresses (FIN_DNS_SA) are aggregated for 10.4 and 10.5 |
if [ ${#vDNS[*]} -eq 0 ] ; then |
readonly FIN_DNS_SA="" |
else |
case "${OSVER}" in |
10.4 | 10.5 ) |
# We need to remove duplicate DNS entries, so that our reference list matches MacOSX's |
SDNS="$( echo -n "${DYN_DNS_SA}" | tr ' ' '\n' )" |
i=0 |
for n in "${vDNS[@]}" ; do |
if echo -n "${SDNS}" | grep -q "${n}" ; then |
unset vDNS[${i}] |
fi |
for n in "${vDNS[@]}" ; do |
if echo -n "${SDNS}" | grep -q "${n}" ; then |
unset vDNS[${i}] |
fi |
let i++ |
done |
if [ ${#vDNS[*]} -gt 0 ] ; then |
readonly FIN_DNS_SA="$( echo -n "${DYN_DNS_SA}" | sed s/"${vDNS[*]}"//g )" |
else |
readonly FIN_DNS_SA="${DYN_DNS_SA}" |
fi |
;; |
* ) |
# Do nothing - in 10.6 and higher -- we don't aggregate our configurations, apparently |
readonly FIN_DNS_SA="${DYN_DNS_SA}" |
;; |
esac |
fi |
done |
if [ ${#vDNS[*]} -gt 0 ] ; then |
readonly FIN_DNS_SA="$( echo -n "${DYN_DNS_SA}" | sed s/"${vDNS[*]}"//g )" |
else |
readonly FIN_DNS_SA="${DYN_DNS_SA}" |
fi |
;; |
* ) |
# Do nothing - in 10.6 and higher -- we don't aggregate our configurations, apparently |
readonly FIN_DNS_SA="${DYN_DNS_SA}" |
;; |
esac |
fi |
|
# SMB WINSAddresses (FIN_SMB_WA) are aggregated for 10.4 and 10.5 |
if [ ${#vSMB[*]} -eq 0 ] ; then |
readonly FIN_SMB_WA="" |
else |
case "${OSVER}" in |
10.4 | 10.5 ) |
# We need to remove duplicate SMB entries, so that our reference list matches MacOSX's |
SSMB="$( echo -n "${DYN_SMB_WA}" | tr ' ' '\n' )" |
# SMB WINSAddresses (FIN_SMB_WA) are aggregated for 10.4 and 10.5 |
if [ ${#vSMB[*]} -eq 0 ] ; then |
readonly FIN_SMB_WA="" |
else |
case "${OSVER}" in |
10.4 | 10.5 ) |
# We need to remove duplicate SMB entries, so that our reference list matches MacOSX's |
SSMB="$( echo -n "${DYN_SMB_WA}" | tr ' ' '\n' )" |
i=0 |
for n in "${vSMB[@]}" ; do |
if echo -n "${SSMB}" | grep -q "${n}" ; then |
unset vSMB[${i}] |
fi |
for n in "${vSMB[@]}" ; do |
if echo -n "${SSMB}" | grep -q "${n}" ; then |
unset vSMB[${i}] |
fi |
let i++ |
done |
if [ ${#vSMB[*]} -gt 0 ] ; then |
readonly FIN_SMB_WA="$( echo -n "${DYN_SMB_WA}" | sed s/"${vSMB[*]}"//g )" |
else |
readonly FIN_SMB_WA="${DYN_SMB_WA}" |
fi |
;; |
* ) |
# Do nothing - in 10.6 and higher -- we don't aggregate our configurations, apparently |
readonly FIN_SMB_WA="${DYN_SMB_WA}" |
;; |
esac |
fi |
done |
if [ ${#vSMB[*]} -gt 0 ] ; then |
readonly FIN_SMB_WA="$( echo -n "${DYN_SMB_WA}" | sed s/"${vSMB[*]}"//g )" |
else |
readonly FIN_SMB_WA="${DYN_SMB_WA}" |
fi |
;; |
* ) |
# Do nothing - in 10.6 and higher -- we don't aggregate our configurations, apparently |
readonly FIN_SMB_WA="${DYN_SMB_WA}" |
;; |
esac |
fi |
|
# DNS SearchDomains (FIN_DNS_SD) is treated specially |
# |
# OLD BEHAVIOR: |
# if SearchDomains was not set manually, we set SearchDomains to the DomainName |
# else |
# In OS X 10.4-10.5, we add the DomainName to the end of any manual SearchDomains (unless it is already there) |
# In OS X 10.6+, if SearchDomains was entered manually, we ignore the DomainName |
# else we set SearchDomains to the DomainName |
# |
# NEW BEHAVIOR (done if ARG_PREPEND_DOMAIN_NAME is "true"): |
# |
# if SearchDomains was entered manually, we do nothing |
# else we PREpend new SearchDomains (if any) to the existing SearchDomains (NOT replacing them) |
# and PREpend DomainName to that |
# |
# (done if ARG_PREPEND_DOMAIN_NAME is "false" and there are new SearchDomains from DOMAIN-SEARCH): |
# |
# if SearchDomains was entered manually, we do nothing |
# else we PREpend any new SearchDomains to the existing SearchDomains (NOT replacing them) |
# |
# This behavior is meant to behave like Linux with Network Manager and Windows |
if "${PREPEND_DOMAIN_NAME}" ; then |
if [ ! -z "${DYN_DNS_SD}" ] ; then |
# DNS SearchDomains (FIN_DNS_SD) is treated specially |
# |
# OLD BEHAVIOR: |
# if SearchDomains was not set manually, we set SearchDomains to the DomainName |
# else |
# In OS X 10.4-10.5, we add the DomainName to the end of any manual SearchDomains (unless it is already there) |
# In OS X 10.6+, if SearchDomains was entered manually, we ignore the DomainName |
# else we set SearchDomains to the DomainName |
# |
# NEW BEHAVIOR (done if ARG_PREPEND_DOMAIN_NAME is "true"): |
# |
# if SearchDomains was entered manually, we do nothing |
# else we PREpend new SearchDomains (if any) to the existing SearchDomains (NOT replacing them) |
# and PREpend DomainName to that |
# |
# (done if ARG_PREPEND_DOMAIN_NAME is "false" and there are new SearchDomains from DOMAIN-SEARCH): |
# |
# if SearchDomains was entered manually, we do nothing |
# else we PREpend any new SearchDomains to the existing SearchDomains (NOT replacing them) |
# |
# This behavior is meant to behave like Linux with Network Manager and Windows |
if "${PREPEND_DOMAIN_NAME}" ; then |
if [ ! -z "${DYN_DNS_SD}" ] ; then |
readonly TMP_DNS_SD="${DYN_DNS_SD}" |
if [ ! -z "${FIN_DNS_DN}" -a "${FIN_DNS_DN}" != "localdomain" ]; then |
if [ ! -z "${FIN_DNS_DN}" -a "${FIN_DNS_DN}" != "localdomain" ]; then |
if ! echo -n "${TMP_DNS_SD}" | tr ' ' '\n' | grep -q "${FIN_DNS_DN}" ; then |
readonly FIN_DNS_SD="$( echo -n "${FIN_DNS_DN}" | sed s/"${TMP_DNS_SD}"//g )" |
else |
@@ -210,15 +210,15 @@ |
readonly FIN_DNS_SD="${TMP_DNS_SD}" |
fi |
else |
readonly FIN_DNS_SD="${TMP_DNS_SD}" |
fi |
readonly FIN_DNS_SD="${TMP_DNS_SD}" |
fi |
else |
readonly FIN_DNS_SD="${DYN_DNS_SD}" |
fi |
else |
if [ ! -z "${DYN_DNS_SD}" ] ; then |
readonly FIN_DNS_SD="${DYN_DNS_SD}" |
else |
else |
if [ ! -z "${DYN_DNS_SD}" ] ; then |
readonly FIN_DNS_SD="${DYN_DNS_SD}" |
else |
if [ ! -z "${FIN_DNS_DN}" -a "${FIN_DNS_DN}" != "localdomain" ] ; then |
case "${OSVER}" in |
10.4 | 10.5 ) |
@@ -231,120 +231,120 @@ |
else |
readonly FIN_DNS_SD="" |
fi |
fi |
fi |
fi |
fi |
|
# Set up SKP_* variables to inhibit scutil from making some changes |
# SKP_DNS_* and SKP_SMB_* are used to comment out individual items |
# SKP_DNS_* and SKP_SMB_* are used to comment out individual items |
# that are not being set |
if [ -z "${FIN_DNS_DN}" ] ; then |
SKP_DNS_DN="#" |
else |
SKP_DNS_DN="" |
fi |
if [ -z "${FIN_DNS_SA}" ] ; then |
SKP_DNS_SA="#" |
else |
SKP_DNS_SA="" |
fi |
if [ -z "${FIN_DNS_SD}" ] ; then |
SKP_DNS_SD="#" |
else |
SKP_DNS_SD="" |
fi |
if [ -z "${FIN_SMB_NN}" ] ; then |
SKP_SMB_NN="#" |
else |
SKP_SMB_NN="" |
fi |
if [ -z "${FIN_SMB_WG}" ] ; then |
SKP_SMB_WG="#" |
else |
SKP_SMB_WG="" |
fi |
if [ -z "${FIN_SMB_WA}" ] ; then |
SKP_SMB_WA="#" |
else |
SKP_SMB_WA="" |
fi |
|
# if any DNS items should be set, set all that have values |
if [ "${SKP_DNS_DN}${SKP_DNS_SA}${SKP_DNS_SD}" = "###" ] ; then |
readonly SKP_DNS="#" |
else |
readonly SKP_DNS="" |
if [ ! -z "${FIN_DNS_DN}" ] ; then |
SKP_DNS_DN="" |
fi |
if [ ! -z "${FIN_DNS_SA}" ] ; then |
SKP_DNS_SA="" |
fi |
if [ ! -z "${FIN_DNS_SD}" ] ; then |
SKP_DNS_SD="" |
fi |
fi |
if [ -z "${FIN_DNS_DN}" ] ; then |
SKP_DNS_DN="#" |
else |
SKP_DNS_DN="" |
fi |
if [ -z "${FIN_DNS_SA}" ] ; then |
SKP_DNS_SA="#" |
else |
SKP_DNS_SA="" |
fi |
if [ -z "${FIN_DNS_SD}" ] ; then |
SKP_DNS_SD="#" |
else |
SKP_DNS_SD="" |
fi |
if [ -z "${FIN_SMB_NN}" ] ; then |
SKP_SMB_NN="#" |
else |
SKP_SMB_NN="" |
fi |
if [ -z "${FIN_SMB_WG}" ] ; then |
SKP_SMB_WG="#" |
else |
SKP_SMB_WG="" |
fi |
if [ -z "${FIN_SMB_WA}" ] ; then |
SKP_SMB_WA="#" |
else |
SKP_SMB_WA="" |
fi |
|
# if any DNS items should be set, set all that have values |
if [ "${SKP_DNS_DN}${SKP_DNS_SA}${SKP_DNS_SD}" = "###" ] ; then |
readonly SKP_DNS="#" |
else |
readonly SKP_DNS="" |
if [ ! -z "${FIN_DNS_DN}" ] ; then |
SKP_DNS_DN="" |
fi |
if [ ! -z "${FIN_DNS_SA}" ] ; then |
SKP_DNS_SA="" |
fi |
if [ ! -z "${FIN_DNS_SD}" ] ; then |
SKP_DNS_SD="" |
fi |
fi |
|
# if any SMB items should be set, set all that have values |
if [ "${SKP_SMB_NN}${SKP_SMB_WG}${SKP_SMB_WA}" = "###" ] ; then |
readonly SKP_SMB="#" |
else |
readonly SKP_SMB="" |
if [ ! -z "${FIN_SMB_NN}" ] ; then |
SKP_SMB_NN="" |
fi |
if [ ! -z "${FIN_SMB_WG}" ] ; then |
SKP_SMB_WG="" |
fi |
if [ ! -z "${FIN_SMB_WA}" ] ; then |
SKP_SMB_WA="" |
fi |
fi |
# if any SMB items should be set, set all that have values |
if [ "${SKP_SMB_NN}${SKP_SMB_WG}${SKP_SMB_WA}" = "###" ] ; then |
readonly SKP_SMB="#" |
else |
readonly SKP_SMB="" |
if [ ! -z "${FIN_SMB_NN}" ] ; then |
SKP_SMB_NN="" |
fi |
if [ ! -z "${FIN_SMB_WG}" ] ; then |
SKP_SMB_WG="" |
fi |
if [ ! -z "${FIN_SMB_WA}" ] ; then |
SKP_SMB_WA="" |
fi |
fi |
|
readonly SKP_DNS_SA SKP_DNS_SD SKP_DNS_DN |
readonly SKP_SMB_NN SKP_SMB_WG SKP_SMB_WA |
|
readonly SKP_DNS_SA SKP_DNS_SD SKP_DNS_DN |
readonly SKP_SMB_NN SKP_SMB_WG SKP_SMB_WA |
|
# special-case fiddling: |
# 10.8+ : ServerAddresses and SearchDomains must be set via the Setup: |
# 10.8+ : ServerAddresses and SearchDomains must be set via the Setup: |
# key in addition to the State: key |
# 10.7 : if ServerAddresses or SearchDomains are manually set, |
# 10.7 : if ServerAddresses or SearchDomains are manually set, |
# ServerAddresses and SearchDomains must be similarly set with the |
# Setup: key in addition to the State: key |
case "${OSVER}" in |
10.4 | 10.5 | 10.6 | 10.7 ) |
readonly SKP_SETUP_DNS="#" |
;; |
* ) |
readonly SKP_SETUP_DNS="" |
;; |
esac |
|
case "${OSVER}" in |
10.4 | 10.5 | 10.6 | 10.7 ) |
readonly SKP_SETUP_DNS="#" |
;; |
* ) |
readonly SKP_SETUP_DNS="" |
;; |
esac |
|
# Set all parameters. |
/usr/sbin/scutil >/dev/null 2>&1 <<-EOF |
open |
|
# Initialize the new DNS map via State: |
${SKP_DNS}d.init |
${SKP_DNS}${SKP_DNS_SA}d.add ServerAddresses * ${FIN_DNS_SA} |
${SKP_DNS}${SKP_DNS_SD}d.add SearchDomains * ${FIN_DNS_SD} |
${SKP_DNS}${SKP_DNS_DN}d.add DomainName ${FIN_DNS_DN} |
/usr/sbin/scutil >/dev/null 2>&1 <<-EOF |
open |
|
# Initialize the new DNS map via State: |
${SKP_DNS}d.init |
${SKP_DNS}${SKP_DNS_SA}d.add ServerAddresses * ${FIN_DNS_SA} |
${SKP_DNS}${SKP_DNS_SD}d.add SearchDomains * ${FIN_DNS_SD} |
${SKP_DNS}${SKP_DNS_DN}d.add DomainName ${FIN_DNS_DN} |
${SKP_DNS}${SKP_DNS_DN}d.add SupplementalMatchDomains * ${FIN_DNS_DN} |
${SKP_DNS}set State:/Network/Service/${PSID}/DNS |
${SKP_DNS}set State:/Network/Service/${PSID}/DNS |
|
# If necessary, initialize the new DNS map via Setup: also |
${SKP_SETUP_DNS}${SKP_DNS}d.init |
${SKP_SETUP_DNS}${SKP_DNS}${SKP_DNS_SA}d.add ServerAddresses * ${FIN_DNS_SA} |
${SKP_SETUP_DNS}${SKP_DNS}${SKP_DNS_SD}d.add SearchDomains * ${FIN_DNS_SD} |
${SKP_SETUP_DNS}${SKP_DNS}${SKP_DNS_DN}d.add DomainName ${FIN_DNS_DN} |
${SKP_SETUP_DNS}${SKP_DNS}set Setup:/Network/Service/${PSID}/DNS |
# If necessary, initialize the new DNS map via Setup: also |
${SKP_SETUP_DNS}${SKP_DNS}d.init |
${SKP_SETUP_DNS}${SKP_DNS}${SKP_DNS_SA}d.add ServerAddresses * ${FIN_DNS_SA} |
${SKP_SETUP_DNS}${SKP_DNS}${SKP_DNS_SD}d.add SearchDomains * ${FIN_DNS_SD} |
${SKP_SETUP_DNS}${SKP_DNS}${SKP_DNS_DN}d.add DomainName ${FIN_DNS_DN} |
${SKP_SETUP_DNS}${SKP_DNS}set Setup:/Network/Service/${PSID}/DNS |
|
# Initialize the SMB map |
${SKP_SMB}d.init |
${SKP_SMB}${SKP_SMB_NN}d.add NetBIOSName ${FIN_SMB_NN} |
${SKP_SMB}${SKP_SMB_WG}d.add Workgroup ${FIN_SMB_WG} |
${SKP_SMB}${SKP_SMB_WA}d.add WINSAddresses * ${FIN_SMB_WA} |
${SKP_SMB}set State:/Network/Service/${PSID}/SMB |
# Initialize the SMB map |
${SKP_SMB}d.init |
${SKP_SMB}${SKP_SMB_NN}d.add NetBIOSName ${FIN_SMB_NN} |
${SKP_SMB}${SKP_SMB_WG}d.add Workgroup ${FIN_SMB_WG} |
${SKP_SMB}${SKP_SMB_WA}d.add WINSAddresses * ${FIN_SMB_WA} |
${SKP_SMB}set State:/Network/Service/${PSID}/SMB |
|
quit |
quit |
EOF |
|
} |
@@ -351,8 +351,8 @@ |
|
# If OpenVPN has not brought up the device, then terminate. |
if [ -z "$dev" ]; then |
echo "$0: \$dev not defined, exiting"; |
exit 1; |
echo "$0: \$dev not defined, exiting"; |
exit 1; |
fi |
|
# OpenVPN passes $script_type set to the script method. |
@@ -374,7 +374,7 @@ |
set +e |
n=0 |
while [ -z "$PACKET" -a $n -lt 60 ] ; do |
PACKET="$( /usr/sbin/ipconfig getpacket "$dev" )" |
PACKET="$( /usr/sbin/ipconfig getpacket "$dev" )" |
let n++ |
sleep 1 |
done |
@@ -392,7 +392,7 @@ |
|
set +e |
# Get domain name |
DOMAIN_NAME="$( echo -n "$PACKET" | grep "domain_name " | grep -Eo ": $DOMRX" | grep -Eo "$DOMRX" | tr -d [:space:] )" |
DOMAIN_NAME="$( echo -n "$PACKET" | grep "domain_name " | grep -Eo ": $DOMRX" | grep -Eo "$DOMRX" | tr -d [:space:] )" |
|
# Get nameservers |
DOMAIN_NAME_SERVERS_INDEX=1 |
@@ -403,33 +403,33 @@ |
|
# Get search domains |
SEARCH_DOMAINS_INDEX=1 |
for SEARCH_DOMAIN in $( echo -n "$PACKET" | grep "search_domain" | grep -Eo "\{($DOMRX)(, $DOMRX)*\}" | grep -Eo "($DOMRX)" ); do |
SEARCH_DOMAINS[SEARCH_DOMAINS_INDEX-1]=$SEARCH_DOMAIN |
let SEARCH_DOMAINS_INDEX++ |
done |
for SEARCH_DOMAIN in $( echo -n "$PACKET" | grep "search_domain" | grep -Eo "\{($DOMRX)(, $DOMRX)*\}" | grep -Eo "($DOMRX)" ); do |
SEARCH_DOMAINS[SEARCH_DOMAINS_INDEX-1]=$SEARCH_DOMAIN |
let SEARCH_DOMAINS_INDEX++ |
done |
|
# Get WINS servers |
WINS_SERVERS_INDEX=1 |
for WINS_SERVER in $( echo -n "$PACKET" | grep "nb_over_tcpip_name_server" | grep -Eo "\{($IPRX)(, $IPRX)*\}" | grep -Eo "($IPRX)" ); do |
WINS_SERVERS[WINS_SERVERS_INDEX-1]=$WINS_SERVER |
let WINS_SERVERS_INDEX++ |
done |
for WINS_SERVER in $( echo -n "$PACKET" | grep "nb_over_tcpip_name_server" | grep -Eo "\{($IPRX)(, $IPRX)*\}" | grep -Eo "($IPRX)" ); do |
WINS_SERVERS[WINS_SERVERS_INDEX-1]=$WINS_SERVER |
let WINS_SERVERS_INDEX++ |
done |
|
if [ ${#DOMAIN_NAME_SERVERS[*]} -gt 0 -a "$DOMAIN_NAME" ]; then |
setDnsServersAndDomainName DOMAIN_NAME_SERVERS[@] "$DOMAIN_NAME" WINS_SERVERS[@] SEARCH_DOMAINS[@] |
if [ ${#DOMAIN_NAME_SERVERS[*]} -gt 0 -a "$DOMAIN_NAME" ]; then |
setDnsServersAndDomainName DOMAIN_NAME_SERVERS[@] "$DOMAIN_NAME" WINS_SERVERS[@] SEARCH_DOMAINS[@] |
elif [ ${#DOMAIN_NAME_SERVERS[*]} -gt 0 ]; then |
setDnsServersAndDomainName DOMAIN_NAME_SERVERS[@] "$DEFAULT_DOMAIN_NAME" WINS_SERVERS[@] SEARCH_DOMAINS[@] |
setDnsServersAndDomainName DOMAIN_NAME_SERVERS[@] "$DEFAULT_DOMAIN_NAME" WINS_SERVERS[@] SEARCH_DOMAINS[@] |
else |
exit 1 |
fi |
fi |
|
set -e |
|
sleep 1 |
sleep 1 |
|
flushDNSCache |
flushDNSCache |
|
exit 0 |
exit 0 |
} & |
;; |
down) |