]> granicus.if.org Git - pdns/commitdiff
fix up reading a blob at the very end of a packet, fix writing out 48 bit numbers...
authorBert Hubert <bert.hubert@netherlabs.nl>
Thu, 9 Apr 2009 23:17:50 +0000 (23:17 +0000)
committerBert Hubert <bert.hubert@netherlabs.nl>
Thu, 9 Apr 2009 23:17:50 +0000 (23:17 +0000)
git-svn-id: svn://svn.powerdns.com/pdns/trunk/pdns@1353 d19b8d6e-7fed-0310-83ef-9ca221ded41b

pdns/dnsparser.cc
pdns/dnsrecords.cc
pdns/dnsrecords.hh
pdns/dnswriter.cc
pdns/qtype.hh

index 6b0efc3d9a2de5616dc0e7073a4ccb4ffc0fbb27..f6e7f9f27aa21ac4b5308e508979742dc113c97b 100644 (file)
@@ -444,7 +444,7 @@ void PacketReader::xfrBlob(string& blob)
 void PacketReader::xfrBlob(string& blob, int length)
 {
   if(length) {
-    blob.assign(&d_content.at(d_pos), &d_content.at(d_pos + length ) );
+    blob.assign(&d_content.at(d_pos), &d_content.at(d_pos + length - 1 ) + 1 );
     
     d_pos += length;
   }
index 90bed74868a12ffbec845dcecd48192c45afff3c..b90d3728ad3a1121ac10994e22db043cdf1eac5d 100644 (file)
@@ -1,6 +1,6 @@
 /*
     PowerDNS Versatile Database Driven Nameserver
-    Copyright (C) 2005 - 2008  PowerDNS.COM BV
+    Copyright (C) 2005 - 2009  PowerDNS.COM BV
 
     This program is free software; you can redistribute it and/or modify
     it under the terms of the GNU General Public License version 2 as 
@@ -389,7 +389,7 @@ void reportBasicTypes()
   PTRRecordContent::report();
   DNSRecordContent::regist(3, ns_t_txt, &TXTRecordContent::make, &TXTRecordContent::make, "TXT");
   TXTRecordContent::report();
-  DNSRecordContent::regist(1, 255, 0, 0, "ANY");
+  DNSRecordContent::regist(1, QType::ANY, 0, 0, "ANY");
 }
 
 void reportOtherTypes()
@@ -407,7 +407,7 @@ void reportOtherTypes()
    SSHFPRecordContent::report();
    CERTRecordContent::report();
    NSECRecordContent::report();
-   TSIGRecordContent::report();
+   DNSRecordContent::regist(0xff, QType::TSIG, &TSIGRecordContent::make, &TSIGRecordContent::make, "TSIG");
    OPTRecordContent::report();
 }
 
index 03fe6815193445a414a789058cf8fb80ddaf612d..9a424ca8f0820b50c0b8494ad3ad181569ebf889 100644 (file)
@@ -125,6 +125,7 @@ class TSIGRecordContent : public DNSRecordContent
 {
 public:
   includeboilerplate(TSIG)
+  TSIGRecordContent() : DNSRecordContent(QType::TSIG) {}
 
   string d_algoName;
   uint64_t d_time; // 48 bits
index 7728f08fc9c697096a562e1524009c2b373e4a0f..ba6606753dfc51b103f30e01ddfc9924f5436f76 100644 (file)
@@ -107,12 +107,10 @@ void DNSPacketWriter::addOpt(int udpsize, int extRCode, int Z, const vector<pair
 void DNSPacketWriter::xfr48BitInt(uint64_t val)
 {
   unsigned char bytes[6];
-  bytes[5] = val % 0xff; val /= 0xff;  // untested code! XXX FIXME
-  bytes[4] = val % 0xff; val /= 0xff;
-  bytes[3] = val % 0xff; val /= 0xff;
-  bytes[2] = val % 0xff; val /= 0xff;
-  bytes[1] = val % 0xff; val /= 0xff;
-  bytes[0] = val % 0xff; val /= 0xff;
+  uint16_t theLeft = htons(val >> 32);
+  uint32_t theRight = htonl(val & 0xffffffffU);
+  memcpy(bytes, (void*)&theLeft, 2);
+  memcpy(bytes+2, (void*)&theRight, 4);
 
   d_record.insert(d_record.end(), bytes, bytes + 6);
 }
index 82fc1908abb1e868a36d8b665d7f750d03d4d3b3..0a2c9e79543e01a9efa0421dc805421fd4c5d933 100644 (file)
@@ -75,7 +75,7 @@ public:
 #undef DS   
   enum typeenum {A=1,NS=2,CNAME=5,SOA=6, MR=9, PTR=12,HINFO=13,MX=15,TXT=16,RP=17,AFSDB=18,KEY=25,AAAA=28,LOC=29,SRV=33,NAPTR=35, KX=36, 
                 CERT=37,OPT=41, DS=43, SSHDP=44, IPSECKEY=45, RRSIG=46, NSEC=47, DNSKEY=48, DHCID=49, 
-                SPF=99, AXFR=252, IXFR=251, ANY=255, URL=256, MBOXFW=257, CURL=258, ADDR=259} types;
+                SPF=99, TSIG=250, AXFR=252, IXFR=251, ANY=255, URL=256, MBOXFW=257, CURL=258, ADDR=259} types;
   typedef pair<string,int> namenum; 
   static vector<namenum> names;
 private: