net-dns2 0.8.4 → 0.8.5

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,15 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: c8dd7cad1e1c048dab5fbef938af3154c7f5dda6
4
- data.tar.gz: a44175202f48cb7e193cb1d0b627b5a5ed5d55d1
2
+ !binary "U0hBMQ==":
3
+ metadata.gz: !binary |-
4
+ MjQ4ZDlmZjliMDEwZWU5NmYxMTIwOWQ3YTVlMTA3NzYxNTI2ODI5ZQ==
5
+ data.tar.gz: !binary |-
6
+ ZWFhNmY0NDg3Mzc0NjIwZTQxYWY2ODRhNDRmYzI3MjM3NDZjYjcxOA==
5
7
  SHA512:
6
- metadata.gz: 826c86f7a4264c319297d95808d853d02219083a8274410ad6208e9cb9f9188163416f06fe9847bb3f9537f66420e26927d4c5eb78082874d045a5a098d926e0
7
- data.tar.gz: 50f32b2a39365fe813cf89bc0c25ac6679def83073d39265e50c6016f1d389e709c79237f2c88916789b925a4d355fd3077b72d34a329da18d270224dcabe60b
8
+ metadata.gz: !binary |-
9
+ YjE5MTc4ZjQ2ZmRiN2VhYThkNTIwYmYxODY3Nzg3NTM4YzFmMGY1NWRkZmNi
10
+ ZTRlZDgzMWM2OTFkZGM0OWExY2Y4NmEwMGRkZmJmMTIyNWY3MmNiODYzODhh
11
+ YTcwNTczNGI3OGUxNWMxYjc3YmIzYmRiNWM5NWFmZDYyYmFiNzE=
12
+ data.tar.gz: !binary |-
13
+ ODAxMGQ2ZWI3MWMxNGZlZWUyNDI2MmIzZDA2NGU3MmE3Zjc5NzgzYWNlYjk5
14
+ NmUyZTZlMDZmMjI5NTIyYjdkZjFlMjhkZThmYmI1MWNiNTkzOWRiYzMwODYx
15
+ MGM2MmJlYzAzMGE2ZDgxMGVkMDQ5MDIyZGFiMDJmNzRiZTkyYjY=
data/CHANGELOG.md CHANGED
@@ -1,5 +1,15 @@
1
1
  # Changelog
2
2
 
3
+ ## Release 0.8.5
4
+ - FIXED: Disable logger by default and change logger behaivior issue #20
5
+ - FIXED: Logger and log4j [feature request] issue #16
6
+ - FIXED: Resolver#logger= should not call close on old logger issue #3
7
+ - FIXED: Could not disable mac source_address spoofing, added option
8
+ - MERGED: Pull request #33, switches to enumerators
9
+
10
+ ## Release 0.8.4
11
+ - FIXED: Missing file for new spf record, pull/57
12
+
3
13
  ## Release 0.8.3
4
14
  - FIXED: Packet size cannot be set issue #1
5
15
  - FIXED: Now raise exception if raw sockets are requested and we are not
data/README.md CHANGED
@@ -16,7 +16,7 @@ Net::DNS is a DNS library written in pure Ruby. It started as a port of Perl Net
16
16
 
17
17
  ## Requirements
18
18
 
19
- * Ruby >= 1.8.7
19
+ * Ruby >= 1.9.2
20
20
 
21
21
 
22
22
  ## Installation
@@ -1,4 +1,3 @@
1
- require 'logger'
2
1
  require 'net/dns/names'
3
2
  require 'net/dns/header'
4
3
  require 'net/dns/question'
@@ -65,18 +64,8 @@ module Net
65
64
  #
66
65
  # == Logging facility
67
66
  #
68
- # As Net::DNS::Resolver class, Net::DNS::Packet class has its own logging
69
- # facility too. It work in the same way the other one do, so you can
70
- # maybe want to override it or change the file descriptor.
71
- #
72
- # packet = Net::DNS::Packet.new("www.example.com")
73
- # packet.logger = $stderr
74
- #
75
- # # or even
76
- # packet.logger = Logger.new("/tmp/packet.log")
77
- #
78
- # If the <tt>Net::DNS::Packet</tt> class is directly instantiated by the <tt>Net::DNS::Resolver</tt>
79
- # class, like the great majority of the time, it will use the same logger facility.
67
+ # Logger can be set by using logger= to set the logger to any object that implements
68
+ # the necessary functions. If no logger is set then no logging is performed.
80
69
  #
81
70
  # Logger level will be set to <tt>Logger::Debug</tt> if <tt>$DEBUG</tt> variable is set.
82
71
  #
@@ -94,6 +83,7 @@ module Net
94
83
 
95
84
  attr_reader :header, :question, :answer, :authority, :additional
96
85
  attr_reader :answerfrom, :answersize
86
+ @@logger = nil
97
87
 
98
88
  # Creates a new instance of <tt>Net::DNS::Packet</tt> class. Arguments are the
99
89
  # canonical name of the resource, an optional type field and an optional
@@ -120,16 +110,39 @@ module Net
120
110
  @answer = []
121
111
  @authority = []
122
112
  @additional = []
123
- @logger = Logger.new $stdout
124
- @logger.level = $DEBUG ? Logger::DEBUG : Logger::WARN
125
113
  end
