pretty print for zone files
[mirror/userdir-ldap.git] / ud-generate
index 4800938..1377aaf 100755 (executable)
@@ -765,9 +765,14 @@ def GenDNS(File):
             continue
 
          DNSInfo = ExtractDNSInfo(x)
+         start = True
          for Line in DNSInfo:
-            Line = Sanitize(Line) + "\n"
-            F.write(Line)
+            if start == True:
+               Line = "%s.\t%s" % (GetAttr(x, "hostname"), Line)
+               start = False
+            else:
+               Line = "\t\t\t%s" % (Line)
+            F.write(Line + "\n")
 
       # Fetch all the users
       global PasswdAttrs
@@ -819,6 +824,14 @@ def GenDNS(File):
 def ExtractDNSInfo(x):
 
    DNSInfo = []
+
+   if x[1].has_key("ipHostNumber"):
+      for I in x[1]["ipHostNumber"]:
+         if IsV6Addr.match(I) != None:
+            DNSInfo.append("IN\tAAAA\t%s" % (I))
+         else:
+            DNSInfo.append("IN\tA\t%s" % (I))
+
    Host = GetAttr(x, "hostname")
    Arch = GetAttr(x, "architecture")
    Algorithm = None
@@ -832,23 +845,16 @@ def ExtractDNSInfo(x):
       if Algorithm == None:
          continue
       Fingerprint = sha.new(base64.decodestring(Split[1])).hexdigest()
-      DNSInfo.append("%s. IN SSHFP %u 1 %s" % (Host, Algorithm, Fingerprint))
+      DNSInfo.append("IN\tSSHFP\t%u 1 %s" % (Algorithm, Fingerprint))
 
    Mach = ""
    if x[1].has_key("machine"):
       Mach = " " + GetAttr(x, "machine")
-   DNSInfo.append("%s. IN HINFO \"%s%s\" \"%s\"" % (Host, Arch, Mach, "Debian GNU/Linux"))
-
-   if x[1].has_key("ipHostNumber"):
-      for I in x[1]["ipHostNumber"]:
-         if IsV6Addr.match(I) != None:
-            DNSInfo.append("%s. IN AAAA %s" % (Host, I))
-         else:
-            DNSInfo.append("%s. IN A %s" % (Host, I))
+   DNSInfo.append("IN\tHINFO\t\"%s%s\" \"%s\"" % (Arch, Mach, "Debian GNU/Linux"))
 
    if x[1].has_key("mXRecord"):
       for I in x[1]["mXRecord"]:
-         DNSInfo.append("%s. IN MX %s" % (Host, I))
+         DNSInfo.append("IN\tMX\t%s" % (I))
 
    return DNSInfo
 
@@ -871,9 +877,15 @@ def GenZoneRecords(File):
             continue
 
          DNSInfo = ExtractDNSInfo(x)
+         start = True
          for Line in DNSInfo:
-            Line = Sanitize(Line) + "\n"
-            F.write(Line)
+            if start == True:
+               Line = "%s.\t%s" % (GetAttr(x, "hostname"), Line)
+               start = False
+            else:
+               Line = "\t\t\t%s" % (Line)
+
+            F.write(Line + "\n")
 
    # Oops, something unspeakable happened.
    except:
@@ -922,26 +934,17 @@ def GenBSMTP(File, HomePrefix):
       raise
    Done(File, F, None)
   
-#  cache IP adresses
-HostToIPCache = {}
-def HostToIP(Host):
-   global HostToIPCache
-   if not Host in HostToIPCache:
-      IPAdressesT = None
-      try:
-         IPAdressesT = list(set([ (a[0], a[4][0]) for a in socket.getaddrinfo(Host, None)]))
-      except socket.gaierror, (code):
-         if code[0] != -2:
-            raise
-      IPAdresses = []
-      if not IPAdressesT is None:
-         for addr in IPAdressesT:
-            if addr[0] == socket.AF_INET:
-               IPAdresses += [addr[1], "::ffff:"+addr[1]]
-            else:
-               IPAdresses += [addr[1]]
-      HostToIPCache[Host] = IPAdresses
-   return HostToIPCache[Host]
+def HostToIP(Host, mapped=True):
+
+   IPAdresses = []
+
+   if Host[1].has_key("ipHostNumber"):
+      for addr in Host[1]["ipHostNumber"]:
+         IPAdresses.append(addr)
+         if IsV6Addr.match(addr) is None and mapped == "True":
+            IPAdresses.append("::ffff:"+addr)
+
+   return IPAdresses
 
 # Generate the ssh known hosts file
 def GenSSHKnown(File, mode=None):
@@ -983,10 +986,10 @@ def GenSSHKnown(File, mode=None):
      
          for I in x[1]["sshRSAHostKey"]:
             if mode and mode == 'authorized_keys':
-               Line = 'command="rsync --server --sender -pr . /var/cache/userdir-ldap/hosts/%s",no-port-forwarding,no-X11-forwarding,no-agent-forwarding,from="%s" %s' % (Host, ",".join(HostToIP(Host)), I)
+               Line = 'command="rsync --server --sender -pr . /var/cache/userdir-ldap/hosts/%s",no-port-forwarding,no-X11-forwarding,no-agent-forwarding,from="%s" %s' % (Host, ",".join(HostToIP(x)), I)
                #Line = 'command="rsync --server --sender -pr . /var/cache/userdir-ldap/hosts/%s",no-port-forwarding,no-X11-forwarding,no-agent-forwarding %s' % (Host,I)
             else:
-               Line = "%s %s" %(",".join(HostNames + HostToIP(Host)), I)
+               Line = "%s %s" %(",".join(HostNames + HostToIP(x, False)), I)
             Line = Sanitize(Line) + "\n"
             F.write(Line)
    # Oops, something unspeakable happened.
@@ -996,7 +999,7 @@ def GenSSHKnown(File, mode=None):
    Done(File, F, None)
 
 # Generate the debianhosts file (list of all IP addresses)
-def GenHosts(l, File):
+def GenHosts(File):
    F = None
    try:
       OldMask = os.umask(0022)
@@ -1012,7 +1015,7 @@ def GenHosts(l, File):
          if IsDebianHost.match(GetAttr(x, "hostname")) is None:
             continue
 
-         addrs = x[0]["ipHostNumber"]
+         addrs = x[1]["ipHostNumber"]
          for addr in addrs:
             if addr not in seen:
                seen.add(addr)
@@ -1104,7 +1107,7 @@ PasswdAttrs = filter(lambda x: not x in DisabledUsers, PasswdAttrs)
 SSHFiles = GenSSHShadow()
 GenMarkers(GlobalDir + "markers")
 GenSSHKnown(GlobalDir + "ssh_known_hosts")
-GenHosts(l, GlobalDir + "debianhosts")
+GenHosts(GlobalDir + "debianhosts")
 
 for host in HostAttrs:
    if not "hostname" in host[1]: