Changeset 1359

Show
Ignore:
Timestamp:
05/16/09 17:33:21 (16 months ago)
Author:
ahu
Message:

preliminary infrastructure for signing messages with TSIG in a clean way

Location:
trunk/pdns/pdns
Files:
3 modified

Legend:

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

    r1353 r1359  
    221221        dr.d_place=DNSRecord::Additional; 
    222222       
     223      unsigned int recordStartPos=pr.d_pos; 
     224 
    223225      string label=pr.getLabel(); 
    224226       
     
    233235      dr.d_content=boost::shared_ptr<DNSRecordContent>(DNSRecordContent::mastermake(dr, pr)); 
    234236      d_answers.push_back(make_pair(dr, pr.d_pos)); 
     237 
     238      if(dr.d_type == QType::TSIG && dr.d_class == 0xff)  
     239        d_tsigPos = recordStartPos + sizeof(struct dnsheader); 
    235240    } 
    236241 
  • trunk/pdns/pdns/dnsparser.hh

    r1232 r1359  
    201201  } 
    202202 
    203   static const string NumberToType(uint16_t num) 
    204   { 
    205     if(!getNamemap().count(make_pair(1,num))) 
     203  static const string NumberToType(uint16_t num, uint16_t classnum=1) 
     204  { 
     205    if(!getNamemap().count(make_pair(classnum,num))) 
    206206      return "#" + lexical_cast<string>(num); 
    207207      //      throw runtime_error("Unknown DNS type with numerical id "+lexical_cast<string>(num)); 
    208     return getNamemap()[make_pair(1,num)]; 
     208    return getNamemap()[make_pair(classnum,num)]; 
    209209  } 
    210210 
     
    267267 
    268268//! This class can be used to parse incoming packets, and is copyable 
    269 class MOADNSParser 
     269class MOADNSParser : public boost::noncopyable 
    270270{ 
    271271public: 
    272272  //! Parse from a string 
    273   MOADNSParser(const string& buffer)  
     273  MOADNSParser(const string& buffer)  : d_tsigPos(0) 
    274274  { 
    275275    init(buffer.c_str(), (unsigned int)buffer.size()); 
     
    277277 
    278278  //! Parse from a pointer and length 
    279   MOADNSParser(const char *packet, unsigned int len) 
     279  MOADNSParser(const char *packet, unsigned int len) : d_tsigPos(0) 
    280280  { 
    281281    init(packet, len); 
     
    299299  } 
    300300 
    301    
     301  uint16_t getTSIGPos() 
     302  { 
     303    return d_tsigPos; 
     304  } 
    302305private: 
    303306  void getDnsrecordheader(struct dnsrecordheader &ah); 
    304307  void init(const char *packet, unsigned int len); 
    305308  vector<uint8_t> d_content; 
     309  uint16_t d_tsigPos; 
    306310}; 
    307311 
  • trunk/pdns/pdns/dnswriter.hh

    r1232 r1359  
    9494  dnsheader* getHeader(); 
    9595  void getRecords(string& records); 
     96  const vector<uint8_t>& getRecordBeingWritten() { return d_record; } 
    9697 
    9798private: 
    98   vector<uint8_t>& d_content; 
     99  vector <uint8_t>& d_content; 
    99100  vector <uint8_t> d_record; 
    100101  string d_qname;