126
114
 
127
-
128
115
  # Checks if the packet is a QUERY packet
129
116
  def query?
130
117
  @header.query?
131
118
  end
132
119
 
120
+ def self.logger= logger
121
+ if logger.respond_to?(:warn) && logger.respond_to?(:debug) && logger.respond_to?(:info)
122
+ @@logger = logger
123
+ else
124
+ raise ArgumentError, "Invalid logger provided to #{self.class}"
125
+ end
126
+ end
127
+
128
+ def warn *args
129
+ if @@logger
130
+ @@logger.warn *args
131
+ end
132
+ end
133
+
134
+ def debug *args
135
+ if @@logger
136
+ @@logger.debug *args
137
+ end
138
+ end
139
+
140
+ def info *args
141
+ if @@logger
142
+ @@logger.info *args
143
+ end
144
+ end
145
+
133
146
  # Returns the packet object in binary data, suitable
134
147
  # for sending across a network stream.
135
148
  #
@@ -347,6 +360,15 @@ module Net
347
360
  end
348
361
  end
349
362
 
363
+ # Filters the elements in the +answer+ section based on the class given
364
+ def elements(type = nil)
365
+ if type
366
+ @answer.select {|elem| elem.kind_of? type}
367
+ else
368
+ @answer
369
+ end
370
+ end
371
+
350
372
  # Iterates every address in the +answer+ section
351
373
  # of this <tt>Net::DNS::Packet</tt> instance.
352
374
  #
@@ -357,10 +379,7 @@ module Net
357
379
  # As you can see in the documentation for the <tt>Net::DNS::RR::A</tt> class,
358
380
  # the address returned is an instance of <tt>IPAddr</tt> class.
359
381
  def each_address(&block)
360
- @answer.each do |elem|
361
- next unless elem.class == Net::DNS::RR::A
362
- yield elem.address
363
- end
382
+ elements(Net::DNS::RR::A).map(&:address).each(&block)
364
383
  end
365
384
 
366
385
  # Iterates every nameserver in the +answer+ section
@@ -371,10 +390,7 @@ module Net
371
390
  # end
372
391
  #
373
392
  def each_nameserver(&block)
374
- @answer.each do |elem|
375
- next unless elem.class == Net::DNS::RR::NS
376
- yield elem.nsdname
377
- end
393
+ elements(Net::DNS::RR::NS).map(&:nsdname).each(&block)
378
394
  end
379
395
 
380
396
  # Iterates every exchange record in the +answer+ section
@@ -385,10 +401,7 @@ module Net
385
401
  # end
386
402
  #
387
403
  def each_mx(&block)
388
- @answer.each do |elem|
389
- next unless elem.class == Net::DNS::RR::MX
390
- yield elem.preference, elem.exchange
391
- end
404
+ elements(Net::DNS::RR::MX).map{|elem| [elem.preference, elem.exchange]}.each(&block)
392
405
  end
393
406
 
394
407
  # Iterates every canonical name in the +answer+ section
@@ -399,10 +412,7 @@ module Net
399
412
  # end
400
413
  #
401
414
  def each_cname(&block)
402
- @answer.each do |elem|
403
- next unless elem.class == Net::DNS::RR::CNAME
404
- yield elem.cname
405
- end
415
+ elements(Net::DNS::RR::CNAME).map(&:cname).each(&block)
406
416
  end
407
417
 
408
418
  # Iterates every pointer in the +answer+ section
@@ -413,10 +423,7 @@ module Net
413
423
  # end
414
424
  #
415
425
  def each_ptr(&block)
416
- @answer.each do |elem|
417
- next unless elem.class == Net::DNS::RR::PTR
418
- yield elem.ptrdname
419
- end
426
+ elements(Net::DNS::RR::PTR).map(&:ptrdname).each(&block)
420
427
  end
421
428
 
422
429
  # Returns the packet size in bytes.
@@ -479,8 +486,6 @@ module Net
479
486
 
480
487
  @answerfrom = from[2] + ":" + from[1].to_s
481
488
  @answersize = data.size
482
- @logger = Logger.new $stdout
483
- @logger.level = $DEBUG ? Logger::DEBUG : Logger::WARN
484
489
 
485
490
  #------------------------------------------------------------
486
491
  # Header section
@@ -488,34 +493,34 @@ module Net
488
493
  offset = Net::DNS::HFIXEDSZ
489
494
  @header = Net::DNS::Header.parse(data[0..offset-1])
490
495
 
491
- @logger.debug ";; HEADER SECTION"
492
- @logger.debug @header.inspect
496
+ debug ";; HEADER SECTION"
497
+ debug @header.inspect
493
498
 
494
499
  #------------------------------------------------------------
495
500
  # Question section
496
501
  #------------------------------------------------------------
497
502
  section = @header.opCode == "UPDATE" ? "ZONE" : "QUESTION"
498
- @logger.debug ";; #{section} SECTION (#{@header.qdCount} record#{@header.qdCount == 1 ? '': 's'})"
503
+ debug ";; #{section} SECTION (#{@header.qdCount} record#{@header.qdCount == 1 ? '': 's'})"
499
504
 
500
505
  @question = []
