initial version of ssh-dyndns
[ssh-dyndns.git] / ssh-dyndns
1 #!/bin/sh
2 #dyndns via ssh login + djbdns/dbndns
3 #
4 #usage:
5 # $ ssh dyndns@example.org home.example.org
6 #
7 #user setup:
8 # $ useradd -g nogroup -m -N -s /usr/local/bin/ssh-dyndns dyndns
9 # .. add ssh key to user
10 #do not show login messages:
11 # $ su - dyndns -s /bin/bash
12 # $ touch ~/.hushlogin
13 # alternatively, comment out the motd lines in /etc/pam.d/sshd
14 #
15
16 if [ -z "$SSH_CONNECTION" ]; then
17    echo "no ssh connection"
18    exit 1
19 fi
20
21 remoteip=${SSH_CLIENT%% *}
22 if [ -z "$remoteip" ]; then
23    echo "ssh client IP not found"
24    exit 2
25 fi
26
27 if [ -z "$2" ]; then
28     echo Missing argument: domain name
29     exit 3
30 fi
31 domain="$2"
32
33 #load config files
34 if [ -x ~/.config/ssh-dyndns.sh ]; then
35     . ~/.config/ssh-dyndns.sh
36 fi
37 if [ -x /etc/ssh-dyndns.sh ]; then
38     . /etc/ssh-dyndns.sh
39 fi
40
41 if [ -z "$data_dir" ]; then
42     echo '$data_dir not set'
43     exit 4
44 fi
45 if [ ! -d "$data_dir" ]; then
46     echo "$data_dir does not exist"
47     exit 5
48 fi
49 if [ ! -f "$data_dir/Makefile" ]; then
50     echo "$data_dir misses Makefile"
51     exit 6
52 fi
53
54 #FIXME: check allowed domains, allowed suffixes
55
56 file_pattern="${file_pattern:-data-dyndns-%DOMAIN%}"
57 timeout=${timeout:-300}
58
59 datafile=${data_dir}`echo $file_pattern | sed "s/%DOMAIN%/$domain/"`
60 #echo $datafile
61
62 if [ `echo "$remoteip"| sed "s/://"` != "$remoteip" ]; then
63     echo "IPv6 not supported yet"
64     # we need ipv6 address expansion
65     exit 7
66 fi
67
68 #=cweiske.de:5.35.241.22
69 djbdnsline="=${domain}:${remoteip}:${timeout}"
70 echo $djbdnsline > $datafile
71
72 #compile dns data
73 cd "$data_dir"
74 make