]> mj.ucw.cz Git - nsc-5.git/commitdiff
First step to version 3.0. Changes too extensive to comment them.
authorMartin Mares <mj@ucw.cz>
Sat, 20 Dec 2003 19:18:25 +0000 (19:18 +0000)
committerMartin Mares <mj@ucw.cz>
Sat, 20 Dec 2003 19:18:25 +0000 (19:18 +0000)
I'll update the NEWS one day.

bin/nsconfig
m4/dnslib.m4
m4/mkconf.m4
m4/mkmf.m4
m4/nsc.m4
m4/pgen.m4 [deleted file]
nsc.lsm
root.cache

index d103f4d5bc51704d821b7d22186c5a1cd3666475..b104932d6ed9240edb5d7886bd01b5861dacca78 100755 (executable)
@@ -1,24 +1,16 @@
 #!/bin/bash
 # NSC -- Makefile & Config file build script
-# (c) 1997--2000 Martin Mares <mj@ucw.cz>
+# (c) 1997--2003 Martin Mares <mj@ucw.cz>
 
-ROOT=/etc/named                # Root dir of the whole package
-CF=cf                  # Place for all configuration files
-ZONES=zone             # Place for all primary zone files
-BAX=bak                        # Place for all secondary zone files
-VERS=ver               # Place for all primary version files
-NSC=m4                 # Place for all scripts
-
-DOMAINS=$CF/domains    # The master domain list
-MKFILE=Makefile                # Makefile to generate
-CONFFILE=named.conf    # Configuration file to generate
-CACHE=root.cache
+set -e
 
 M4=`which gm4` || M4=`which m4` || ( echo "Unable to find M4!" ; exit 1 )
+DOMAINS=cf/domains
 
 if [ ! -f $DOMAINS ] ; then
        echo "Domain list file missing."
        exit 1
        fi
-m4 $NSC/dnslib.m4 $NSC/mkconf.m4 $DOMAINS >$CONFFILE -DZONEDIR=$ZONES -DBAKDIR=$BAX -DCACHE=$CACHE -DROOT=$ROOT
-m4 $NSC/dnslib.m4 $NSC/mkmf.m4 $DOMAINS >$MKFILE -DZONEDIR=$ZONES -DBAKDIR=$BAX -DCACHE=$CACHE -DVERSDIR=$VERS -DNSCDIR=$NSC -DCONF=$CONFFILE -DCFDIR=$CF -DM4=$M4
+
+$M4 m4/mkconf.m4 $DOMAINS >named.conf
+$M4 m4/mkmf.m4 $DOMAINS >Makefile -DM4=$M4
index 9c4d0a47d410e2714f9394b5d623d61de6520031..8049ee7793a62c0f9b668c127a07f5987562e93b 100644 (file)
 dnl ###
-dnl ### NSC 2.0 -- Library Functions For DNS Processing
-dnl ### (c) 1997 Martin Mares <mj@gts.cz>
+dnl ### NSC 3.0 -- Library Functions For DNS Processing
+dnl ### (c) 1997--2003 Martin Mares <mj@ucw.cz>
 dnl ###
 divert(-1)
 
