Changeset 2682

Show
Ignore:
Timestamp:
07/20/12 13:18:55 (10 months ago)
Author:
peter
Message:

add closest encloser/next closer/wildcard at encloser debugging to nsec3dig

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • trunk/pdns/pdns/nsec3dig.cc

    r2681 r2682  
    1818} 
    1919 
    20 string proveOrDeny(const nsec3set &nsec3s, const string &qname, const string &salt, unsigned int iters) 
     20string proveOrDeny(const nsec3set &nsec3s, const string &qname, const string &salt, unsigned int iters, set<string> &proven, set<string> &denied) 
    2121{ 
    2222  string hashed = nsec3Hash(qname, salt, iters); 
     
    2929    if(hashed == base) 
    3030    { 
     31      proven.insert(qname); 
    3132      return qname+" ("+hashed+") proven by base of "+base+".."+next; 
    3233    } 
    3334    if(hashed == next) 
    3435    { 
     36      proven.insert(qname); 
    3537      return qname+" ("+hashed+") proven by next of "+base+".."+next; 
    3638    } 
     
    3840       (next < base && (hashed < next || hashed > base))) 
    3941    { 
     42      denied.insert(qname); 
    4043      return qname+" ("+hashed+") denied by "+base+".."+next; 
    4144    } 
     
    125128 
    126129  cout<<"== nsec3 prove/deny report follows =="<<endl; 
    127   string r=proveOrDeny(nsec3s, qname, nsec3salt, nsec3iters); 
     130  set<string> proven; 
     131  set<string> denied; 
     132  string r=proveOrDeny(nsec3s, qname, nsec3salt, nsec3iters, proven, denied); 
    128133  string shorter(qname); 
    129134  do { 
    130135    string r; 
    131     r=proveOrDeny(nsec3s, shorter, nsec3salt, nsec3iters); 
     136    r=proveOrDeny(nsec3s, shorter, nsec3salt, nsec3iters, proven, denied); 
    132137    if(r.size()) cout<<r<<endl; 
    133     r=proveOrDeny(nsec3s, "*."+shorter, nsec3salt, nsec3iters); 
     138    r=proveOrDeny(nsec3s, "*."+shorter, nsec3salt, nsec3iters, proven, denied); 
    134139    if(r.size()) cout<<r<<endl; 
    135140  } while(chopOff(shorter)); 
     141 
     142  if(names.count(qname)) 
     143  { 
     144    cout<<"== qname found in names, not investigating denial any further"<<endl; 
     145    exit(EXIT_SUCCESS); 
     146  } 
     147  cout<<"== qname not found in names, investigating denial"<<endl; 
     148  if(proven.count(qname)) 
     149  { 
     150    cout<<"qname found proven, NODATA response?"<<endl; 
     151    exit(EXIT_SUCCESS); 
     152  } 
     153  shorter=qname; 
     154  string encloser; 
     155  string nextcloser; 
     156  string prev(qname); 
     157  while(chopOff(shorter)) 
     158  { 
     159    if(proven.count(shorter)) 
     160    { 
     161      encloser=shorter; 
     162      nextcloser=prev; 
     163      cout<<"found closest encloser at "<<encloser<<endl; 
     164      cout<<"next closer is "<<nextcloser<<endl; 
     165      break; 
     166    } 
     167    prev=shorter; 
     168  } 
     169  if(encloser.size() && nextcloser.size()) 
     170  { 
     171    if(denied.count(nextcloser)) 
     172    { 
     173      cout<<"next closer ("<<nextcloser<<") is denied correctly"<<endl; 
     174    } 
     175    else 
     176    { 
     177      cout<<"next closer ("<<nextcloser<<") NOT denied"<<endl; 
     178    } 
     179    if(denied.count("*."+encloser)) 
     180    { 
     181      cout<<"wildcard at encloser (*."<<encloser<<") is denied correctly"<<endl; 
     182    } 
     183    else 
     184    { 
     185      cout<<"wildcard at encloser (*."<<encloser<<") is NOT denied"<<endl; 
     186    } 
     187  } 
     188  exit(EXIT_SUCCESS); 
    136189} 
    137190catch(std::exception &e)