#!/usr/local/bin/ruby
# Convert IPv6 address to reverse-record in .ip6.arpa zone
# (c)2002,2003 HIROSE, Yuuji [yuuji@gentei.org]
# http://www.gentei.org/~yuuji/software/rev6
# Last modified Sun Apr 21 11:21:03 2002 on firestorm
# Usage:
# rev6 [Options] v6Addr
# Options:
#	-h v6Addr [NS]	 call `host -t ptr' against its reverse record
#	-n v6Addr [NS]	 call `nslookup -type=ptr' against its reverse record
#	-d v6Addr [Host] print in djbdns record format (not reverse)
#	-i		 use .ip6.int instead of .ip6.arpa

host	= false
nslk	= false
djbfmt	= false
tld	= "arpa"

while /^-./ =~ ARGV[0]
  $_=ARGV[0].dup
  case $_
  when /-h/
    host = true
  when /-n/
    nslk = true
  when /-i/
    tld = "int"
  when /-d/
    djbfmt = true; host=nslk=false
  end
  $_.sub!(/^-.(.*)/, "-\\1")
  ARGV.shift unless $_ =~ /^-./
end

def usage()
  open($0, "r"){|me|
    me.gets			# Skip #! line
    while line=me.gets
      break if /^$/ =~ line
      print line
    end
  }
  exit 0
end

ARGV[0] or usage

v6adr = ARGV[0].split(":")

shrink = v6adr.index("")

if shrink then
  omitted = 8 - v6adr.length + 1
  v6adr[shrink..shrink] = Array.new(omitted, "0")
end
v6exp = v6adr.collect{|x|
  sprintf("%04x", x.hex)
}.join("")

if djbfmt then
  if ARGV[1] then
    print "6#{ARGV[1]}:#{v6exp}:86400\n"
  else
    print v6exp, "\n"
  end
else
  rev6adr = v6exp.reverse.split("").join(".")+".ip6.#{tld}"
  print rev6adr+"\n"

  host and system "host -t ptr #{rev6adr} #{ARGV[1]}"
  nslk and system "nslookup -type=ptr #{rev6adr} #{ARGV[1]}"
end
