~ubuntu-branches/ubuntu/precise/pdns-recursor/precise

« back to all changes in this revision

Viewing changes to zoneparser-tng.cc

  • Committer: Bazaar Package Importer
  • Author(s): Matthijs Möhlmann
  • Date: 2011-01-22 16:39:02 UTC
  • mto: (1.1.8 upstream) (4.2.10 sid)
  • mto: This revision was merged to the branch mainline in revision 21.
  • Revision ID: james.westby@ubuntu.com-20110122163902-ee067v1pnad3f1zl
Import upstream version 3.3

Show diffs side-by-side

added added

removed removed

Lines of Context:
225
225
  return "on line "+lexical_cast<string>(d_filestates.top().d_lineno)+" of file '"+d_filestates.top().d_filename+"'";
226
226
}
227
227
 
 
228
// ODD: this function never fills out the prio field! rest of pdns compensates though
228
229
bool ZoneParserTNG::get(DNSResourceRecord& rr) 
229
230
{
230
231
 retry:;
365
366
    }
366
367
  }
367
368
 
368
 
  vector<string> soaparts;
 
369
  vector<string> recparts;
369
370
  switch(rr.qtype.getCode()) {
370
371
  case QType::MX:
 
372
    stringtok(recparts, rr.content);
 
373
    if(recparts.size()==2) {
 
374
      recparts[1] = toCanonic(d_zonename, recparts[1]);
 
375
      rr.content=recparts[0]+" "+recparts[1];
 
376
    }
 
377
    break;
 
378
    
371
379
  case QType::NS:
372
380
  case QType::CNAME:
373
381
  case QType::PTR:
377
385
    break;
378
386
 
379
387
  case QType::SOA:
380
 
    stringtok(soaparts, rr.content);
381
 
    if(soaparts.size() > 1) {
382
 
      soaparts[0]=toCanonic(d_zonename, soaparts[0]);
383
 
      soaparts[1]=toCanonic(d_zonename, soaparts[1]);
 
388
    stringtok(recparts, rr.content);
 
389
    if(recparts.size() > 1) {
 
390
      recparts[0]=toCanonic(d_zonename, recparts[0]);
 
391
      recparts[1]=toCanonic(d_zonename, recparts[1]);
384
392
    }
385
393
    rr.content.clear();
386
 
    for(string::size_type n = 0; n < soaparts.size(); ++n) {
 
394
    for(string::size_type n = 0; n < recparts.size(); ++n) {
387
395
      if(n)
388
396
        rr.content.append(1,' ');
389
397
 
390
398
      if(n > 1)
391
 
        rr.content+=lexical_cast<string>(makeTTLFromZone(soaparts[n]));
 
399
        rr.content+=lexical_cast<string>(makeTTLFromZone(recparts[n]));
392
400
      else
393
 
        rr.content+=soaparts[n];
 
401
        rr.content+=recparts[n];
394
402
 
395
403
      if(n==6 && !d_havedollarttl)
396
 
        d_defaultttl=makeTTLFromZone(soaparts[n]);
 
404
        d_defaultttl=makeTTLFromZone(recparts[n]);
397
405
    }
398
406
    break;
399
407
  default:;
403
411
  return true;
404
412
}
405
413
 
 
414
 
406
415
bool ZoneParserTNG::getLine()
407
416
{
408
417
  while(!d_filestates.empty()) {
409
 
    char buffer[1024];
410
 
    if(fgets(buffer, 1024, d_filestates.top().d_fp)) {
 
418
    if(stringfgets(d_filestates.top().d_fp, d_line)) {
411
419
      d_filestates.top().d_lineno++;
412
 
      d_line=buffer;
413
420
      return true;
414
421
    }
415
422
    fclose(d_filestates.top().d_fp);