501
506
  @header.qdCount.times do
502
507
  qobj,offset = parse_question(data,offset)
503
508
  @question << qobj
504
- @logger.debug ";; #{qobj.inspect}"
509
+ debug ";; #{qobj.inspect}"
505
510
  end
506
511
 
507
512
  #------------------------------------------------------------
508
513
  # Answer/prerequisite section
509
514
  #------------------------------------------------------------
510
515
  section = @header.opCode == "UPDATE" ? "PREREQUISITE" : "ANSWER"
511
- @logger.debug ";; #{section} SECTION (#{@header.qdCount} record#{@header.qdCount == 1 ? '': 's'})"
516
+ debug ";; #{section} SECTION (#{@header.qdCount} record#{@header.qdCount == 1 ? '': 's'})"
512
517
 
513
518
  @answer = []
514
519
  @header.anCount.times do
515
520
  begin
516
521
  rrobj,offset = Net::DNS::RR.parse_packet(data,offset)
517
522
  @answer << rrobj
518
- @logger.debug rrobj.inspect
523
+ debug rrobj.inspect
519
524
  rescue NameError => e
520
525
  warn "Net::DNS unsupported record type: #{e.message}"
521
526
  end
@@ -525,14 +530,14 @@ module Net
525
530
  # Authority/update section
526
531
  #------------------------------------------------------------
527
532
  section = @header.opCode == "UPDATE" ? "UPDATE" : "AUTHORITY"
528
- @logger.debug ";; #{section} SECTION (#{@header.nsCount} record#{@header.nsCount == 1 ? '': 's'})"
533
+ debug ";; #{section} SECTION (#{@header.nsCount} record#{@header.nsCount == 1 ? '': 's'})"
529
534
 
530
535
  @authority = []
531
536
  @header.nsCount.times do
532
537
  begin
533
538
  rrobj,offset = Net::DNS::RR.parse_packet(data,offset)
534
539
  @authority << rrobj
535
- @logger.debug rrobj.inspect
540
+ debug rrobj.inspect
536
541
  rescue NameError => e
537
542
  warn "Net::DNS unsupported record type: #{e.message}"
538
543
  end
@@ -541,14 +546,14 @@ module Net
541
546
  #------------------------------------------------------------
542
547
  # Additional section
543
548
  #------------------------------------------------------------
544
- @logger.debug ";; ADDITIONAL SECTION (#{@header.arCount} record#{@header.arCount == 1 ? '': 's'})"
549
+ debug ";; ADDITIONAL SECTION (#{@header.arCount} record#{@header.arCount == 1 ? '': 's'})"
545
550
 
546
551
  @additional = []
547
552
  @header.arCount.times do
548
553
  begin
549
554
  rrobj,offset = Net::DNS::RR.parse_packet(data,offset)
550
555
  @additional << rrobj
551
- @logger.debug rrobj.inspect
556
+ debug rrobj.inspect
552
557
  rescue NameError => e
553
558
  warn "Net::DNS unsupported record type: #{e.message}"
554
559
  end
@@ -29,9 +29,6 @@ end
29
29
 
30
30
  module Net
31
31
  module DNS
32
-
33
- include Logger::Severity
34
-
35
32
  # = Net::DNS::Resolver - DNS resolver class
36
33
  #
37
34
  # The Net::DNS::Resolver class implements a complete DNS resolver written
@@ -102,7 +99,6 @@ module Net
102
99
  # explanation of its usage.
103
100
  Defaults = {
104
101
  :config_file => "/etc/resolv.conf",
105
- :log_file => $stdout,
106
102
  :port => 53,
107
103
  :searchlist => [],
108
104
  :nameservers => [IPAddr.new("127.0.0.1")],
@@ -110,6 +106,7 @@ module Net
110
106
  :source_port => 0,
111
107
  :source_address => IPAddr.new("0.0.0.0"),
112
108
  :source_address_inet6 => IPAddr.new('::'),
109
+ :spoof_mac => false,
113
110
  :interface => "eth0",
114
111
  :retry_interval => 5,
115
112
  :retry_number => 4,
@@ -123,6 +120,7 @@ module Net
123
120
  :udp_timeout => UdpTimeout.new(5),
124
121
  }
125
122
 
123
+ @@logger = nil
126
124
 
127
125
  class << self
128
126
 
@@ -246,10 +244,6 @@ module Net
246
244
  @config = Defaults.merge config
247
245
  @raw = false
248
246
 
249
- # New logger facility
250
- @logger = Logger.new(@config[:log_file])
251
- @logger.level = $DEBUG ? Logger::DEBUG : Logger::WARN
252
-
253
247
  #------------------------------------------------------------
254
248
  # Resolver configuration will be set in order from:
255
249
  # 1) initialize arguments
@@ -274,7 +268,7 @@ module Net
274
268
  # Parsing arguments
275
269
  #------------------------------------------------------------
276
270
  config.each do |key,val|
277
- next if key == :log_file or key == :config_file
271
+ next if key == :config_file
278
272
  begin
279
273
  eval "self.#{key.to_s} = val"
280
274
  rescue NoMethodError
@@ -283,6 +277,35 @@ module Net
283
277
  end
284
278
  end
285
279
 
