SSH stuff
authorjgg <>
Tue, 28 Dec 1999 05:35:02 +0000 (05:35 +0000)
committerjgg <>
Tue, 28 Dec 1999 05:35:02 +0000 (05:35 +0000)
ud-arbimport
ud-sshlist [new file with mode: 0755]
userdir_ldap.py

index 5b64ed8..02430fb 100755 (executable)
@@ -27,19 +27,39 @@ Password = getpass(AdminUser + "'s password: ");
 # Connect to the ldap server
 l = ldap.open(LDAPServer);
 UserDn = "uid=" + AdminUser + "," + BaseDn;
-l.simple_bind_s(UserDn,Password);
+#l.simple_bind_s(UserDn,Password);
 
 List = open(arguments[1],"r");
+Set = [];
+User = None;
 while(1):
    Line = List.readline();
-   if Line == "":
-      break;
-
-   Split = re.split("[:\n]",Line);
+   if Line != "":
+      # Glob similar lines
+      Split = re.split("[:\n]",Line);
+      if User == None:
+         User = Split[0];
+      if Split[0] == User:
+         Set.append(string.strip(Split[1]));
+         continue;
+   else:
+      if len(Set) == 0:
+         break;
    
-   Rec = [(ldap.MOD_REPLACE,arguments[0],string.strip(Split[1]))];
-   Dn = "uid=" + Split[0] + "," + BaseDn;
+   # Generate the command..
+   Rec = [(ldap.MOD_REPLACE,arguments[0],Set[0])];
+   for x in Set[1:]:
+      Rec.append((ldap.MOD_ADD,arguments[0],x))
+
+   Dn = "uid=" + User + "," + BaseDn;
    try:
+      print Dn,Rec;
       l.modify_s(Dn,Rec);
    except:
       print "Failed",Dn;
+   
+   # Out of data..
+   if Line == "":
+      break;   
+   User = Split[0];
+   Set = [string.strip(Split[1])];
diff --git a/ud-sshlist b/ud-sshlist
new file mode 100755 (executable)
index 0000000..279dc98
--- /dev/null
@@ -0,0 +1,46 @@
+#!/usr/bin/env python
+# -*- mode: python -*-
+# This script takes a list of .forward files and generates a list of colon
+# delimited fields for import into a ldap directory. The fields represent
+# the user and their email forwarding.
+#
+# A sample invokation..
+#   cd /home
+#   find -name ".foward" -maxdepth 2 | mkforwardlist | sort | less
+# Then correct any invalid forward files if possible. After that stash the
+# output in a file, remove the invalid lines and import it.
+#
+# It also understand .qmail type files
+
+import string, re, time, getopt, os, sys, pwd, stat;
+
+SSHAuthSplit = re.compile('^(.* )?(\d+) (\d+) (\d+) ?(.+)$');
+
+while (1):
+   File = string.strip(sys.stdin.readline());
+   if File == "":
+      break;
+
+   # Attempt to determine the UID   
+   try:
+      User = pwd.getpwuid(os.stat(File)[stat.ST_UID])[0];
+   except KeyError:
+      print "Invalid0", File;
+      continue;
+
+   # Read the first two non comment non empty lines
+   Forward = open(File,"r");
+   Lines = [];
+   while (1):
+      Line = string.strip(Forward.readline());
+      if Line == "":
+         break;
+      if Line[0] == '#' or Line[0] == '\n':
+         continue;
+      if SSHAuthSplit.match(Line) == None:
+         print "Bad line", File;
+      else:
+         Lines.append(Line);
+
+   for x in Lines:
+      print User + ":",x;
index 15e3875..adcc859 100644 (file)
@@ -24,7 +24,7 @@ LastNamesPre = {"van": None, "le": None, "de": None, "di": None};
 
 # SSH Key splitting. The result is:
 # (options,size,modulous,exponent,comment)
-SSHAuthSplit = re.compile('^(.* )?(\d+) (\d+) (\d+) (.+)$');
+SSHAuthSplit = re.compile('^(.* )?(\d+) (\d+) (\d+) ?(.+)$');
 #'^([^\d](?:[^ "]+(?:".*")?)*)? ?(\d+) (\d+) (\d+) (.+)$');
 
 # Safely get an attribute from a tuple representing a dn and an attribute