]> mj.ucw.cz Git - nsc-5.git/blobdiff - m4/nsc.m4
Relative names with dots are now allowed if the dots are escaped
[nsc-5.git] / m4 / nsc.m4
index 224512d755f00645ce16d548808caadeb4af56ae..8a94bc29154f2217f26e16b09372ab044f115da5 100644 (file)
--- a/m4/nsc.m4
+++ b/m4/nsc.m4
@@ -3,6 +3,7 @@ dnl ### NSC -- Zone File Generator
 dnl ### (c) 1997--2011 Martin Mares <mj@ucw.cz>
 dnl ###
 dnl ### Usage: m4 -DVERS=path-to-version-file nsc.m4 domain-source-files >zone-file
+dnl ###    or: m4 -DHASHING nsc.m4 domain-source-files | md5sum
 dnl ###
 include(m4/dnslib.m4)
 
@@ -27,16 +28,17 @@ define(`VERSION',TODAY_CODE`'format(`%02d', SUBVER_NUM))
 
 # Record names
 
-define(nsc_set_name, `define(`CURRENT_NAME', nsc_corr_dot($1))define(`PRINT_NAME', CURRENT_NAME)')
+define(nsc_set_name, `define(`CURRENT_NAME', nsc_name($1))define(`PRINT_NAME', CURRENT_NAME)')
 define(nsc_emit_name, `ifdef(`PRINT_NAME', `PRINT_NAME`'undefine(`PRINT_NAME')', `')')
-define(nsc_abs_name, `ifelse(CURRENT_NAME, translit(CURRENT_NAME,.,:), CURRENT_NAME.CURRENT_DOMAIN, CURRENT_NAME)')
+define(nsc_abs_name, `ifelse(regexp(CURRENT_NAME,\.$),-1,CURRENT_NAME.CURRENT_DOMAIN,CURRENT_NAME)')
+define(nsc_abs_name_nodot, `define(`nsc_tmp', nsc_abs_name)substr(nsc_tmp,0,decr(len(nsc_tmp)))')
 
 # SOA record
 
 define(nsc_SOA, `
 ifelse(CURRENT_DOMAIN,@,`',$ORIGIN CURRENT_DOMAIN)
 $TTL   MINTTL
-nsc_emit_name  `SOA'   nsc_corr_dot(NSNAME) MAINTNAME (
+nsc_emit_name  `SOA'   nsc_name(NSNAME) MAINTNAME (
                VERSION REFRESH RETRY EXPIRE MINTTL )')
 define(SOA, `ifdef(`CURRENT_DOMAIN',`ifdef(`REVERSE_MODE',,`nsc_fatal_error(`SOA record defined twice')')')dnl
 define(`CURRENT_DOMAIN',ifelse($1,@,@,$1.))dnl
@@ -103,13 +105,13 @@ define(GLUE, `DH($@)')
 
 # NS record
 
-define(nsc_NS, `nsc_emit_name  `NS'    nsc_corr_dot($1)
+define(nsc_NS, `nsc_emit_name  `NS'    nsc_name($1)
 ')
 define(NS, `nsc_iterate(`nsc_NS', $@)dnl')
 
 # MX record
 
-define(nsc_MX, `nsc_emit_name  `MX'    nsc_corr_dot($1)
+define(nsc_MX, `nsc_emit_name  `MX'    nsc_name($1)
 ')
 define(MX, `nsc_iterate(`nsc_MX', $@)dnl')
 
@@ -129,19 +131,24 @@ define(TXT, `nsc_emit_name        `TXT'   "$1"')
 
 # RP (responsible person) records
 
-define(RP, `nsc_emit_name      `RP'    nsc_corr_dot($1) nsc_corr_dot($2)')
+define(RP, `nsc_emit_name      `RP'    nsc_name($1) nsc_name($2)')
 
 # SRV records
 
-define(SRV, `_`'$1`'._`'$2`'.CURRENT_NAME      `SRV'   $3 $4 $5 nsc_corr_dot($6)`'nsc_set_name(CURRENT_NAME)')
+define(SRV, `_`'$1`'._`'$2`'.CURRENT_NAME      `SRV'   $3 $4 $5 nsc_name($6)`'nsc_set_name(CURRENT_NAME)')
 
 # CNAME records
 
-define(CNAME, `$1      `CNAME' nsc_corr_dot($2)')
+define(CNAME, `$1      `CNAME' nsc_name($2)')
 
 # Explicit PTR records
 
-define(PTR, `$1        `PTR'   nsc_corr_dot($2)')
+define(PTR, `$1        `PTR'   nsc_name($2)')
+
+# DS records (DNSSEC keys for subdomains)
+
+define(DS, `ifdef(`REVERSE_MODE',,`nsc_DS')')
+define(nsc_DS, `undivert(dss/nsc_abs_name_nodot)')
 
 # Shortcut for classless reverse delegation of a block