280
+ attr_accessor :spoof_mac
281
+
282
+ def self.logger= logger
283
+ if logger.respond_to?(:warn) && logger.respond_to?(:debug) && logger.respond_to?(:info)
284
+ @@logger = logger
285
+ else
286
+ raise ArgumentError, "Invalid logger provided to #{self.class}"
287
+ end
288
+ end
289
+
290
+ def warn *args
291
+ if @@logger
292
+ @@logger.warn *args
293
+ end
294
+ end
295
+
296
+ def debug *args
297
+ if @@logger
298
+ @debug *args
299
+ end
300
+ end
301
+
302
+ def info *args
303
+ if @@logger
304
+ @@logger.info *args
305
+ end
306
+ end
307
+
308
+
286
309
  # Get the resolver search list, returned as an array of entries.
287
310
  #
288
311
  # res.searchlist
@@ -310,10 +333,10 @@ module Net
310
333
  case arg
311
334
  when String
312
335
  @config[:searchlist] = [arg] if valid? arg
313
- @logger.info "Searchlist changed to value #{@config[:searchlist].inspect}"
336
+ info "Searchlist changed to value #{@config[:searchlist].inspect}"
314
337
  when Array
315
338
  @config[:searchlist] = arg if arg.all? {|x| valid? x}
316
- @logger.info "Searchlist changed to value #{@config[:searchlist].inspect}"
339
+ info "Searchlist changed to value #{@config[:searchlist].inspect}"
317
340
  else
318
341
  raise ArgumentError, "Wrong argument format, neither String nor Array"
319
342
  end
@@ -346,7 +369,7 @@ module Net
346
369
  #
347
370
  def nameservers=(arg)
348
371
  @config[:nameservers] = convert_nameservers_arg_to_ips(arg)
349
- @logger.info "Nameservers list changed to value #{@config[:nameservers].inspect}"
372
+ info "Nameservers list changed to value #{@config[:nameservers].inspect}"
350
373
  end
351
374
  alias_method("nameserver=","nameservers=")
352
375
 
@@ -368,7 +391,7 @@ module Net
368
391
  def packet_size=(arg)
369
392
  if arg.respond_to? :to_i
370
393
  @config[:packet_size] = arg.to_i
371
- @logger.info "Packet size changed to value #{@config[:packet_size].inspect}"
394
+ info "Packet size changed to value #{@config[:packet_size].inspect}"
372
395
  else
373
396
  @logger.error "Packet size not set, #{arg.class} does not respond to to_i"
374
397
  end
@@ -392,7 +415,7 @@ module Net
392
415
  def port=(num)
393
416
  if (0..65535).include? num
394
417
  @config[:port] = num
395
- @logger.info "Port number changed to #{num}"
418
+ info "Port number changed to #{num}"
396
419
  else
397
420
  raise ArgumentError, "Wrong port number #{num}"
398
421
  end
@@ -479,17 +502,17 @@ module Net
479
502
 
480
503
  begin
481
504
  port = rand(64000)+1024
482
- @logger.warn "Try to determine state of source address #{addr} with port #{port}"
505
+ info "Try to determine state of source address #{addr} with port #{port}"
483
506
  a = TCPServer.new(addr.to_s,port)
484
507
  rescue SystemCallError => e
485
508
  case e.errno
486
509
  when 98 # Port already in use!
487
- @logger.warn "Port already in use"
510
+ info "Port already in use"
488
511
  retry
489
512
  when 99 # Address is not valid: raw socket
490
513
  if Process.uid == 0
491
514
  @raw = true
492
- @logger.warn "Using raw sockets"
515
+ info "Using raw sockets"
493
516
  else
494
517
  raise RuntimeError, "Raw sockets requested but not running as root."
495
518
  end
@@ -503,10 +526,10 @@ module Net
503
526
  case addr
504
527
  when String
505
528
  @config[:source_address] = IPAddr.new(addr)
506
- @logger.info "Using new source address: #{@config[:source_address]}"
529
+ info "Using new source address: #{@config[:source_address]}"
507
530
  when IPAddr
508
531
  @config[:source_address] = addr
509
- @logger.info "Using new source address: #{@config[:source_address]}"
532
+ info "Using new source address: #{@config[:source_address]}"
510
533
  else
511
534
  raise ArgumentError, "Unknown dest_address format"
512
535
  end
@@ -528,7 +551,7 @@ module Net
528
551
  def retry_interval=(num)
529
552
  if num > 0
530
553
  @config[:retry_interval] = num
531
- @logger.info "Retransmission interval changed to #{num} seconds"
554
+ info "Retransmission interval changed to #{num} seconds"
532
555
  else
533
556
  raise ArgumentError, "Interval must be positive"
534
557
  end
@@ -548,7 +571,7 @@ module Net
548
571
  def retry_number=(num)
549
572
  if num.kind_of? Integer and num > 0
550
573
  @config[:retry_number] = num
551
- @logger.info "Retrasmissions number changed to #{num}"
574
+ info "Retrasmissions number changed to #{num}"
552
575
  else
553
576
  raise ArgumentError, "Retry value must be a positive integer"
554
577
  end
@@ -577,7 +600,7 @@ module Net
577
600
  case bool
578
601
  when TrueClass,FalseClass
