- # Write out the zone file entry for each user
- for x in PasswdAttrs:
- if x[1].has_key("dnsZoneEntry") == 0:
- continue;
- try:
- F.write("; %s\n"%(EmailAddress(x)));
- for z in x[1]["dnsZoneEntry"]:
- Split = string.split(string.lower(z));
- if string.lower(Split[1]) == 'in':
- for y in range(0,len(Split)):
- if Split[y] == "$":
- Split[y] = "\n\t";
- Line = string.join(Split," ") + "\n";
- F.write(Line);
-
- Host = Split[0] + DNSZone;
- if BSMTPCheck.match(Line) != None:
- F.write("; Has BSMTP\n");
-
- # Write some identification information
- if string.lower(Split[2]) == "a":
- Line = "%s IN TXT \"%s\"\n"%(Split[0],EmailAddress(x));
- for y in x[1]["keyFingerPrint"]:
- Line = Line + "%s IN TXT \"PGP %s\"\n"%(Split[0],FormatPGPKey(y));
- F.write(Line);
- else:
- Line = "; Err %s"%(str(Split));
- F.write(Line);
-
- F.write("\n");
- except:
- F.write("; Errors\n");
- pass;
-
- # Oops, something unspeakable happened.
- except:
- Die(File,F,None);
- raise;
- Done(File,F,None);
+# Generate the DNS Zone file
+def GenDNS(File):
+ F = None
+ try:
+ F = open(File + ".tmp", "w")
+
+# global HostAttrs
+#
+# for x in HostAttrs:
+# if x[1].has_key("hostname") == 0 or \
+# x[1].has_key("architecture") == 0 or\
+# x[1].has_key("sshRSAHostKey") == 0:
+# continue
+#
+# if IsDebianHost.match(GetAttr(x, "hostname")) is not None:
+# continue
+#
+# DNSInfo = ExtractDNSInfo(x)
+# start = True
+# for Line in DNSInfo:
+# 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
+
+ # Write out the zone file entry for each user
+ for x in PasswdAttrs:
+ if x[1].has_key("dnsZoneEntry") == 0:
+ continue
+
+ # If the account has no PGP key, do not write it
+ if x[1].has_key("keyFingerPrint") == 0 and not isRoleAccount(x[1]):
+ continue
+ try:
+ F.write("; %s\n"%(EmailAddress(x)))
+ for z in x[1]["dnsZoneEntry"]:
+ Split = z.lower().split()
+ if Split[1].lower() == 'in':
+ for y in range(0, len(Split)):
+ if Split[y] == "$":
+ Split[y] = "\n\t"
+ Line = " ".join(Split) + "\n"
+ F.write(Line)
+
+ Host = Split[0] + DNSZone
+ if BSMTPCheck.match(Line) != None:
+ F.write("; Has BSMTP\n")
+
+ # Write some identification information
+ if Split[2].lower() == "a":
+ Line = "%s IN TXT \"%s\"\n"%(Split[0], EmailAddress(x))
+ for y in x[1]["keyFingerPrint"]:
+ Line = Line + "%s IN TXT \"PGP %s\"\n"%(Split[0], FormatPGPKey(y))
+ F.write(Line)
+ else:
+ Line = "; Err %s"%(str(Split))
+ F.write(Line)
+
+ F.write("\n")
+ except:
+ F.write("; Errors\n")
+ pass
+
+ # Oops, something unspeakable happened.
+ except:
+ Die(File, F, None)
+ raise
+ Done(File, F, None)
+
+def ExtractDNSInfo(x):
+
+ TTLprefix="\t"
+ if 'dnsTTL' in x[1]:
+ TTLprefix="%s\t"%(x[1]["dnsTTL"][0])
+
+ DNSInfo = []
+ if x[1].has_key("ipHostNumber"):
+ for I in x[1]["ipHostNumber"]:
+ if IsV6Addr.match(I) != None:
+ DNSInfo.append("%sIN\tAAAA\t%s" % (TTLprefix, I))
+ else:
+ DNSInfo.append("%sIN\tA\t%s" % (TTLprefix, I))
+
+ Host = GetAttr(x, "hostname")
+ Arch = GetAttr(x, "architecture")
+ Algorithm = None
+
+ for I in x[1]["sshRSAHostKey"]:
+ Split = I.split()
+ if Split[0] == 'ssh-rsa':
+ Algorithm = 1
+ if Split[0] == 'ssh-dss':
+ Algorithm = 2
+ if Algorithm == None:
+ continue
+ Fingerprint = sha.new(base64.decodestring(Split[1])).hexdigest()
+ DNSInfo.append("%sIN\tSSHFP\t%u 1 %s" % (TTLprefix, Algorithm, Fingerprint))
+
+ Mach = ""
+ if x[1].has_key("machine"):
+ Mach = " " + GetAttr(x, "machine")
+ DNSInfo.append("%sIN\tHINFO\t\"%s%s\" \"%s\"" % (TTLprefix, Arch, Mach, "Debian GNU/Linux"))
+
+ if x[1].has_key("mXRecord"):
+ for I in x[1]["mXRecord"]:
+ DNSInfo.append("%sIN\tMX\t%s" % (TTLprefix, I))
+
+ return DNSInfo
+
+# Generate the DNS records
+def GenZoneRecords(File):
+ F = None
+ try:
+ F = open(File + ".tmp", "w")
+
+ # Fetch all the hosts
+ global HostAttrs
+
+ for x in HostAttrs:
+ if x[1].has_key("hostname") == 0 or \
+ x[1].has_key("architecture") == 0 or\
+ x[1].has_key("sshRSAHostKey") == 0:
+ continue
+
+ if IsDebianHost.match(GetAttr(x, "hostname")) is None:
+ continue
+
+ DNSInfo = ExtractDNSInfo(x)
+ start = True
+ for Line in DNSInfo:
+ 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:
+ Die(File, F, None)
+ raise
+ Done(File, F, None)