rapid7/metasploit-framework

View on GitHub
lib/net/dns/rr/cname.rb

Summary

Maintainability
A
2 hrs
Test Coverage
# -*- coding: binary -*-
##
#
# Net::DNS::RR::CNAME
#
#       $Id: CNAME.rb,v 1.7 2006/07/28 07:33:36 bluemonk Exp $  
#
##

module Net
  module DNS

    class RR
      
      #------------------------------------------------------------
      # RR type CNAME
      #------------------------------------------------------------
      class CNAME < RR
        attr_reader :cname

        private
        
        def check_name(name)
          unless name =~ /(\w\.?)+\s*$/ and name =~ /[a-zA-Z]/
            raise RRArgumentError, "Canonical Name not valid: #{name}"
          end
          name
        end

        def build_pack
          @cname_pack = pack_name(@cname)
          @rdlength = @cname_pack.size
        end

        def set_type
          @type = Net::DNS::RR::Types.new("CNAME")
        end

        def get_data
          @cname_pack
        end

        def get_inspect
          "#@cname"
        end

        def subclass_new_from_hash(args)
          if args.has_key? :cname
            @cname = check_name args[:cname]
          else
            raise RRArgumentError, ":cname field is mandatory but missing"
          end
        end

        def subclass_new_from_string(str)
          @cname = check_name(str)
        end

        def subclass_new_from_binary(data,offset)
          @cname,offset = dn_expand(data,offset)
          return offset
        end
        
      end # class CNAME
       
    end # class RR
  end # module DNS
end # module Net