579
602
  @config[:recursive] = bool
580
- @logger.info("Recursive state changed to #{bool}")
603
+ info("Recursive state changed to #{bool}")
581
604
  else
582
605
  raise ArgumentError, "Argument must be boolean"
583
606
  end
@@ -629,7 +652,7 @@ module Net
629
652
  case bool
630
653
  when TrueClass,FalseClass
631
654
  @config[:defname] = bool
632
- @logger.info("Defname state changed to #{bool}")
655
+ info("Defname state changed to #{bool}")
633
656
  else
634
657
  raise ArgumentError, "Argument must be boolean"
635
658
  end
@@ -648,7 +671,7 @@ module Net
648
671
  case bool
649
672
  when TrueClass,FalseClass
650
673
  @config[:dns_search] = bool
651
- @logger.info("DNS search state changed to #{bool}")
674
+ info("DNS search state changed to #{bool}")
652
675
  else
653
676
  raise ArgumentError, "Argument must be boolean"
654
677
  end
@@ -677,7 +700,7 @@ module Net
677
700
  case bool
678
701
  when TrueClass,FalseClass
679
702
  @config[:use_tcp] = bool
680
- @logger.info("Use tcp flag changed to #{bool}")
703
+ info("Use tcp flag changed to #{bool}")
681
704
  else
682
705
  raise ArgumentError, "Argument must be boolean"
683
706
  end
@@ -693,7 +716,7 @@ module Net
693
716
  case bool
694
717
  when TrueClass,FalseClass
695
718
  @config[:ignore_truncated] = bool
696
- @logger.info("Ignore truncated flag changed to #{bool}")
719
+ info("Ignore truncated flag changed to #{bool}")
697
720
  else
698
721
  raise ArgumentError, "Argument must be boolean"
699
722
  end
@@ -729,7 +752,7 @@ module Net
729
752
  #
730
753
  def tcp_timeout=(secs)
731
754
  @config[:tcp_timeout] = TcpTimeout.new(secs)
732
- @logger.info("New TCP timeout value: #{@config[:tcp_timeout]} seconds")
755
+ info("New TCP timeout value: #{@config[:tcp_timeout]} seconds")
733
756
  end
734
757
 
735
758
  # Return an object representing the value of the stored UDP
@@ -765,69 +788,7 @@ module Net
765
788
  #
766
789
  def udp_timeout=(secs)
767
790
  @config[:udp_timeout] = UdpTimeout.new(secs)
768
- @logger.info("New UDP timeout value: #{@config[:udp_timeout]} seconds")
769
- end
770
-
771
- # Set a new log file for the logger facility of the resolver
772
- # class. Could be a file descriptor too:
773
- #
774
- # res.log_file = $stderr
775
- #
776
- # Note that a new logging facility will be create, destroing
777
- # the old one, which will then be impossibile to recover.
778
- #
779
- def log_file=(log)
780
- @logger.close
781
- @config[:log_file] = log
782
- @logger = Logger.new(@config[:log_file])
783
- @logger.level = $DEBUG ? Logger::DEBUG : Logger::WARN
784
- end
785
-
786
- # This one permits to have a personal logger facility to handle
787
- # resolver messages, instead of new built-in one, which is set up
788
- # for a +$stdout+ (or +$stderr+) use.
789
- #
790
- # If you want your own logging facility you can create a new instance
791
- # of the +Logger+ class:
792
- #
793
- # log = Logger.new("/tmp/resolver.log","weekly",2*1024*1024)
794
- # log.level = Logger::DEBUG
795
- # log.progname = "ruby_resolver"
796
- #
797
- # and then pass it to the resolver:
798
- #
799
- # res.logger = log
800
- #
801
- # Note that this will destroy the precedent logger.
802
- #
803
- def logger=(logger)
804
- if logger.kind_of? Logger
805
- @logger.close
806
- @logger = logger
807
- else
808
- raise ArgumentError, "Argument must be an instance of Logger class"
809
- end
810
- end
811
-
812
- # Set the log level for the built-in logging facility.
813
- #
814
- # The log level can be one of the following:
815
- #
816
- # - +Net::DNS::DEBUG+
817
- # - +Net::DNS::INFO+
818
- # - +Net::DNS::WARN+
819
- # - +Net::DNS::ERROR+
820
- # - +Net::DNS::FATAL+
821
- #
822
- # Note that if the global variable $DEBUG is set (like when the
823
- # -d switch is used at the command line) the logger level is
824
- # automatically set at DEGUB.
825
- #
826
- # For further informations, see Logger documentation in the
827
- # Ruby standard library.
828
- #
829
- def log_level=(level)
830
- @logger.level = level
791
+ info("New UDP timeout value: #{@config[:udp_timeout]} seconds")
831
792
  end
832
793
 
833
794
  # Performs a DNS query for the given name, applying the searchlist if
@@ -861,7 +822,7 @@ module Net
861
822
 
862
823
  # If the name contains at least one dot then try it as is first.
863
824
  if name.include? "."
864
- @logger.debug "Search(#{name},#{Net::DNS::RR::Types.new(type)},#{Net::DNS::RR::Classes.new(cls)})"
825
+ debug "Search(#{name},#{Net::DNS::RR::Types.new(type)},#{Net::DNS::RR::Classes.new(cls)})"
865
826
  ans = query(name,type,cls)
