zone revision 816e576f77e2c46df3e3d97d65822aa8aded7c4b
ab9a926b36c2aa87e6e67a5179834093ed233ff4Luke SmithCopyright (C) 1999, 2000 Internet Software Consortium.
ab9a926b36c2aa87e6e67a5179834093ed233ff4Luke SmithSee COPYRIGHT in the source root or http://isc.org/copyright.html for terms.
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith $Id: zone,v 1.8 2000/08/09 04:37:29 tale Exp $
ab9a926b36c2aa87e6e67a5179834093ed233ff4Luke Smith Zones are the unit of delegation in the DNS and may go from holding
ab9a926b36c2aa87e6e67a5179834093ed233ff4Luke Smith RR's only at the zone top to holding the complete hierachy (private
ab9a926b36c2aa87e6e67a5179834093ed233ff4Luke Smith roots zones). Zones have an associated database which is the
ab9a926b36c2aa87e6e67a5179834093ed233ff4Luke Smith container for the RR sets that make up the zone.
ab9a926b36c2aa87e6e67a5179834093ed233ff4Luke Smith Zone have certain properties associated with them.
ab9a926b36c2aa87e6e67a5179834093ed233ff4Luke Smith * master / slave / stub / hint / cache / forward
ab9a926b36c2aa87e6e67a5179834093ed233ff4Luke Smith * serial number
ab9a926b36c2aa87e6e67a5179834093ed233ff4Luke Smith * signed / unsigned
ab9a926b36c2aa87e6e67a5179834093ed233ff4Luke Smith * update periods (refresh / retry) (slave / stub)
ab9a926b36c2aa87e6e67a5179834093ed233ff4Luke Smith * last update time (slave / stub)
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith * access restrictions
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith * transfer restrictions (master / slave)
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith * update restictions (master / slave)
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith * expire period (slave / stub)
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith * children => bottom
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith * rrsets / data
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith * transfer "in" in progress
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith * transfers "out" in progress
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith * "current" check in progress
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith * our masters
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith * primary master name (required to auto generate our masters)
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith * master file name
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith * database name
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith * database type
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith * initially only master_file (BIND 4 & 8)
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith * expanded axfr + ixfr
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith * transaction logs
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith * notification lists
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith * static additional sites (stealth servers)
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith * dynamically learned sites (soa queries)
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith Zones have two types of versions associated with them.
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith The image of the "current" zone when a AXFR out is in progress.
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith There may be several of these at once but they cease to need
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith to exist once the AXFR's on this version has completed. These
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith are maintained by the various database access methods.
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith These are virtual versions of the zone and are required to
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith support IXFR requests. While the entire contents of the old
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith version does not need to be kept, a change log needs to be
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith kept. An index into this log would be useful in speeding
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith up replies. These versions have an explict expiry date.
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith "How long are we going to keep them operationally?"
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith While there are expriry dates based on last update /
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith change time + expire. In practice holding the deltas
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith for a few refresh periods should be enough. If the network
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith and servers are up one is enough.
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith "How are we going to generate them from a master file?"
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith UPDATE should not be the only answer to this question.
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith We need a tool that takes the current zone & new zone.
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith Verifies the new zone, generates a delta and feeds this
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith at named. It could well be part of ndc but does not have
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith Zones need to have certain operations performed on them. The need to
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith * updated (UPDATE / IXFR)
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith * copied out in full (AXFR) or as partial deltas (IXFR)
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith * generate a delta between two given versions.
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith * signed / resigned
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith * maintenance
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith validate current soa
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith remove old deltas / consolidation
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith purge stale rrsets (cache)
ab9a926b36c2aa87e6e67a5179834093ed233ff4Luke Smith * notification
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith responding to
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith While not strictly a nameserver function, bad delegation and bad
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith slave setups are continual and ongoing sources of problems in the
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith DNS. Periodic checks to ensure parent and child servers agree on
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith the list of nameservers and that slaves are tracking the changes
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith made in the master server's zone will allow problems in
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith configurations to be identified earlier providing for a more stable
a3b15d60042c81a524cebb94370e5a234a19d04bLuke SmithCompatability:
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith Zones are required to be configuration file compatable with
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith typedef enum {
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith dns_zone_none = 0,
ab9a926b36c2aa87e6e67a5179834093ed233ff4Luke Smith dns_zone_master,
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith dns_zone_slave,
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith dns_zone_stub,
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith dns_zone_hint,
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith dns_zone_cache,
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith dns_zone_forward
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith } dns_zonetypes_t;
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith typedef struct dns_ixfr dns_ixfr_t;
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith struct dns_ixfr {
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith unsigned int magic; /* IXFR */
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith isc_uint32_t serial;
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith time_t expire;
eb6c1c09177446c3a7fa974e4658cbd555c5be18Luke Smith unsigned int offset;
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith ISC_LINK(dns_ixfr_t) link;
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith struct dns_zone {
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith unsigned int magic; /* ZONE */
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith dns_name_t name;
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith dns_rdataclass_t class;
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith dns_zonetypes_t type;
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith dns_bt_t top;
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith isc_uint32_t version;
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith isc_uint32_t serial;
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith isc_uint32_t refresh;
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith isc_uint32_t retry;
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith isc_uint32_t serial;
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith char *masterfile;
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith dns_acl_t *access;
ab9a926b36c2aa87e6e67a5179834093ed233ff4Luke Smith dns_acl_t *transfer;
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith dns_acl_t *acl;
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith dns_scl_t *scl; /* tsig based acl */
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith char *database;
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith ISC_LIST(dns_ixfr_t) ixfr;
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith dns_zone_init(dns_zone_t *zone, dns_rdataclass_t class, isc_mem_t *mxtc);
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith dns_zone_invalidate(dns_zone_t *zone);
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith dns_ixfr_init(dns_ixfr_t *ixfr, unsigned long serial, time_t expire);
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith dns_ixfr_invalidate(dns_ixfr_t *ixfr);
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith dns_zone_axfrout(dns_zone_t *zone);
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith Initiate outgoing zone transfer.
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith dns_zone_axfrin(dns_zone_t *zone, isc_sockaddr_t *addr);
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith Initiate transfer of the zone from the given server or the
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith masters masters listed in the zone structure.
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith dns_zone_maintenance(dns_zone_t *zone);
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith Perform any maintenance operations required on the zone
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith * initiate up to date checks
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith * expire zones
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith * initiate ixfr version expire consolidation
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith dns_zone_locateprimary(dns_zone_t *zone);
ab9a926b36c2aa87e6e67a5179834093ed233ff4Luke Smith Working from the root zone locate the primary master for the zone.
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith Used if masters are not given in named.conf.
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith dns_zone_locateservers(dns_zone_t *zone);
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith Working from the root zone locate the servers for the zone.
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith Primary master moved to first in list if in NS set. Remove self
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith Used if masters are not given in named.conf.
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith dns_zone_notify(dns_zone_t *);
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith Queue notify messages.
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith dns_zone_checkparents(dns_zone_t *);
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith check that the parent nameservers NS lists for this zone agree with
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith the NS list this zone, check glue A records. Warn if not identical.
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith This operation is performed on master zones.
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith dns_zone_checkchildren(dns_zone_t *);
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith check that the child zones NS lists agree with the NS lists in this
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith zone, check glue records. Warn if not identical.
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith dns_zone_checkservers(dns_zone_t *);
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith check that all the listed servers for the zone agree on NS list and
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith serial number. NOTE only errors which continue over several refresh
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith periods to be reported.
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith dns_zone_dump(dns_zone_t *, FILE *fp);
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith Write the contents of the zone to the file associated with fp.
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith dns_zone_validate(dns_zone_t *);
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith Validate the zone contents using DNSSEC.
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith dns_zone_tordatalist(dns_zone_t *zone, dns_rdatalist_t *list)
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith dns_zone_addmaster(dns_zone_t *zone, isc_sockaddr_t *addr);
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith Add addr to the set of masters for the zone.
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith dns_zone_clearmasters(dns_zone_t *zone);
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith Clear the master set.
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith dns_zone_setreadacl(dns_zone_t *, dns_acl_t *)
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith dns_zone_setxfracl(dns_zone_t *, dns_acl_t *)
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith dns_zone_addnotify(dns_zone_t *, isc_sockaddr_t *addr, isc_boolean_t perm);
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith dns_zone_clearnotify(dns_zone_t *)
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith dns_zone_load(dns_zone_t *);
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith dns_zone_consolidate(dns_zone_t *);
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith Consolidate on disk copy of zone.