do not update if nothing changed
[ssh-dyndns.git] / ssh-dyndns
1 #!/bin/sh
2 # dyndns via ssh login + tinydns (djbdns/dbndns)
3 #
4 # usage:
5 # $ ssh dyndns@example.org home.example.org
6 #
7 # @author Christian Weiske <cweiske@cweiske.de>
8
9 if [ -z "$SSH_CONNECTION" ]; then
10    echo "no ssh connection"
11    exit 1
12 fi
13
14 remoteip=${SSH_CLIENT%% *}
15 if [ -z "$remoteip" ]; then
16    echo "ssh client IP not found"
17    exit 2
18 fi
19
20 #TODO: support multiple domains
21 if [ -z "$2" ]; then
22     echo Missing argument: domain name
23     exit 3
24 fi
25 domain="$2"
26
27 #load config files
28 if [ -f ~/.config/ssh-dyndns.sh ]; then
29     . ~/.config/ssh-dyndns.sh
30 fi
31 if [ -f /etc/ssh-dyndns.sh ]; then
32     . /etc/ssh-dyndns.sh
33 fi
34
35 if [ -z "$data_dir" ]; then
36     echo '$data_dir not set'
37     exit 4
38 fi
39 if [ ! -d "$data_dir" ]; then
40     echo "$data_dir does not exist"
41     exit 5
42 fi
43 if [ ! -f "$data_dir/Makefile" ]; then
44     echo "$data_dir misses Makefile"
45     exit 6
46 fi
47
48 if [ ! -z "$domain_patterns" ]; then
49     ok=0
50     for single_dp in $domain_patterns; do
51         case "$domain" in
52             ($single_dp) ok=1;;
53         esac
54     done
55     if [ $ok -ne 1 ]; then
56         echo "Domain \"$domain\" does not match \$domain_pattern"
57         exit 7
58     fi
59 fi
60
61
62 file_pattern="${file_pattern:-data-dyndns-%DOMAIN%}"
63 timeout=${timeout:-300}
64
65 datafile=${data_dir}`echo $file_pattern | sed "s/%DOMAIN%/$domain/"`
66
67 if [ `echo "$remoteip"| sed "s/://"` != "$remoteip" ]; then
68     echo "IPv6 not supported yet"
69     # we need ipv6 address expansion
70     exit 8
71 fi
72
73 #=cweiske.de:5.35.241.22
74 djbdnsline="=${domain}:${remoteip}:${timeout}"
75
76 update=1
77 if [ -f "$datafile" ]; then
78     currentdata=`cat "$datafile"`
79     if [ "$currentdata" = "$djbdnsline" ]; then
80         #no need to update
81         update=0
82     fi
83 fi
84 if [ $update -eq 0 ]; then
85     exit
86 fi
87
88 echo $djbdnsline > $datafile
89
90 #compile dns data
91 cd "$data_dir"
92 make