# 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])];
--- /dev/null
+#!/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;
# 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