ncache revision 9c3531d72aeaad6c5f01efe6a1c82023e1379e4d
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob AusteinCopyright (C) 1999, 2000 Internet Software Consortium.
11e9368a226272085c337e9e74b79808c16fbdbaTinderbox UserSee COPYRIGHT in the source root or http://www.isc.org/copyright for terms.
75c0816e8295e180f4bc7f10db3d0d880383bc1cMark Andrews
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein$Id: ncache,v 1.3 2000/06/22 21:53:53 tale Exp $
4a14ce5ba00ab7bc55c99ffdcf59c7a4ab902721Automatic Updater
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob AusteinNegative Caching
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob AusteinThe non-DNSSEC case is pretty easy.
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein foundname = soa name
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein rdataset = soa
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein node = NULL
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob AusteinDNSSEC complicates things a lot, because we have to return one or more NXT
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austeinrecords (if we have them) as proof. Another tricky bit here is that we may
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austeinhave an NXT record so we know the answer is NODATA, but we don't have the SOA
ea94d370123a5892f6c47a97f21d1b28d44bb168Tinderbox Userso we can't make a NODATA response that a non-DNSSEC-aware server could
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austeincache. Life would sure be easier if we knew if the client understood DNSSEC.
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob AusteinNot sure what to do in this case. Probably return delegation to force client
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austeinto ask authority.
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
e21a2904f02a03fa06b6db04d348f65fe9c67b2bMark Andrews
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob AusteinPerhaps we should just create some kind of meta-rdata, the "negative cache
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austeinrdata type"?
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob AusteinOr maybe something like:
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austeindns_rdataset_ncachefirst()
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austeindns_rdataset_ncachenext()
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austeindns_rdataset_ncachecurrent()
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austeindns_db_ncachenew(db, type) /* type can be any */
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austeindns_db_ncachesoa(name, rdataset)
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austeindns_db_ncachenxt(name, rdataset)
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austeindns_db_ncacheadd(db, name, version)
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob AusteinIck. I favor the former.
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein