Hourly stamp
[mirror/userdir-ldap.git] / ud-arbimport
1 #!/usr/bin/env python
2 # -*- mode: python -*-
3 # This script imports arbitary lists of data. The input is a file with 
4 # the form of:
5 #  uid: <data>
6
7 import string, re, time, ldap, getopt, sys;
8 from userdir_ldap import *;
9
10 # Process options
11 (options, arguments) = getopt.getopt(sys.argv[1:], "u:m:n")
12 for (switch, val) in options:
13    if (switch == '-u'):
14       AdminUser = val
15    elif (switch == '-m'):
16        LoadOverride(val);
17    elif (switch == '-n'):
18        NoAct = 1;
19 if len(arguments) == 0:
20    print "Give the key to assignt to then the file to import";
21    os.exit(0);
22
23 # Main program starts here
24 print "Accessing LDAP directory as '" + AdminUser + "'";
25 Password = getpass(AdminUser + "'s password: ");
26
27 # Connect to the ldap server
28 l = ldap.open(LDAPServer);
29 UserDn = "uid=" + AdminUser + "," + BaseDn;
30 #l.simple_bind_s(UserDn,Password);
31
32 List = open(arguments[1],"r");
33 Set = [];
34 User = None;
35 while(1):
36    Line = List.readline();
37    if Line != "":
38       # Glob similar lines
39       Split = re.split("[:\n]",Line);
40       if User == None:
41          User = Split[0];
42       if Split[0] == User:
43          Set.append(string.strip(Split[1]));
44          continue;
45    else:
46       if len(Set) == 0:
47          break;
48    
49    # Generate the command..
50    Rec = [(ldap.MOD_REPLACE,arguments[0],Set[0])];
51    for x in Set[1:]:
52       Rec.append((ldap.MOD_ADD,arguments[0],x))
53
54    Dn = "uid=" + User + "," + BaseDn;
55    try:
56       print Dn,Rec;
57       l.modify_s(Dn,Rec);
58    except:
59       print "Failed",Dn;
60    
61    # Out of data..
62    if Line == "":
63       break;   
64    User = Split[0];
65    Set = [string.strip(Split[1])];