]> granicus.if.org Git - pdns/commitdiff
fix up NSEC3 rendering/generation/parsing
authorBert Hubert <bert.hubert@netherlabs.nl>
Thu, 13 May 2010 17:16:47 +0000 (17:16 +0000)
committerBert Hubert <bert.hubert@netherlabs.nl>
Thu, 13 May 2010 17:16:47 +0000 (17:16 +0000)
git-svn-id: svn://svn.powerdns.com/pdns/trunk/pdns@1614 d19b8d6e-7fed-0310-83ef-9ca221ded41b

pdns/nsecrecords.cc
pdns/rcpgenerator.cc
pdns/rcpgenerator.hh

index 98b9d874d80bd31ca0e7d19c88476366cc883585..5a0681563f8192db2d19d9b19acbac9fe95ccfa2 100644 (file)
@@ -108,8 +108,8 @@ NSEC3RecordContent::NSEC3RecordContent(const string& content, const string& zone
   rtr.xfr16BitInt(d_iterations);
 
   rtr.xfrHexBlob(d_salt);
-  rtr.xfrHexBlob(d_nexthash);
-
+  rtr.xfrBase32HexBlob(d_nexthash);
+  
   while(!rtr.eof()) {
     uint16_t type;
     rtr.xfrType(type);
@@ -127,7 +127,7 @@ void NSEC3RecordContent::toPacket(DNSPacketWriter& pw)
 
   pw.xfr8BitInt(d_nexthash.length());
   pw.xfrBlob(d_nexthash);
-
+  
   uint8_t res[34];
   memset(res, 0, sizeof(res));
 
@@ -157,8 +157,9 @@ NSEC3RecordContent::DNSRecordContent* NSEC3RecordContent::make(const DNSRecord &
   pr.xfrBlob(ret->d_salt, len);
 
   pr.xfr8BitInt(len);
+  
   pr.xfrBlob(ret->d_nexthash, len);
-
+  
   string bitmap;
   pr.xfrBlob(bitmap);
   
@@ -171,11 +172,11 @@ NSEC3RecordContent::DNSRecordContent* NSEC3RecordContent::make(const DNSRecord &
     throw MOADNSException("NSEC3 record with impossibly small bitmap");
   
   if(bitmap[0])
-    throw MOADNSException("Can't deal with NSEC mappings > 255 yet");
+    throw MOADNSException("Can't deal with NSEC3 mappings > 255 yet");
   
   unsigned int bitmaplen=bitmap[1];
   if(bitmap.size()!=2+bitmaplen)
-    throw MOADNSException("Can't deal with multi-part NSEC mappings yet");
+    throw MOADNSException("Can't deal with multi-part NSEC3 mappings yet");
   
   for(unsigned int n=0 ; n < bitmaplen ; ++n) {
     uint8_t val=bitmap[2+n];
@@ -198,7 +199,6 @@ string NSEC3RecordContent::getZoneRepresentation() const
 
   rtw.xfrHexBlob(d_salt);
   rtw.xfrBase32HexBlob(d_nexthash);
-  
   for(set<uint16_t>::const_iterator i=d_set.begin(); i!=d_set.end(); ++i) {
     ret+=" ";
     ret+=NumberToType(*i);
@@ -222,8 +222,8 @@ NSEC3PARAMRecordContent::NSEC3PARAMRecordContent(const string& content, const st
 {
   RecordTextReader rtr(content, zone);
   rtr.xfr8BitInt(d_algorithm); 
-       rtr.xfr8BitInt(d_flags); 
-       rtr.xfr16BitInt(d_iterations); 
+  rtr.xfr8BitInt(d_flags); 
+  rtr.xfr16BitInt(d_iterations); 
   rtr.xfrHexBlob(d_salt);
 }
 
index 54bc3d931ab7af031a4c1c230bde9cf7af4c0c79..6485c5e808cd00d8e5e2ab5e63d634c3270ce0ec 100644 (file)
@@ -245,6 +245,17 @@ void RecordTextReader::xfrHexBlob(string& val)
   HEXDecode(d_string.c_str()+pos, d_string.c_str() + d_pos, val);
 }
 
+void RecordTextReader::xfrBase32HexBlob(string& val)
+{
+  skipSpaces();
+  int pos=(int)d_pos;
+  while(d_pos < d_end && !dns_isspace(d_string[d_pos]))
+    d_pos++;
+
+  val=fromBase32Hex(string(d_string.c_str()+pos, d_pos-pos));
+}
+
+
 void RecordTextWriter::xfrBase32HexBlob(const string& val)
 {
   if(!d_string.empty())
index 151a83da27df746c4026832409f53148f6df040e..2dc9bedc6467a47917f2cd343c1519ec30cfd99d 100644 (file)
@@ -54,7 +54,7 @@ public:
   void xfrLabel(string& val, bool compress=false);
   void xfrText(string& val, bool multi=false);
   void xfrHexBlob(string& val);
-
+  void xfrBase32HexBlob(string& val);
 
   void xfrBlob(string& val, int len=-1);