+# NSC version
+
+define(`NSCVER', `NSC 2.99a')
+
 # Current date and time
 
-define(`curdate', translit(esyscmd(`date'),`
+define(`CURRENT_DATE', translit(esyscmd(`date'),`
 ',`'))
 
 # Time conversion
 
-define(minutes, `eval($1*60)')
-define(hours, `eval($1*3600)')
-define(days, `eval($1*86400)')
+define(MINUTES, `eval($1*60)')
+define(HOURS, `eval($1*3600)')
+define(DAYS, `eval($1*86400)')
+
+# Reverse an IP address
+
+define(nsc_revIPa, `ifelse($#, 1, `$1', `nsc_revIPa(shift($@)).$1')')
+define(nsc_revaddr, `nsc_revIPa(translit($1, `.', `,'))')
+
+# Fix up dots in a name: if the name is not simple (i.e., it contains at least one dot),
+# ensure that it ends with a dot.
 
-# Reversal of IP address
+define(nsc_corr_dot, `ifelse(substr($1,decr(len($1))),.,$1,$1`'ifelse(index($1,.),-1,,.))')
 
-define(revIPa, `ifelse($#, 1, `$1', `revIPa(shift($@)).$1')')
-define(revaddr, `revIPa(translit($1, `.', `,'))')
+# Normalize IPv6 address
 
-# Add explicit dot at the end if the name contains domain part
+define(nsc_if_v6, `ifelse(index($1,:),-1,`$3',`$2')')
 
-define(corr_dot, `$1`'ifelse(index($1,`.'),-1,,`.')')
+define(nsc_norm_v6, `nsc_norm_v6_z(dnl
+ifelse(regexp($1,`::.*::'),-1,`ifelse(index($1,::),-1,`nsc_norm_v6_nn($1)',`nsc_norm_v6_cc($1)')',`nsc_bad_v6($1)'))')
+# If there is no ::, check the number of :'s
+define(nsc_norm_v6_nn, `ifelse(nsc_extract_colons($1),:::::::,$1,`nsc_bad_v6($1)')')
+# Replace :: by the right number of :'s to get 8 (possibly empty) components
+define(nsc_norm_v6_cc, `regexp($1,`\(.*\)::\(.*\)',`\1'nsc_n_times(eval(9-len(nsc_extract_colons($1))),:)`\2')')
+# Delete everything except colons
+define(nsc_extract_colons, `ifelse(index($1,:),-1,,`:nsc_extract_colons(regexp($1,`\(.*\):\(.*\)',`\1\2'))')')
+# Repeat a given string N times
+define(nsc_n_times, `ifelse($1,0,,`$2`'nsc_n_times(eval($1-1),`$2')')')
+# Pad each component to 4 hex digits and convert them to lowercase
+define(nsc_norm_v6_z, `nsc_norm_v6_digs(translit($1,:,`,'))')
+define(nsc_norm_v6_digs, `nsc_norm_v6_dig($1)`'ifelse($#,1,,:`nsc_norm_v6_digs(shift($@))')')
+define(nsc_norm_v6_dig, `ifelse(eval(len($1) > 4),1,`nsc_bad_v6($1)',`nsc_n_times(eval(4-len($1)),0)`'translit($1,A-F,a-f)')')
+# Report a fatal error in IPv6 address
+define(nsc_bad_v6, `nsc_fatal_error(`Invalid IPv6 address: '$1)')
+
+# Reverse an IPv6 address or block
+
+define(nsc_revaddr6, `substr(nsc_do_revaddr6(nsc_norm_v6($1)),1)')
+define(nsc_do_revaddr6, `ifelse($1,,,substr($1,0,1),:,`nsc_do_revaddr6(substr($1,1))',`nsc_do_revaddr6(substr($1,2)).substr($1,1,1).substr($1,0,1)')')
+define(nsc_revblock6, `nsc_do_revblock6(translit($1,/,`,'))')
+define(nsc_do_revblock6, `substr(nsc_revaddr6($1),dnl
+ifelse(eval($2%4),0,`eval(64-$2/2)',`nsc_fatal_error(`Prefixes must respect hex digit boundary')'))')
 
 # Iteration
 
-define(itera, `ifelse($#, 1, `iter($1)', `iter($1)`'itera(shift($@))')')
-define(iterate, `define(`iter', defn(`$1'))itera($2)')
+define(nsc_itera, `ifelse($1,,,`nsc_iter($1)')`'ifelse($#,1,,`nsc_itera(shift($@))')')
+define(nsc_iterate, `define(`nsc_iter', defn(`$1'))nsc_itera(shift($@))')
+
+# Generate name of reverse domain
+
+define(REV, `nsc_if_v6($1,`nsc_revblock6($1).ip6.arpa',`nsc_revaddr($1).in-addr.arpa')')
+
+# A for loop macro from m4 doc
+
+define(`nsc_forloop',
+   `pushdef(`$1', `$2')nsc__forloop(`$1', `$2', `$3', `$4')popdef(`$1')')
+define(`nsc__forloop',
+   `$4`'ifelse($1, `$3', ,
+   `define(`$1', incr($1))nsc__forloop(`$1', `$2', `$3', `$4')')')
+
+# Reporting errors
+
+define(`nsc_fatal_error', `errprint(`NSC error: $1
+')m4exit(1)')
+
+# Default values of parameters and user configuration
+
+define(`NAMED_RESTART_CMD', `ndc reload')
+
+define(`BIND_OPTIONS', `       # Other options can be added here via macro BIND_OPTIONS')
+
+define(`ROOT', `/etc/named')
+define(`CFDIR', `cf')
+define(`ZONEDIR', `zone')
+define(`BAKDIR', `bak')
+define(`VERSDIR', `ver')
+define(`ROOTCACHE', `root.cache')
+
+define(`REFRESH', HOURS(8))
+define(`RETRY', HOURS(2))
+define(`EXPIRE', DAYS(14))
+define(`MINTTL', DAYS(1))
+define(`NSNAME', translit(esyscmd(`hostname -f'),`
+',`'))
+define(`MAINTNAME', `root'.`nsc_corr_dot(NSNAME)')
+
+include(CFDIR/config)
index a729eba93aba4b8b5dc112b95a02ab0a453ef75f..0b4c96112271886ddd5858d4014f96c11dd2e873 100644 (file)
@@ -1,17 +1,21 @@
 dnl ###
-dnl ### NSC 2.2 -- BIND Config File Builder
-dnl ### (c) 1997--1999 Martin Mares <mj@ucw.cz>
+dnl ### NSC -- BIND Config File Builder
+dnl ### (c) 1997--2003 Martin Mares <mj@ucw.cz>
 dnl ###
+include(m4/dnslib.m4)
 
-# Definition of primary domain
+# Definition of primary domains
 
-define(`PRIMARY', `divert(0)zone "$1" in {
+define(`DO_PRIMARY', `divert(0)zone "$1" in {
        type master;
-       file "ZONEDIR/$1";
+       file "ZONEDIR/$2";
 };
 
 divert(-1)')
 
+define(`PRIMARY', `DO_PRIMARY($1,$1)')
+define(`REVERSE', `DO_PRIMARY(REV($1),nsc_if_v6($1,`nsc_revblock6($1)',`nsc_revaddr($1)'))')
+
 # Definition of secondary domain
 
 define(`SECONDARY', `divert(0)zone "$1" in {
@@ -22,20 +26,6 @@ define(`SECONDARY', `divert(0)zone "$1" in {
 
 divert(-1)')
 
-# Definition of reverse domain
-
-define(`REVERSE', `divert(0)zone "revaddr($1).in-addr.arpa" in {
-       type master;
-       file "ZONEDIR/revaddr($1)";
-};
-
-divert(-1)')
-
-# Definition of reverse sub-domain
-
-define(`PARTIAL', `SECONDARY(revaddr($1).in-addr.arpa,$3)')
-define(`PREVERSE', `REVERSE($1)')
-
 # Definition of forwarders for both normal and slave mode
 
 define(`FORWard', `patsubst(`$@',`,',`; ')')
@@ -53,25 +43,24 @@ divert(-1)')
 define(`CONFIG', `divert(0)$1
 divert(-1)')
 
-# BIND options
+# The preamble
+
+divert(0)dnl
+`#'
+`#'    BIND configuration file
+`#'    Generated by NSCVER (mkconf.m4) on CURRENT_DATE
+`#'    Please don't edit manually
+`#'
 
-define(`OPTIONS', `divert(0)options {
+options {
        directory "ROOT";
        interface-interval 0;
-$1};
+BIND_OPTIONS
+};
 
 zone "." in {
        type hint;
-       file "root.cache";
+       file "ROOTCACHE";
 };
 
-divert(-1)')
-
-divert(0)dnl
-`#'
-`#'    Name server configuration file
-`#'    Generated by mkconf.m4 on curdate
-`#'    Please don't edit manually
-`#'
-
 divert(-1)
index 81489faa6b131bc753f672fffe4720cc18529879..19942c5a93732fee72808897702fce3bec45b31c 100644 (file)
@@ -1,46 +1,23 @@
 dnl ###
-dnl ### NSC 2.2 -- Makefile Builder
-dnl ### (c) 1997--1999 Martin Mares <mj@ucw.cz>
+dnl ### NSC -- Makefile Builder
+dnl ### (c) 1997--2003 Martin Mares <mj@ucw.cz>
 dnl ###
+include(m4/dnslib.m4)
 
-# Things we allow to override
+# Definition of primary domains; secondaries we needn't take care of
 
-define(`named_restart_cmd', `ndc reload')
+define(`PRIMARIES', `')
 
-# List of all version files available
-
-define(`ALLVERS', CONF CACHE)
-define(`ADDVER', `define(`ALLVERS', ALLVERS` $1')')
-
-# Definition of primary domain
-
-define(`PRIMARY', `divert(0)VERSDIR/$1 ZONEDIR/$1: CFDIR/$1
-       `$'(NSC) CFDIR/$1 >ZONEDIR/$1 -DVERS=VERSDIR/$1
-
-divert(-1)
-ADDVER(VERSDIR/$1)
-')
-
-# Definition of reverse domain
-
-define(`REVCF', ` patsubst(CFDIR/$1,`^cf/\(.*\)\+\(.*\)$',`ZONEDIR/\1+\2')')
-define(`REVERSi', `define(`ev',revaddr($1))define(`ew',`shift(shift($@))')
-divert(0)VERSDIR/ev ZONEDIR/ev:iterate(`REVCF', `ew')
-       `$'(NSC)iterate(`REVCF', `ew') >ZONEDIR/ev -DVERS=VERSDIR/ev -DREVERSE=$2 -DREVBASE=$1
+define(`nsc_prepend_cf_one', ` 'CFDIR/`$1')
+define(`nsc_prepend_cf_multi', `nsc_iterate(`nsc_prepend_cf_one', $@)')
+define(`PRIMARY', `divert(0)ZONEDIR/$1:nsc_prepend_cf_multi($@) $(DDEPS)
+       `$'(NSC)nsc_prepend_cf_multi($@) >ZONEDIR/$1 -DVERS=VERSDIR/$1
 
 divert(-1)
-ADDVER(VERSDIR/ev)
+define(`PRIMARIES', PRIMARIES ZONEDIR/$1)
 ')
 
-define(`REVERSE', `REVERSi($1,$@)')
-define(`PREVERSE', `REVERSi($1,patsubst($1,`^\(.*\)\..*$',`\1'),shift($@))')
-
-# Definition of partial reverse zone delegation (also called classless in-addr.arpa)
-
-define(`PARTIAL', `divert(0)ZONEDIR/$1+$2:
-       `$'(PGEN) >ZONEDIR/$1+$2 -DBASE=revaddr($1) -DFROM=patsubst(`$1', `^.*\.\(.*\)$', `\1') -DCOUNT=$2 -DSERV=shift(shift($@))
-
-divert(-1)')
+define(`REVERSE', `PRIMARY(nsc_if_v6($1,`nsc_revblock6($1)',`nsc_revaddr($1)'), shift($@))')
 
 # Insertion of raw makefile material
 
@@ -49,15 +26,15 @@ divert(-1)')
 
 # Last words
 
-define(`cleanup', `divert(0)VERSDIR/.version: ALLVERS
-       named_restart_cmd
+define(`nsc_cleanup', `divert(0)VERSDIR/.version: CFDIR/domains ROOTCACHE`'PRIMARIES
+       NAMED_RESTART_CMD
        touch VERSDIR/.version
 
 clean:
        find BAKDIR ZONEDIR -type f -maxdepth 1 | xargs rm -f
 
 clobber: clean
-       rm -f Makefile CONF
+       rm -f Makefile named.conf
 
 distclean: clobber
        find VERSDIR -type f -maxdepth 1 | xargs rm -f
@@ -66,13 +43,14 @@ distclean: clobber
 divert(0)dnl
 `#'
 `#'    Nameserver Configuration Makefile
-`#'    Generated by mkmf.m4 on curdate
+`#'    Generated by NSCVER (mkmf.m4) on CURRENT_DATE
 `#'    Please don't edit manually
 `#'
 
-NSC=M4 NSCDIR/dnslib.m4 NSCDIR/nsc.m4
-PGEN=m4 NSCDIR/dnslib.m4 NSCDIR/pgen.m4
+`M4'=M4
+NSC=$(`M4') m4/nsc.m4
+DDEPS=m4/nsc.m4 m4/dnslib.m4 cf/config
 
 all: VERSDIR/.version
-m4wrap(`cleanup')
+m4wrap(`nsc_cleanup')
 divert(-1)
index f6828327ac80c43b0f6f5c0a5cf422264de1d48c..ad6fa7697806100823034475b86e753eebd357cb 100644 (file)
--- a/m4/nsc.m4
+++ b/m4/nsc.m4
 dnl ###
-dnl ### NSC 2.3 -- Zone File Generator
-dnl ### (c) 1997--2000 Martin Mares <mj@ucw.cz>
+dnl ### NSC -- Zone File Generator
+dnl ### (c) 1997--2003 Martin Mares <mj@ucw.cz>
 dnl ###
-dnl ### Usage: m4 nsc.m4 domain-source-files >zone-file
-dnl ###    Or: m4 nsc.m4 domain-source-files >rev-zone-file -DREVERSE=net-ip -DREVBASE=net-ip-to-SOA
+dnl ### Usage: m4 nsc.m4 domain-source-files >zone-file -DVERS=path-to-version-file
 dnl ###
+include(m4/dnslib.m4)
 
-# Default values of zone parameters:
+# Version number
+
+ifdef(`VERS',`',`nsc_fatal_error(`VERS macro not defined')')
 
-define(refresh, hours(8))
-define(retry, hours(2))
-define(expire, days(7))
-define(minttl, days(1))
-define(nsname, translit(esyscmd(`hostname -f'),`
+define(TODAY_CODE, translit(esyscmd(`date +"%Y%m%d"'),`
 ',`'))
-define(maintname, `root'.`corr_dot(nsname)')
+sinclude(VERS)
+# Backward compatibility with NSC 2.x version files
+ifdef(`last_today_code', `define(`LAST_TODAY_CODE',last_today_code)undefine(`last_today_code')')
+ifdef(`subver_num', `define(`SUBVER_NUM',subver_num)undefine(`subver_num')')
+ifelse(TODAY_CODE, LAST_TODAY_CODE, `', `define(`SUBVER_NUM',1)')
+syscmd(echo >VERS "`define'(`LAST_TODAY_CODE',TODAY_CODE) `define'(`SUBVER_NUM',incr(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))
 
-# Domain name
+# Record names
 
-define(whole_domain, `ifdef(`REVERSE', `define(esrever,revaddr(REVBASE))esrever.in-addr.arpa', `Xdomain')'))
-define(dotdomain, `ifelse(Xdomain,,,.Xdomain)')
+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)')
 
-# Generate reverse addressing if needed
+# SOA record
 
-define(stop_if_rev, `ifdef(`REVERSE', `divert(-1)')')
-define(mk_PTR, `divert
-revaddr(substr($1,incr(len(REVERSE)))) PTR     $2`'ifelse(index($2,`.'),-1,`dotdomain.',`')')
+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
+$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
+nsc_set_name(CURRENT_DOMAIN)dnl
+ifdef(`REVERSE_MODE',,`nsc_SOA')')
+
+# Reverse zones
+
+define(REVERSE, `divert(-1)
+       define(`REVERSE_MODE', `')
+       nsc_if_v6($1,`
+               define(`REVNET6', nsc_revblock6($1))
+       ',`
+               define(`REVNET', `$1.')
+               define(`REVLOW', `$2')
+               define(`REVHIGH', `$3')
+       ')
+')
 
-define(mk_ptr, `ifelse(REVERSE, substr($1, 0, len(REVERSE)),`mk_PTR($1,$2)')')
-define(emit_ptr, `ifdef(`REVERSE', `mk_ptr($1,$2)divert(-1)')')
+define(nsc_mk_PTR, `
+       divert`'$1      `PTR'   $2
+divert(-1)
+')
 
-# Version number
+define(nsc_auto_PTR4, `dnl
+ifdef(`REVNET', `
+       ifelse(REVNET, substr($1, 0, len(REVNET)), `
+               define(`REVX', substr($1, len(REVNET)))
+               ifelse(REVLOW, `',
+                       `nsc_mk_PTR(nsc_revaddr(REVX), $2)',
+                       `
+                               ifelse(eval((REVX >= REVLOW) && (REVX <= REVHIGH)), 1, `nsc_mk_PTR(REVX, $2)')
+                       ')
+               ')
+       ')dnl
+')
 
-define(ver_file, ifdef(`VERS',`VERS',`.nsc_version'))
-define(today_code, translit(esyscmd(`date +"%Y%m%d"'),`
-',`'))
-sinclude(ver_file)
-ifelse(today_code, last_today_code, `', `define(`subver_num',1)')
-syscmd(echo >ver_file "`define'(`last_today_code',today_code) `define'(`subver_num', incr(subver_num))")
-define(Subver_num, format(`%02d', subver_num))
-define(version,`today_code`'Subver_num')
+define(nsc_auto_PTR6, `dnl
+ifdef(`REVNET6', `
+       define(`REVA', nsc_revaddr6($1))
+       ifelse(REVNET6, substr(REVA, eval(63-len(REVNET6))), `
+               nsc_mk_PTR(substr(REVA, 0, eval(62-len(REVNET6))), $2)
+               ')
+       ')dnl
+')
 
-# Host / Subdomain name
+# A records
 
-define(emit_name, `ifdef(`keep_addr', `keep_addr`'undefine(`keep_addr')', `$1')')
+define(nsc_AONLY, `nsc_emit_name       nsc_if_v6($1,`AAAA      nsc_norm_v6($1)',``A'   $1')
+')
+define(nsc_A, `nsc_if_v6($1,`nsc_auto_PTR6',`nsc_auto_PTR4')($1,nsc_abs_name)nsc_AONLY($1)')
+define(ADDR, `nsc_iterate(`nsc_A', $@)dnl')
+define(DADDR, `nsc_iterate(`nsc_AONLY', $@)dnl')
 
-# SOA record
+# Host specification
 
-define(DO_SOA, `divert; Primary file for the whole_domain domain generated on curdate
+define(H, `nsc_set_name($1)nsc_iterate(`nsc_A', shift($@))dnl')
+define(DH, `nsc_set_name($1)nsc_iterate(`nsc_AONLY', shift($@))dnl')
 
-$TTL   minttl
-whole_domain.  `SOA'   corr_dot(nsname) maintname (
-               version refresh retry expire minttl )')
-define(SOA, `ifdef(`Xdomain',`define(`Xdomain',$1)',`define(`Xdomain',$1)DO_SOA')')
+# Subdomain specification and glue records
+
+define(D, `nsc_set_name($1)dnl')
+define(GLUE, `DH($@)')
 
 # NS record
 
-define(exNS, `emit_name        `NS'    corr_dot($1)
+define(nsc_NS, `nsc_emit_name  `NS'    nsc_corr_dot($1)
 ')
-define(NS, `iterate(`exNS', `$@')dnl')
+define(NS, `nsc_iterate(`nsc_NS', $@)dnl')
 
 # MX record
 
-define(exMX, `emit_name        `MX'    corr_dot($1)
+define(nsc_MX, `nsc_emit_name  `MX'    nsc_corr_dot($1)
 ')
-define(MX, `stop_if_rev`'iterate(`exMX', `$@')dnl')
+define(MX, `nsc_iterate(`nsc_MX', $@)dnl')
 
 # HINFO record
 
-define(HI, `   HINFO   "$1" "$2"')
+define(HI, `nsc_emit_name      HINFO   "$1" "$2"')
 
-# Host records
+# ALIASing records
 
-define(exH, `emit_ptr($1, cname)       A       $1
+define(nsc_ALIAS, `$1  `CNAME' CURRENT_NAME
 ')
-define(H, `define(`cname', $1)stop_if_rev`'$1`'iterate(`exH', `shift($@)')dnl')
+define(ALIAS, `nsc_iterate(`nsc_ALIAS', $@)dnl')
 
-# Reverse-only host records
+# CNAME records
 
-define(exRH, `emit_ptr($1, cname)')
-define(RH, `define(`cname', $1)stop_if_rev`'iterate(`exRH', `shift($@)')dnl')
+define(CNAME, `$1      `CNAME' nsc_corr_dot($2)')
 
-# Domain records
+# Explicit PTR records
 
-define(D, `stop_if_rev`'define(`keep_addr', $1)define(`cname', $1)dnl')
+define(PTR, `$1        `PTR'   nsc_corr_dot($2)')
 
-# Addressless entry (for example mail alias)
+# Shortcut for classless reverse delegation of a block
 
-define(HH, `define(`keep_addr', $1)define(`cname', $1)dnl')
-
-# ALIASing records
-
-define(exALIAS, `$1    CNAME cname
+define(REVBLOCK, `nsc_forloop(`i', $2, $3, `i' `CNAME' `i'.$1
+)D($1)
 ')
-define(ALIAS, `iterate(`exALIAS', `$@')dnl')
 
 # Cleanup actions
 
-define(cleanup, `
+define(nsc_cleanup, `ifdef(`DISABLE_LOCALHOST',,`
 localhost      A       127.0.0.1
-divert`'ifdef(`REVERSE',`
 ')')
-m4wrap(`cleanup')
-
-include(cf/config)
+m4wrap(`nsc_cleanup')
diff --git a/m4/pgen.m4 b/m4/pgen.m4
deleted file mode 100644 (file)
index c363133..0000000
+++ /dev/null
@@ -1,21 +0,0 @@
-dnl ###
-dnl ### NSC 2.2 -- Partial Reverse Delegation Generator
-dnl ### (c) 1997--1999 Martin Mares <mj@ucw.cz>
-dnl ###
-dnl ### Usage: m4 nsc.m4 >zone-file -DBASE=domain -DFROM=first-addr -DCOUNT=count -DSERV=primary-server
-dnl ###
-
-define(`XTHEMALL', `ifelse(`$2',`1',,`$1       CNAME   $1.BASE.in-addr.arpa.
-XTHEMALL(incr($1),decr($2))')')
-
-define(`partNS', `     ``NS''  $1
-')
-
-divert(0); Partial Reverse Delegation for COUNT entries starting with FROM in BASE.in-addr.arpa.
-; Generated by pgen.m4 on curdate. Please don't edit manually.
-
-`divert(0)'
-
-FROM   ``NS''  `corr_dot(nsname)'
-iterate(`partNS', `SERV')
-XTHEMALL(incr(FROM),decr(COUNT))`divert(-1)'dnl
diff --git a/nsc.lsm b/nsc.lsm
index 6cf5fc1faf2dd6fa5bc2dcf6d418210bdb14a4b2..dac5d0567f2f4d78b12827b63648f9b032b9bc56 100644 (file)
--- a/nsc.lsm
+++ b/nsc.lsm
@@ -1,14 +1,14 @@
 Begin3
 Title:          Name Server Configurator
-Version:        2.3
-Entered-date:   010627
+Version:        2.99a
+Entered-date:   031220
 Description:    Set of utilities and M4 scripts for easy maintenance of
-               DNS server configuration and zone files. Requires GNU m4
-               and BIND version 8.X or newer.
+               DNS zone files and also automatic generation of BIND 8/9 configuration
+               files. Requires GNU m4 and a Posix-compatible shell.
 Keywords:       named, bind, dns
 Author:         mj@ucw.cz (Martin Mares)
 Maintained-by:  mj@ucw.cz (Martin Mares)
-Primary-site:   atrey.karlin.mff.cuni.cz pub/local/mj/net/nsc-2.3.tar.gz
-Alternate-site: metalab.unc.edu pub/Linux/system/network/management/nsc-2.3.tar.gz
+Primary-site:   atrey.karlin.mff.cuni.cz pub/local/mj/net/nsc-2.99a.tar.gz
+Alternate-site: metalab.unc.edu pub/Linux/system/network/management/nsc-2.99a.tar.gz
 Copying-policy: GPL
 End
index a20028e3d847153360f5f6ad2160496c8f63db85..034dc29501736009bf38759e6f5bde6cd6757e4b 100644 (file)
@@ -1,19 +1,22 @@
+;
 ;       This file holds the information on root name servers needed to
 ;       initialize cache of Internet domain name servers
 ;       (e.g. reference this file in the "cache  .  <file>"
 ;       configuration file of BIND domain name servers).
 ;
-;       This file is made available by InterNIC registration services
-;       under anonymous FTP as
-;           file                /domain/named.root
-;           on server           FTP.RS.INTERNIC.NET
-;       -OR- under Gopher at    RS.INTERNIC.NET
-;           under menu          InterNIC Registration Services (NSI)
-;              submenu          InterNIC Registration Archives
-;           file                named.root
+;       This file is made available by the Internet Assigned Numbers Authority
+;      (IANA) as
+;              <URL:ftp://ftp.iana.org/iana/named.root>.
+;
+;      A copy of this file is also available (for compatibility purposes)
+;      from InterNIC registration services as
+;              <URL:ftp://ftp.rs.internic.net/domain/named.root>
+;
+;      New versions of this file are announced periodically on the
+;      <namedroppers@internic.net>d <ietf@ietf.org> mailing lists.
 ;
-;       last update:    Aug 22, 1997
-;       related version of root zone:   1997082200
+;       last update:    January 19, 1999
+;       related version of root zone:   1999011900
 ;
 ;
 ; formerly NS.INTERNIC.NET
@@ -66,10 +69,10 @@ I.ROOT-SERVERS.NET.      3600000      A     192.36.148.17
 .                        3600000      NS    J.ROOT-SERVERS.NET.
 J.ROOT-SERVERS.NET.      3600000      A     198.41.0.10
 ;
-; housed in LINX, operated by RIPE NCC
+; housed at LINX, operated by RIPE NCC
 ;
 .                        3600000      NS    K.ROOT-SERVERS.NET.
-K.ROOT-SERVERS.NET.      3600000      A     193.0.14.129 
+K.ROOT-SERVERS.NET.      3600000      A     193.0.14.129
 ;
 ; temporarily housed at ISI (IANA)
 ;