]> Sergey Matveev's repositories - zdns.git/blob - rc.zsh
31a6113ca980885bf37a8850fa508a9bb08496f6
[zdns.git] / rc.zsh
1 path=(~/work/zeasypki $path)
2
3 NoSPF='"v=spf1 -all"'
4 ReSPF='"v=spf1 redirect=_spf.stargrave.org"'
5
6 GW4=91.211.5.21
7 GW6=2a03:e2c0:2663:1::1
8 VPS4=45.10.110.72
9 VPS6=2a04:ac00:a:146::25
10 Y6=21a:af91:8d0e:b05:9645:e4e9:12be:3c39
11
12 NS1=uz544mqwggqbf3z4utlhfqn45vpbpq78nc63hpg5u2ut29stkt0pkr.ns7.stargrave.org.
13 NS2=uz5nulnd504gp3s7sdmdl5l2gxc762hpw926t90k39ltxp67flbccn.ns5.stargrave.org.
14
15 zone_start() {
16     local serial=$1
17     cat <<EOF
18 \$TTL 21600
19 \$ORIGIN ${DOMAIN}.
20 ${DOMAIN}. 21600 IN SOA $NS1 admin.${DOMAIN}. (
21         ${serial} ; Serial
22         12h ; Refresh
23         2h ; Retry
24         2w ; Expire
25         6h ; TTL
26 )
27 @ NS $NS1
28 @ NS $NS2
29 _dmarc TXT "v=DMARC1; p=none"
30 EOF
31 }
32
33 fqdn() {
34     case $1 in
35     @) print ${DOMAIN}. ;;
36     *.) print $1 ;;
37     *) print $1.${DOMAIN}. ;;
38     esac
39 }
40
41 shortened() {
42     local dn=`fqdn $1`
43     case $dn in
44     ${DOMAIN}.) print @ ;;
45     *) print ${dn%%.${DOMAIN}.} ;;
46     esac
47 }
48
49 add_dane() {
50     local domain=`fqdn $1`
51     local dirname=${domain%%.}
52     pushd tls
53     for ca (ca/*/*(on)) {
54         ca=(${(s#/#)ca})
55         ca=${(j:/:)ca[2,-1]}
56         [[ -d ee/$ca/$dirname ]] || continue
57         print "`shortened $domain` CAA 0 issue \"${ca:t}\""
58         print "`shortened _${DANE_PORT:-443}._tcp.$domain` TLSA 3 1 1 `zeasypki dane ee/$ca/$dirname`"
59     }
60     popd
61 }
62
63 add_ssh() {
64     local domain=`fqdn $1`
65     local fn=ssh/${domain%%.}
66     [[ -r $fn ]] || return 0
67     print "`shortened $1` SSHFP 4 2 `ssh-keygen -f $fn -r $domain |
68         sed -n 's/^.*SSHFP 4 2 \(.*\)$/\1/p'`"
69 }
70
71 add_subdomain() {
72     local shorten=`shortened $1`
73     local atyp
74     for addr (${=2}) {
75         [[ $addr =~ : ]] && atyp=AAAA || atyp=A
76         print "$shorten $atyp $addr"
77     }
78     add_dane $1
79     [[ -n $NOSPF ]] || print "$shorten TXT $NoSPF"
80     [[ -z $Y ]] || {
81         shorten=$(shortened y.$(fqdn $1))
82         print "$shorten AAAA $Y6"
83         print "$shorten TXT $NoSPF"
84         add_ssh $shorten
85     }
86     add_ssh $1
87 }
88
89 add_mx() {
90     local shorten=`shortened $1`
91     cat <<EOF
92 $shorten MX 10 mailfake0.stargrave.org.
93 $shorten MX 20 mail2.stargrave.org.
94 $shorten MX 30 mailfake1.stargrave.org.
95 $shorten TXT $ReSPF
96 EOF
97 }
98
99 add_pgp() {
100     local what=$2
101     [[ -n "$what" ]] || what=$1
102     what=${what:s/@/./}
103     gpg --export-options export-dane --export $1 |
104     perl -ne "next unless /${what}/../^$/ ; s/ TYPE61/._openpgpkey TYPE61/ ; print"
105 }