X-Git-Url: http://mj.ucw.cz/gitweb/?a=blobdiff_plain;f=m4%2Fnsc.m4;h=cf7a81dcca1514f0d7a7f2074eca802b49e65c84;hb=c6130206366c585cc37b19059838cb4092146fb5;hp=ad6fa7697806100823034475b86e753eebd357cb;hpb=ad59bf15d0e8a781477a25f69b97f7d4c9eb0e00;p=nsc-5.git diff --git a/m4/nsc.m4 b/m4/nsc.m4 index ad6fa76..cf7a81d 100644 --- a/m4/nsc.m4 +++ b/m4/nsc.m4 @@ -1,13 +1,16 @@ dnl ### dnl ### NSC -- Zone File Generator -dnl ### (c) 1997--2003 Martin Mares +dnl ### (c) 1997--2011 Martin Mares dnl ### -dnl ### Usage: m4 nsc.m4 domain-source-files >zone-file -DVERS=path-to-version-file +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) # Version number +ifdef(`HASHING', `define(`VERSION',`YYYYMMDDNN')', ` + ifdef(`VERS',`',`nsc_fatal_error(`VERS macro not defined')') define(TODAY_CODE, translit(esyscmd(`date +"%Y%m%d"'),` @@ -21,24 +24,24 @@ syscmd(echo >VERS "`define'(`LAST_TODAY_CODE',TODAY_CODE) `define'(`SUBVER_NUM', ifelse(eval(SUBVER_NUM > 99),1,`nsc_fatal_error(`Too many zone changes in a single day, you must tweak 'VERS` manually')') 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_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_nodot, `define(`nsc_tmp', nsc_abs_name)substr(nsc_tmp,0,decr(len(nsc_tmp)))') # SOA record -define(nsc_SOA, `divert; Primary file for the CURRENT_DOMAIN domain -; Generated by NSCVER (nsc.m4) on CURRENT_DATE -; Please do not edit manually - -$ORIGIN CURRENT_DOMAIN +define(nsc_SOA, ` +ifelse(CURRENT_DOMAIN,@,`',$ORIGIN CURRENT_DOMAIN) $TTL MINTTL nsc_emit_name `SOA' nsc_corr_dot(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',$1.)dnl +define(`CURRENT_DOMAIN',ifelse($1,@,@,$1.))dnl nsc_set_name(CURRENT_DOMAIN)dnl ifdef(`REVERSE_MODE',,`nsc_SOA')') @@ -120,7 +123,19 @@ define(HI, `nsc_emit_name HINFO "$1" "$2"') define(nsc_ALIAS, `$1 `CNAME' CURRENT_NAME ') -define(ALIAS, `nsc_iterate(`nsc_ALIAS', $@)dnl') +define(ALIAS, `nsc_iterate(`nsc_ALIAS', $@)nsc_set_name(CURRENT_NAME)dnl') + +# TXT records + +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)') + +# SRV records + +define(SRV, `_`'$1`'._`'$2`'.CURRENT_NAME `SRV' $3 $4 $5 nsc_corr_dot($6)`'nsc_set_name(CURRENT_NAME)') # CNAME records @@ -130,6 +145,11 @@ define(CNAME, `$1 `CNAME' nsc_corr_dot($2)') define(PTR, `$1 `PTR' nsc_corr_dot($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 define(REVBLOCK, `nsc_forloop(`i', $2, $3, `i' `CNAME' `i'.$1 @@ -139,6 +159,14 @@ define(REVBLOCK, `nsc_forloop(`i', $2, $3, `i' `CNAME' `i'.$1 # Cleanup actions define(nsc_cleanup, `ifdef(`DISABLE_LOCALHOST',,` +; Added automatically (required by RFC 1912) localhost A 127.0.0.1 ')') m4wrap(`nsc_cleanup') + +divert(0)dnl +`;;;' Primary zone file +`;;;' Generated by NSCVER (nsc.m4) on ifdef(`HASHING', ``CURRENT_DATE'', `CURRENT_DATE') +`;;;' Please do not edit manually +`;;;' `VERSION': VERSION +`'