File: dnssec-trigger-setdns.sh.in

package info (click to toggle)
dnssec-trigger 0.13~svn685-4
  • links: PTS, VCS
  • area: main
  • in suites: jessie, jessie-kfreebsd
  • size: 2,784 kB
  • ctags: 1,423
  • sloc: ansic: 15,773; sh: 1,788; makefile: 453; xml: 444; objc: 421; python: 334; cpp: 18
file content (106 lines) | stat: -rw-r--r-- 2,640 bytes parent folder | download | duplicates (6)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
#!@SHELL@
# dnssec-trigger shell script to set DNS servers on OSX.
# must run as root.
#
# usage:  set example.com 192.0.2.1 192.0.2.2

# perform software upgrade install
function doinstall () {
	dmg="$*"
	mnt="/tmp/installdir.$$"
	logger "start setdns install"
	# copy the dmg to a tempfile because the hdiutil needs exclusive access
	cp $dmg $dmg.$$
	for (( try=0 ; try <= 20 ; try++ )) ; do
		hdiutil attach "$dmg.$$" -mountpoint "$mnt" -nobrowse -noautoopen -noverify
		if test $? = 0 ; then
			# it worked
			break
		fi
		sleep 1
	done
	logger "mounted setdns install"
	# run the installer from mnt/dnssectrigger-x.x-i386.mpkg
	pkg="`ls -d $mnt/dnssectrigger-*.mpkg`"
	installer -pkg "$pkg" -target /
	logger "done installer setdns install"
	hdiutil detach "$mnt" -force
	logger "detached setdns install"
	rm -f $dmg $dmg.$$
}

cmd="$1"
shift
if test "$cmd" = "set"; then
	domains="$1"
	firstdomain="$1"
	shift
	# remaining arguments are the servers to set
	servers="$*"
	logger "dnssec-trigger-setdns to $domains and $servers"
elif test "$cmd" = "mset"; then
	domains="$1"
	firstdomain="$1"
	shift
	while test "$1" != "--"; do
		domains="$domains $1"
		shift
	done
	if test "$1" != "--"; then
		echo >&2 "Usage: $0 mset domain [domain ..] -- server [server ..]"
		exit 1
	fi
	shift # --
	servers="$*"
	logger "dnssec-trigger-setdns to $domains and $servers"
elif test "$cmd" = "install"; then
	doinstall "$*"
	exit 0
else
	if test "$cmd" = "uninit"; then
		logger "dnssec-trigger-setdns uninit dns override"
	else
		echo >&2 "bad command: set | mset | uninit"
		echo >&2 "  set domain [ip ..]"
		echo >&2 "  mset domain [domain ..] -- ip [ip ..]"
		exit 1
	fi
	firstdomain=""
	domains=""
	servers=""
fi

# sets the DNS settings via scutil.
function with_scutil () {
# find the ids of the networkservices that are running or important
# output like: State:/Network/Service/AB5ED934-29E2-4E1B-BEDC-9167410B49A0/DNS
ids=`echo "list State:/Network/Service/[^/]+/DNS" | scutil | sed -e "s?^.* = ??"`
# set the nameservers of all those entries (and the global one)
for i in $ids State:/Network/Global/DNS; do
	scutil <<END
open
d.init
d.add ServerAddresses * $servers
d.add SearchDomains * $domains
d.add DomainName $firstdomain
set $i
quit
END
done
}

# set the DNS settings via networksetup
nws="networksetup"
if test -z "$domains"; then
	domains="empty"
fi
if test -z "$servers"; then
	servers="empty"
fi
$nws -listallnetworkservices 2>/dev/null | grep -v '*' | while read x ; do
	#echo $x
	$nws -setsearchdomains "$x" $domains
	# no quotes around servers: the IPs have to be separate arguments.
	$nws -setdnsservers "$x" $servers
done