1 |
#!/usr/local/bin/bash |
2 |
# MPD Interface Up |
3 |
# |
4 |
# Douglas Thrift |
5 |
# |
6 |
# $Id$ |
7 |
|
8 |
shopt -s extglob |
9 |
|
10 |
function usage() |
11 |
{ |
12 |
echo -e "Usage: `basename $0` \e[1minterface\e[0m inet \e[1mlocal-ip remote-ip authname\e[0m [dns1 \e[1mserver-ip\e[0m] [dns2 \e[1mserver-ip\e[0m]" |
13 |
exit 1 |
14 |
} |
15 |
|
16 |
[[ $# -ne 5 ]] && [[ $# -ne 7 ]] && [[ $# -ne 9 ]] && usage |
17 |
|
18 |
root=`dirname $0` |
19 |
|
20 |
source $root/mpd-common.sh |
21 |
|
22 |
declare -a dns |
23 |
|
24 |
for (( index = 6; index <= $#; ++index )); do |
25 |
case $(eval "echo \"\${$index}\"") in |
26 |
(dns@(1|2)) |
27 |
: $((++index)) |
28 |
|
29 |
if [[ $(eval "echo \"\${$((index))}\"") =~ ^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$ ]]; then |
30 |
dns[${#dns}]=${BASH_REMATCH[0]} |
31 |
else |
32 |
usage |
33 |
fi |
34 |
;; |
35 |
(*) |
36 |
usage |
37 |
;; |
38 |
esac |
39 |
done |
40 |
|
41 |
hostname=`host $remote_ip | sed -Ee 's/^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.in-addr.arpa domain name pointer ([a-z.-]+)/\1/p;d'` |
42 |
|
43 |
if [[ -z $hostname ]]; then |
44 |
hostname=`sed -E 's/^[0-9]{1,3}\.[0-9]{1,3}\.([0-9]{1,3})\.([0-9]{1,3})$/vpn-\1-\2.douglasthrift.net./' <<<$remote_ip` |
45 |
reverse=`sed -E 's/^([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})$/\4.\3.\2.\1.in-addr.arpa./' <<<$remote_ip` |
46 |
fi |
47 |
|
48 |
key |
49 |
|
50 |
nsupdate <<EOF |
51 |
key $name $secret |
52 |
update delete $hostname IN A |
53 |
update add $hostname 300 IN A $remote_ip |
54 |
send`if [[ -n $reverse ]]; then echo " |
55 |
update delete $reverse IN PTR |
56 |
update add $reverse 300 IN PTR $hostname |
57 |
send"; fi` |
58 |
EOF |
59 |
|
60 |
echo $hostname $reverse > ~/.mpd-nsupdate.$interface |