866
827
  return ans if ans.header.anCount > 0
867
828
  end
@@ -870,14 +831,14 @@ module Net
870
831
  if name !~ /\.$/ and @config[:dns_search]
871
832
  @config[:searchlist].each do |domain|
872
833
  newname = name + "." + domain
873
- @logger.debug "Search(#{newname},#{Net::DNS::RR::Types.new(type)},#{Net::DNS::RR::Classes.new(cls)})"
834
+ debug "Search(#{newname},#{Net::DNS::RR::Types.new(type)},#{Net::DNS::RR::Classes.new(cls)})"
874
835
  ans = query(newname,type,cls)
875
836
  return ans if ans.header.anCount > 0
876
837
  end
877
838
  end
878
839
 
879
840
  # Finally, if the name has no dots then try it as is.
880
- @logger.debug "Search(#{name},#{Net::DNS::RR::Types.new(type)},#{Net::DNS::RR::Classes.new(cls)})"
841
+ debug "Search(#{name},#{Net::DNS::RR::Types.new(type)},#{Net::DNS::RR::Classes.new(cls)})"
881
842
  query(name+".",type,cls)
882
843
 
883
844
  end
@@ -915,7 +876,7 @@ module Net
915
876
  name += "." + @config[:domain]
916
877
  end
917
878
 
918
- @logger.debug "Query(#{name},#{Net::DNS::RR::Types.new(type)},#{Net::DNS::RR::Classes.new(cls)})"
879
+ debug "Query(#{name},#{Net::DNS::RR::Types.new(type)},#{Net::DNS::RR::Classes.new(cls)})"
919
880
 
920
881
  send(name,type,cls)
921
882
 
@@ -970,31 +931,31 @@ module Net
970
931
  # Choose whether use TCP, UDP or RAW
971
932
  if packet_size > @config[:packet_size] # Must use TCP, either plain or raw
972
933
  if @raw # Use raw sockets?
973
- @logger.info "Sending #{packet_size} bytes using TCP over RAW socket"
934
+ info "Sending #{packet_size} bytes using TCP over RAW socket"
974
935
  method = :send_raw_tcp
975
936
  else
976
- @logger.info "Sending #{packet_size} bytes using TCP"
937
+ info "Sending #{packet_size} bytes using TCP"
977
938
  method = :query_tcp
978
939
  end
979
940
  else # Packet size is inside the boundaries
980
941
  if @raw # Use raw sockets?
981
- @logger.info "Sending #{packet_size} bytes using UDP over RAW socket"
942
+ info "Sending #{packet_size} bytes using UDP over RAW socket"
982
943
  method = :send_raw_udp
983
944
  elsif use_tcp? # User requested TCP
984
- @logger.info "Sending #{packet_size} bytes using TCP"
945
+ info "Sending #{packet_size} bytes using TCP"
985
946
  method = :query_tcp
986
947
  else # Finally use UDP
987
- @logger.info "Sending #{packet_size} bytes using UDP"
948
+ info "Sending #{packet_size} bytes using UDP"
988
949
  method = :query_udp
989
950
  end
990
951
  end
991
952
 
992
953
  if type == Net::DNS::AXFR
993
954
  if @raw
994
- @logger.warn "AXFR query, switching to TCP over RAW socket"
955
+ info "AXFR query, switching to TCP over RAW socket"
995
956
  method = :send_raw_tcp
996
957
  else
997
- @logger.warn "AXFR query, switching to TCP"
958
+ info "AXFR query, switching to TCP"
998
959
  method = :query_tcp
999
960
  end
1000
961
  end
@@ -1013,11 +974,11 @@ module Net
1013
974
  raise NoResponseError, message
1014
975
  end
1015
976
 
1016
- @logger.info "Received #{ans[0].size} bytes from #{ans[1][2]+":"+ans[1][1].to_s}"
977
+ info "Received #{ans[0].size} bytes from #{ans[1][2]+":"+ans[1][1].to_s}"
1017
978
  response = Net::DNS::Packet.parse(ans[0],ans[1])
1018
979
 
1019
980
  if response.header.truncated? and not ignore_truncated?
1020
- @logger.warn "Packet truncated, retrying using TCP"
981
+ info "Packet truncated, retrying using TCP"
1021
982
  self.use_tcp = true
1022
983
  begin
1023
984
  return query(argument,type,cls)
@@ -1035,7 +996,7 @@ module Net
1035
996
  # since it is using the same infrastucture.
1036
997
  #
1037
998
  def axfr(name, cls = Net::DNS::IN)
1038
- @logger.info "Requested AXFR transfer, zone #{name} class #{cls}"
999
+ info "Requested AXFR transfer, zone #{name} class #{cls}"
1039
1000
  query(name, Net::DNS::AXFR, cls)
1040
1001
  end
1041
1002
 
@@ -1173,15 +1134,15 @@ module Net
1173
1134
 
1174
1135
  @config[:tcp_timeout].timeout do
1175
1136
  socket.connect(sockaddr)
1176
- @logger.info "Contacting nameserver #{ns} port #{@config[:port]}"
1137
+ info "Contacting nameserver #{ns} port #{@config[:port]}"
1177
1138
  socket.write(length+packet_data)
