#! /lusr/bin/python
# -*- mode:python -*-
# $Id:$

"""
pf_dns_lookup

This program looks up DNS names and puts them in a table for you.
"""

table_name = None
anchor = None

if __name__ == '__main__':

    # Parse command-line options.
    import getopt, sys

    anchor = None
    usage = "Usage: %s [-a anchorname] table_name dns_names...\n" % sys.argv[0]
    try:
        opts, args = getopt.getopt(sys.argv[1:], "a:t:", [ "anchor=s", "table=s" ])
    except getopt.GetoptError:
        sys.stderr.write(usage)
        sys.exit(1)
    for o, a in opts:
        if o in ("-h", "--help"):
            print usage
            sys.exit(0)
        if o in ("-a", "--anchor"):
            anchor = a
        if o in ("-t", "--table"):
            table = a

    if len(args) < 2:
        sys.stderr.write(usage)
        sys.exit(1)

    if anchor != None:
        anchor_string = "-a %s " % anchor
    else:
        anchor_string = ""

    # First argument is table name to populate.
    dns_names = args

    addrlist = []

    import socket
    for name in dns_names:
        ipaddrlist = map(lambda x: x[4][0], socket.getaddrinfo(name, None))
        addrlist.extend(ipaddrlist)

    # Uniquify the IP list.
    d = dict()
    for i in addrlist: d[i] = 1
    addrlist = d.keys()

    if table_name != None:
        import os
        os.system("pfctl %s -t %s -T replace %s" % \
            (anchor_string, table_name, " ".join(addrlist)))
    else:
        for ip in addrlist:
            print ip

    sys.exit(0)
