• Simon Kelley's avatar
    Fix caching logic for validated answers. · a6004d7f
    Simon Kelley authored
    The current logic is naive in the case that there is more than
    one RRset in an answer (Typically, when a non-CNAME query is answered
    by one or more CNAME RRs, and then then an answer RRset.)
    
    If all the RRsets validate, then they are cached and marked as validated,
    but if any RRset doesn't validate, then the AD flag is not set (good) and
    ALL the RRsets are cached marked as not validated.
    
    This breaks when, eg, the answer contains a validated CNAME, pointing
    to a non-validated answer. A subsequent query for the CNAME without do
    will get an answer with the AD flag wrongly reset, and worse, the same
    query with do will get a cached answer without RRSIGS, rather than
    being forwarded.
    
    The code now records the validation of individual RRsets and that
    is used to correctly set the "validated" bits in the cache entries.
    a6004d7f
rfc1035.c 50.3 KB