1178
1139
  ans = socket.recv(Net::DNS::INT16SZ)
1179
1140
  len = ans.unpack("n")[0]
1180
1141
 
1181
- @logger.info "Receiving #{len} bytes..."
1142
+ info "Receiving #{len} bytes..."
1182
1143
 
1183
1144
  if len == 0
1184
- @logger.warn "Receiving 0 lenght packet from nameserver #{ns}, trying next."
1145
+ info "Receiving 0 lenght packet from nameserver #{ns}, trying next."
1185
1146
  next
1186
1147
  end
1187
1148
 
@@ -1192,13 +1153,13 @@ module Net
1192
1153
  end
1193
1154
 
1194
1155
  unless buffer.size == len
1195
- @logger.warn "Malformed packet from nameserver #{ns}, trying next."
1156
+ info "Malformed packet from nameserver #{ns}, trying next."
1196
1157
  next
1197
1158
  end
1198
1159
  end
1199
1160
  return [buffer,["",@config[:port],ns.to_s,ns.to_s]]
1200
1161
  rescue TimeoutError
1201
- @logger.warn "Nameserver #{ns} not responding within TCP timeout, trying next one"
1162
+ info "Nameserver #{ns} not responding within TCP timeout, trying next one"
1202
1163
  next
1203
1164
  ensure
1204
1165
  socket.close
@@ -1220,7 +1181,7 @@ module Net
1220
1181
  @config[:nameservers].each do |ns|
1221
1182
  begin
1222
1183
  @config[:udp_timeout].timeout do
1223
- @logger.info "Contacting nameserver #{ns} port #{@config[:port]}"
1184
+ info "Contacting nameserver #{ns} port #{@config[:port]}"
1224
1185
  ans = if ns.ipv6?
1225
1186
  socket6.send(packet_data, 0, ns.to_s, @config[:port])
1226
1187
  socket6.recvfrom(@config[:packet_size])
@@ -1231,7 +1192,7 @@ module Net
1231
1192
  end
1232
1193
  break if ans
1233
1194
  rescue TimeoutError
1234
- @logger.warn "Nameserver #{ns} not responding within UDP timeout, trying next one"
1195
+ info "Nameserver #{ns} not responding within UDP timeout, trying next one"
1235
1196
  next
1236
1197
  end
1237
1198
  end
@@ -1248,13 +1209,17 @@ module Net
1248
1209
  octet.read_quad @config[:source_address].to_s
1249
1210
  packet.ip_src = octet
1250
1211
  packet.udp_src =rand(0xffff-1024) + 1024
1251
- packet.eth_saddr = PacketFu::Utils.arp(@config[:source_address].to_s, {iface: @config[:interface]})
1212
+ if @config[:spoof_mac]
1213
+ packet.eth_saddr = PacketFu::Utils.arp(@config[:source_address].to_s, {iface: @config[:interface]})
1214
+ end
1252
1215
  elsif @config[:source_address_inet6]
1253
1216
  octet = PacketFu::Octets.new
1254
1217
  octet.read_quad @config[:source_address_inet6].to_s
1255
1218
  packet.ip_src = octet
1256
1219
  packet.udp_src = @config[:source_address_inet6].to_i
1257
- packet.eth_saddr = PacketFu::Utils.arp(@config[:source_address_inet6].to_s, {iface: @config[:interface]})
1220
+ if @config[:spoof_mac]
1221
+ packet.eth_saddr = PacketFu::Utils.arp(@config[:source_address_inet6].to_s, {iface: @config[:interface]})
1222
+ end
1258
1223
  else
1259
1224
  raise ArgumentError, "No source address specified, cannot send"
1260
1225
  end
@@ -1281,13 +1246,17 @@ module Net
1281
1246
  octet.read_quad @config[:source_address].to_s
1282
1247
  packet.ip_src = octet
1283
1248
  packet.udp_src =rand(0xffff-1024) + 1024
1284
- packet.eth_saddr = PacketFu::Utils.arp(@config[:source_address].to_s, {iface: @config[:interface]})
1249
+ if @config[:spoof_mac]
1250
+ packet.eth_saddr = PacketFu::Utils.arp(@config[:source_address].to_s, {iface: @config[:interface]})
1251
+ end
1285
1252
  elsif @config[:source_address_inet6]
1286
1253
  octet = PacketFu::Octets.new
1287
1254
  octet.read_quad @config[:source_address_inet6].to_s
1288
1255
  packet.ip_src = octet
1289
1256
  packet.udp_src = @config[:source_address_inet6].to_i
1290
- packet.eth_saddr = PacketFu::Utils.arp(@config[:source_address_inet6].to_s, {iface: @config[:interface]})
1257
+ if @config[:spoof_mac]
1258
+ packet.eth_saddr = PacketFu::Utils.arp(@config[:source_address_inet6].to_s, {iface: @config[:interface]})
1259
+ end
1291
1260
  else
1292
1261
  raise ArgumentError, "No source address specified, cannot send"
1293
1262
  end
data/net-dns.gemspec CHANGED
@@ -1,12 +1,14 @@
1
1
  # -*- encoding: utf-8 -*-
