]> Sergey Matveev's repositories - zdns.git/blob - rc.zsh
README
[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_mx() {
50     local shorten=`shortened $1`
51     cat <<EOF
52 $shorten MX 10 mailfake0.stargrave.org.
53 $shorten MX 20 mail2.stargrave.org.
54 $shorten MX 30 mailfake1.stargrave.org.
55 $shorten TXT $ReSPF
56 EOF
57 }
58
59 add_dane() {
60     local domain=`fqdn $1`
61     local dirname=${domain%%.}
62     pushd tls
63     for ca (ca/*/*(on)) {
64         ca=(${(s#/#)ca})
65         ca=${(j:/:)ca[2,-1]}
66         [[ -d ee/$ca/$dirname ]] || continue
67         print "`shortened $domain` CAA 0 issue \"${ca:t}\""
68         print "`shortened _${DANE_PORT:-443}._tcp.$domain` TLSA 3 1 1 `zeasypki dane ee/$ca/$dirname`"
69     }
70     popd
71 }
72
73 add_ssh() {
74     local domain=`fqdn $1`
75     local fn=ssh/${domain%%.}
76     [[ -r $fn ]] || return 0
77     print "`shortened $1` SSHFP 4 2 `ssh-keygen -f $fn -r $domain |
78         sed -n 's/^.*SSHFP 4 2 \(.*\)$/\1/p'`"
79 }
80
81 add_subdomain() {
82     local shorten=`shortened $1`
83     local atyp
84     for addr (${=2}) {
85         [[ $addr =~ : ]] && atyp=AAAA || atyp=A
86         print "$shorten $atyp $addr"
87     }
88     add_dane $1
89     [[ -n $NOSPF ]] || print "$shorten TXT $NoSPF"
90     [[ -z $Y ]] || {
91         shorten=$(shortened y.$(fqdn $1))
92         print "$shorten AAAA $Y6"
93         print "$shorten TXT $NoSPF"
94         add_ssh $shorten
95     }
96     add_ssh $1
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 }