]> mj.ucw.cz Git - nsc-5.git/blob - m4/nsc.m4
f6828327ac80c43b0f6f5c0a5cf422264de1d48c
[nsc-5.git] / m4 / nsc.m4
1 dnl ###
2 dnl ### NSC 2.3 -- Zone File Generator
3 dnl ### (c) 1997--2000 Martin Mares <mj@ucw.cz>
4 dnl ###
5 dnl ### Usage: m4 nsc.m4 domain-source-files >zone-file
6 dnl ###    Or: m4 nsc.m4 domain-source-files >rev-zone-file -DREVERSE=net-ip -DREVBASE=net-ip-to-SOA
7 dnl ###
8
9 # Default values of zone parameters:
10
11 define(refresh, hours(8))
12 define(retry, hours(2))
13 define(expire, days(7))
14 define(minttl, days(1))
15 define(nsname, translit(esyscmd(`hostname -f'),`
16 ',`'))
17 define(maintname, `root'.`corr_dot(nsname)')
18
19 # Domain name
20
21 define(whole_domain, `ifdef(`REVERSE', `define(esrever,revaddr(REVBASE))esrever.in-addr.arpa', `Xdomain')'))
22 define(dotdomain, `ifelse(Xdomain,,,.Xdomain)')
23
24 # Generate reverse addressing if needed
25
26 define(stop_if_rev, `ifdef(`REVERSE', `divert(-1)')')
27 define(mk_PTR, `divert
28 revaddr(substr($1,incr(len(REVERSE))))  PTR     $2`'ifelse(index($2,`.'),-1,`dotdomain.',`')')
29
30 define(mk_ptr, `ifelse(REVERSE, substr($1, 0, len(REVERSE)),`mk_PTR($1,$2)')')
31 define(emit_ptr, `ifdef(`REVERSE', `mk_ptr($1,$2)divert(-1)')')
32
33 # Version number
34
35 define(ver_file, ifdef(`VERS',`VERS',`.nsc_version'))
36 define(today_code, translit(esyscmd(`date +"%Y%m%d"'),`
37 ',`'))
38 sinclude(ver_file)
39 ifelse(today_code, last_today_code, `', `define(`subver_num',1)')
40 syscmd(echo >ver_file "`define'(`last_today_code',today_code) `define'(`subver_num', incr(subver_num))")
41 define(Subver_num, format(`%02d', subver_num))
42 define(version,`today_code`'Subver_num')
43
44 # Host / Subdomain name
45
46 define(emit_name, `ifdef(`keep_addr', `keep_addr`'undefine(`keep_addr')', `$1')')
47
48 # SOA record
49
50 define(DO_SOA, `divert; Primary file for the whole_domain domain generated on curdate
51
52 $TTL    minttl
53 whole_domain.   `SOA'   corr_dot(nsname) maintname (
54                 version refresh retry expire minttl )')
55 define(SOA, `ifdef(`Xdomain',`define(`Xdomain',$1)',`define(`Xdomain',$1)DO_SOA')')
56
57 # NS record
58
59 define(exNS, `emit_name `NS'    corr_dot($1)
60 ')
61 define(NS, `iterate(`exNS', `$@')dnl')
62
63 # MX record
64
65 define(exMX, `emit_name `MX'    corr_dot($1)
66 ')
67 define(MX, `stop_if_rev`'iterate(`exMX', `$@')dnl')
68
69 # HINFO record
70
71 define(HI, `    HINFO   "$1" "$2"')
72
73 # Host records
74
75 define(exH, `emit_ptr($1, cname)        A       $1
76 ')
77 define(H, `define(`cname', $1)stop_if_rev`'$1`'iterate(`exH', `shift($@)')dnl')
78
79 # Reverse-only host records
80
81 define(exRH, `emit_ptr($1, cname)')
82 define(RH, `define(`cname', $1)stop_if_rev`'iterate(`exRH', `shift($@)')dnl')
83
84 # Domain records
85
86 define(D, `stop_if_rev`'define(`keep_addr', $1)define(`cname', $1)dnl')
87
88 # Addressless entry (for example mail alias)
89
90 define(HH, `define(`keep_addr', $1)define(`cname', $1)dnl')
91
92 # ALIASing records
93
94 define(exALIAS, `$1     CNAME cname
95 ')
96 define(ALIAS, `iterate(`exALIAS', `$@')dnl')
97
98 # Cleanup actions
99
100 define(cleanup, `
101 localhost       A       127.0.0.1
102 divert`'ifdef(`REVERSE',`
103 ')')
104 m4wrap(`cleanup')
105
106 include(cf/config)