Add hostnames from the host purpose field to the ssh_known_hosts file (by tomv_w) userdir-ldap-0.3.51
authorPeter Palfrader <peter@palfrader.org>
Sun, 23 Nov 2008 20:23:20 +0000 (21:23 +0100)
committerPeter Palfrader <peter@palfrader.org>
Sun, 23 Nov 2008 20:23:20 +0000 (21:23 +0100)
debian/changelog
ud-generate
userdir-ldap.conf
userdir_ldap.py

index 8da79cb..069ad29 100644 (file)
@@ -1,4 +1,4 @@
-userdir-ldap (0.3.XX) unstable; urgency=low
+userdir-ldap (0.3.51) unstable; urgency=low
 
   * Update template/welcome-message-800 to match the actual template used
     on db.debian.org.
@@ -9,8 +9,10 @@ userdir-ldap (0.3.XX) unstable; urgency=low
   * Extend that support so that subgroups work on a per host basis too,
     so that for instance the debbugs group can be in group
     maillog@rietz.debian.org.
+  * Add hostnames from the host purpose field to the ssh_known_hosts
+    file [Thomas Viehmann].
 
- -- Peter Palfrader <weasel@debian.org>  Sun, 23 Nov 2008 21:06:53 +0100
+ -- Peter Palfrader <weasel@debian.org>  Sun, 23 Nov 2008 21:22:58 +0100
 
 userdir-ldap (0.3.50) unstable; urgency=low
 
index 5f2a482..2ad4791 100755 (executable)
@@ -10,6 +10,7 @@
 #   Copyright (c) 2008 Andreas Barth <aba@not.so.argh.org>
 #   Copyright (c) 2008 Mark Hymers <mhy@debian.org>
 #   Copyright (c) 2008 Luk Claes <luk@debian.org>
+#   Copyright (c) 2008 Thomas Viehmann <tv@beamnet.de>
 #
 #   This program is free software; you can redistribute it and/or modify
 #   it under the terms of the GNU General Public License as published by
@@ -41,6 +42,7 @@ UUID_FORMAT = '[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}'
 
 EmailCheck = re.compile("^([^ <>@]+@[^ ,<>@]+)?$");
 BSMTPCheck = re.compile(".*mx 0 (gluck)\.debian\.org\..*",re.DOTALL);
+PurposeHostField = re.compile(r"\[\[([\*\-]?[a-z0-9.\-]*)(?:\|.*)?\]\]")
 DNSZone = ".debian.net"
 Keyrings = ConfModule.sync_keyrings.split(":")
 
@@ -905,8 +907,31 @@ def GenSSHKnown(l,File,mode=None):
          continue;
       Host = GetAttr(x,"hostname");
       HostNames = [ Host ]
-      SHost = Host.find(".")
-      if SHost != None: HostNames += [Host[0:SHost]]
+      if Host.endswith(HostDomain):
+         HostNames.append(Host[:-(len(HostDomain)+1)])
+
+      #<weasel> [[]] makes http links
+      #<weasel> but integrating it somehow into the purpose line might be a good idea
+      #<weasel> maybe [[*fooobar]] things would be a link but not added to the ssh key list,
+      #         and [[-..]] or something would be just an ssh entry but no link
+      # in the purpose field [[host|some other text]] (where some other text is optional)
+      # makes a hyperlink on the web thing. we now also add these hosts to the ssh known_hosts
+      # file.  But so that we don't have to add everything we link we can add an asterisk
+      # and say [[*... to ignore it.  In order to be able to add stuff to ssh without
+      # http linking it we also support [[-hostname]] entries.
+      for i in x[1].get("purpose",[]):
+         m = PurposeHostField.match(i)
+         if m:
+            m = m.group(1)
+            # we ignore [[*..]] entries
+            if m.startswith('*'):
+               continue;
+            if m.startswith('-'):
+               m = m[1:]
+            if m:
+               HostNames.append(m)
+               if m.endswith(HostDomain):
+                  HostNames.append(m[:-(len(HostDomain)+1)])
 
       for I in x[1]["sshRSAHostKey"]:
          if mode and mode == 'authorized_keys':
@@ -989,7 +1014,7 @@ PasswdAttrs = l.search_s(BaseDn,ldap.SCOPE_ONELEVEL,"uid=*",\
                  "mailWhitelist", "sudoPassword"]);
 # Fetch all the hosts
 HostAttrs    = l.search_s(HostBaseDn,ldap.SCOPE_ONELEVEL,"sshRSAHostKey=*",\
-                ["hostname","sshRSAHostKey"]);
+                ["hostname","sshRSAHostKey","purpose"]);
 
 # Open the control file
 if len(sys.argv) == 1:
index 975f341..42ffb49 100644 (file)
@@ -16,6 +16,9 @@ adminuser = "admin";
 # Printable email addresses are shown as: 'cn mn sn <uid@emailappend>'
 emailappend = "debian.org";
 
+# Domain for hosts, defaults to emailappend if not present
+#hostdomain = "debian.org"
+
 # For the mail interface
 maildomain = "db.debian.org";
 replyto = "admin@" + maildomain;
index 4477232..3a43f4f 100644 (file)
@@ -43,6 +43,7 @@ TemplatesDir = ConfModule.templatesdir;
 PassDir = ConfModule.passdir;
 Ech_ErrorLog = ConfModule.ech_errorlog;
 Ech_MainLog = ConfModule.ech_mainlog;
+HostDomain = getattr(ConfModule, "hostdomain", EmailAppend)
 
 try:
    UseSSL = ConfModule.usessl;