X-Git-Url: https://git.adam-barratt.org.uk/?p=mirror%2Fuserdir-ldap.git;a=blobdiff_plain;f=ud-userimport;h=3e926ecf197563997bc532093fd5d04b29c331c4;hp=90a8de6b002fc66b1cc26eab729f34998df33110;hb=a6fb69805c3999a85c064a96c93417bb1c284c5c;hpb=c7de52bb8b797a0672a1cfb01db533f9cf1a7db4 diff --git a/ud-userimport b/ud-userimport index 90a8de6..3e926ec 100755 --- a/ud-userimport +++ b/ud-userimport @@ -37,7 +37,7 @@ # ldapimport -s /etc/shadow -g /etc/group # -import string, re, time, ldap, getopt, sys; +import re, time, ldap, getopt, sys; from userdir_ldap import *; DoAdd = 0; @@ -71,11 +71,6 @@ def ParseGecos(Field): Gecos[3] + "," + Gecos[4]; return (Field,cn,mn,sn); -# Check if a number string is really a number -def CheckNumber(Num): - for x in Num: - string.index(string.digits,x); - # Read the passwd file into the database def DoPasswd(l,Passwd): # Read the passwd file and import it @@ -88,39 +83,45 @@ def DoPasswd(l,Passwd): Split = re.split("[:\n]",Line); (Split[4],cn,mn,sn) = ParseGecos(Split[4]); - CheckNumber(Split[2]); - CheckNumber(Split[3]); - Rec = [(ldap.MOD_REPLACE,"uid",Split[0]), - (ldap.MOD_REPLACE,"uidNumber",Split[2]), - (ldap.MOD_REPLACE,"gidNumber",Split[3]), - (ldap.MOD_REPLACE,"gecos",Split[4]), - (ldap.MOD_REPLACE,"homeDirectory",Split[5]), - (ldap.MOD_REPLACE,"loginShell",Split[6]), - (ldap.MOD_REPLACE,"cn",cn), - (ldap.MOD_REPLACE,"mn",mn), - (ldap.MOD_REPLACE,"sn",sn)]; + Split[2] = int(Split[2]) + Split[3] = int(Split[3]) + Rec = [("uid",Split[0]), + ("uidNumber",Split[2]), + ("gidNumber",Split[3]), + ("gecos",Split[4]), + ("homeDirectory",Split[5]), + ("loginShell",Split[6]), + ("cn",cn), + ("sn",sn)]; + + # Avoid schema check complaints when mn is empty + if (mn): + Rec.append(("mn",mn)) Dn = "uid=" + Split[0] + "," + BaseDn; - print "Importing",Dn, + print "Importing", Dn sys.stdout.flush(); - # Unfortunately add_s does not take the same args as modify :| + DoModify = True + if (DoAdd == 1): try: - l.add_s(Dn,[("uid",Split[0]), - ("objectClass","top"), - ("objectClass","account"), - ("objectClass","posixAccount"), - ("objectClass","shadowAccount"), - ("objectClass","debiandeveloper")]); + AddRec = Rec + Rec.append(("objectClass", UserObjectClasses)) + l.add_s(Dn,AddRec) + DoModify = False + except ldap.ALREADY_EXISTS: print "exists",; - # Send the modify request - l.modify(Dn,Rec); - Outstanding = Outstanding + 1; - Outstanding = FlushOutstanding(l,Outstanding,1); - print "done"; + if (DoModify): + # Send the modify request + ModRec = [(ldap.MOD_REPLACE, k[0], k[1]) for k in Rec] + l.modify(Dn,ModRec); + Outstanding = Outstanding + 1; + Outstanding = FlushOutstanding(l,Outstanding,1); + print "done"; + FlushOutstanding(l,Outstanding); # Read the shadow file into the database @@ -142,14 +143,20 @@ def DoShadow(l,Shadow): continue; for x in range(2,8): - CheckNumber(Split[x]); + Split[x] = int(Split[x]) Rec = [(ldap.MOD_REPLACE,"shadowLastChange",Split[2]), (ldap.MOD_REPLACE,"shadowMin",Split[3]), (ldap.MOD_REPLACE,"shadowMax",Split[4]), - (ldap.MOD_REPLACE,"shadowWarning",Split[5]), - (ldap.MOD_REPLACE,"shadowInactive",Split[6]), - (ldap.MOD_REPLACE,"shadowExpire",Split[7])]; + (ldap.MOD_REPLACE,"shadowWarning",Split[5])] + + # Avoid schema violations + if (Split[6]): + Rec.append((ldap.MOD_REPLACE,"shadowInactive",Split[6])) + + if (Split[7]): + Rec.append((ldap.MOD_REPLACE,"shadowExpire",Split[7])) + if (WritePasses == 1): Rec.append((ldap.MOD_REPLACE,"userPassword","{crypt}"+Split[1])); @@ -177,7 +184,7 @@ def DoGroup(l,Group): # Split up the group information Split = re.split("[:\n]",Line); Members = re.split("[, ]*",Split[3]); - CheckNumber(Split[2]); + Split[2] = int(Split[2]) # Iterate over the membership list and add the membership information # To the directory @@ -210,8 +217,7 @@ def DoGroup(l,Group): if (DoAdd == 1): try: l.add_s(Dn,[("gid",Split[0]), - ("objectClass","top"), - ("objectClass","posixGroup")]); + ("objectClass", GroupObjectClasses)]) except ldap.ALREADY_EXISTS: print "exists",;