2
2
 
3
+ require 'date'
4
+
3
5
  Gem::Specification.new do |s|
4
6
  s.name = "net-dns2"
5
- s.version = "0.8.4"
7
+ s.version = "0.8.5"
6
8
 
7
9
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
8
10
  s.authors = ["Marco Ceresa", "Simone Carletti", "Christopher Carpenter"]
9
- s.date = "2014-05-12"
11
+ s.date = Date.today.to_s
10
12
  s.description = "Net::DNS is a pure Ruby DNS library, with a clean OO interface and an extensible API. The net-dns2 ruby gem is an actively maintained fork of the original net-dns."
11
13
  s.email = "mordocai@mordocai.net"
12
14
  s.files = [
@@ -26,11 +28,6 @@ Gem::Specification.new do |s|
26
28
  s.homepage = "http://github.com/mordocai/net-dns"
27
29
  s.require_paths = ["lib"]
28
30
  s.summary = "Pure Ruby DNS library, fork with fixes."
29
- # s.test_files = [
30
- # "spec/fixtures/resolv.conf", "spec/resolver_spec.rb", "spec/spec_helper.rb",
31
- # "spec/unit/resolver/dns_timeout_spec.rb", "spec/unit/tcp_timeout_spec.rb",
32
- # "spec/unit/udp_timeout_spec.rb"
33
- # ]
34
31
  s.required_ruby_version = Gem::Requirement.new(">= 1.9.2")
35
32
  s.license = 'Ruby'
36
33
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: net-dns2
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.8.4
4
+ version: 0.8.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - Marco Ceresa
@@ -10,62 +10,62 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2014-05-12 00:00:00.000000000 Z
13
+ date: 2014-08-28 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: rake
17
17
  requirement: !ruby/object:Gem::Requirement
18
18
  requirements:
19
- - - "~>"
19
+ - - ~>
20
20
  - !ruby/object:Gem::Version
21
21
  version: '10.0'
22
22
  type: :development
23
23
  prerelease: false
24
24
  version_requirements: !ruby/object:Gem::Requirement
25
25
  requirements:
26
- - - "~>"
26
+ - - ~>
27
27
  - !ruby/object:Gem::Version
28
28
  version: '10.0'
29
29
  - !ruby/object:Gem::Dependency
30
30
  name: yard
31
31
  requirement: !ruby/object:Gem::Requirement
32
32
  requirements:
33
- - - ">="
33
+ - - ! '>='
34
34
  - !ruby/object:Gem::Version
35
35
  version: '0'
36
36
  type: :development
37
37
  prerelease: false
38
38
  version_requirements: !ruby/object:Gem::Requirement
39
39
  requirements:
40
- - - ">="
40
+ - - ! '>='
41
41
  - !ruby/object:Gem::Version
42
42
  version: '0'
43
43
  - !ruby/object:Gem::Dependency
44
44
  name: rspec
45
45
  requirement: !ruby/object:Gem::Requirement
46
46
  requirements:
47
- - - ">="
47
+ - - ! '>='
48
48
  - !ruby/object:Gem::Version
49
49
  version: '0'
50
50
  type: :development
51
51
  prerelease: false
52
52
  version_requirements: !ruby/object:Gem::Requirement
53
53
  requirements:
54
- - - ">="
54
+ - - ! '>='
55
55
  - !ruby/object:Gem::Version
56
56
  version: '0'
57
57
  - !ruby/object:Gem::Dependency
58
58
  name: packetfu
59
59
  requirement: !ruby/object:Gem::Requirement
60
60
  requirements:
61
- - - ">="
61
+ - - ! '>='
62
62
  - !ruby/object:Gem::Version
63
63
  version: '0'
64
64
  type: :runtime
65
65
  prerelease: false
66
66
  version_requirements: !ruby/object:Gem::Requirement
67
67
  requirements:
68
- - - ">="
68
+ - - ! '>='
69
69
  - !ruby/object:Gem::Version
70
70
  version: '0'
71
71
  description: Net::DNS is a pure Ruby DNS library, with a clean OO interface and an
@@ -76,8 +76,8 @@ executables: []
76
76
  extensions: []
77
77
  extra_rdoc_files: []
78
78
  files:
79
- - ".gitignore"
80
- - ".travis.yml"
79
+ - .gitignore
80
+ - .travis.yml
81
81
  - CHANGELOG.md
82
82
  - Gemfile
83
83
  - README.md
@@ -122,17 +122,17 @@ require_paths:
122
122
  - lib
123
123
  required_ruby_version: !ruby/object:Gem::Requirement
124
124
  requirements:
125
- - - ">="
125
+ - - ! '>='
126
126
  - !ruby/object:Gem::Version
127
127
  version: 1.9.2
128
128
  required_rubygems_version: !ruby/object:Gem::Requirement
129
129
  requirements:
130
- - - ">="
130
+ - - ! '>='
131
131
  - !ruby/object:Gem::Version
132
132
  version: '0'
133
133
  requirements: []
134
134
  rubyforge_project:
135
- rubygems_version: 2.0.14
135
+ rubygems_version: 2.2.2
136
136
  signing_key:
137
137
  specification_version: 4
138
138
  summary: Pure Ruby DNS library, fork with fixes.