module SPF::Util

Public Class Methods

hostname() click to toggle source
# File lib/spf/util.rb, line 47
def self.hostname
  return @hostname ||= Socket.gethostbyname(Socket.gethostname).first
rescue SocketError
  return @hostname ||= Socket.gethostname
end
ip_address_reverse(ip_address) click to toggle source
# File lib/spf/util.rb, line 78
def self.ip_address_reverse(ip_address)
  unless IP::V4 === ip_address or IP::V6 === ip_address
    raise SPF::InvalidOptionValueError.new('IP::V4 or IP::V6 address expected')
  end
  # Treat IPv4-mapped IPv6 addresses as IPv4 addresses:
  ip_address = ipv6_address_to_ipv4(ip_address) if ip_address.ipv4_mapped?
  case ip_address
  when IP::V4
    octets  = ip_address.to_addr.split('.').first(ip_address.pfxlen / 8)
    return "#{octets .reverse.join('.')}.in-addr.arpa."
  when IP::V6
    nibbles = ip_address.to_hex .split('') .first(ip_address.pfxlen / 4)
    return "#{nibbles.reverse.join('.')}.ip6.arpa."
  end
end
ip_address_to_string(ip_address) click to toggle source
# File lib/spf/util.rb, line 71
def self.ip_address_to_string(ip_address)
  unless IP::V4 === ip_address or IP::V6 === ip_address
    raise SPF::InvalidOptionValueError.new('IP::V4 or IP::V6 address expected')
  end
  return ip_address.to_addr
end
ipv4_address_to_ipv6(ipv4_address) click to toggle source
# File lib/spf/util.rb, line 53
def self.ipv4_address_to_ipv6(ipv4_address)
  unless IP::V4 === ipv4_address
    raise SPF::InvalidOptionValueError.new('IP::V4 address expected')
  end
  return IP.new("::ffff:#{ipv4_address.to_addr}/#{ipv4_address.pfxlen - 32 + 128}")
end
ipv4_mapped_ipv6_address_pattern() click to toggle source
# File lib/spf/util.rb, line 43
def self.ipv4_mapped_ipv6_address_pattern
  /^::ffff:([0-9a-f]{1,4}):([0-9a-f]{1,4})/i
end
ipv6_address_is_ipv4_mapped(ipv6_address) click to toggle source
# File lib/spf/util.rb, line 67
def self.ipv6_address_is_ipv4_mapped(ipv6_address)
  return ipv6_address.ipv4_mapped?
end
ipv6_address_to_ipv4(ipv6_address) click to toggle source
# File lib/spf/util.rb, line 60
def self.ipv6_address_to_ipv4(ipv6_address)
  unless IP::V6 === ipv6_address and ipv6_address.ipv4_mapped?
    raise SPF::InvalidOptionValueError, 'IPv4-mapped IP::V6 address expected'
  end
  return ipv6_address.native
end
sanitize_string(string) click to toggle source
# File lib/spf/util.rb, line 102
def self.sanitize_string(string)
  return \
    string &&
    string.
      gsub(/([\x00-\x1f\x7f-\xff])/) { |c| sprintf('\x%02x',   c.ord) }.
      gsub(/([\u{0100}-\u{ffff}])/)  { |u| sprintf('\x{%04x}', u.ord) }
end
valid_domain_for_ip_address( sever, request, ip_address, domain, find_best_match = false, accept_any_domain = false ) click to toggle source
# File lib/spf/util.rb, line 94
def self.valid_domain_for_ip_address(
  sever, request, ip_address, domain,
  find_best_match   = false,
  accept_any_domain = false
)
  # TODO
end