]>
Commit | Line | Data |
---|---|---|
a9392f29 | 1 | #!/moira/bin/perl -Tw |
2 | ||
3 | # $Id$ | |
4 | ||
5 | use DBI; | |
6 | ||
7 | # The following exit codes are defined and MUST BE CONSISTENT with the | |
8 | # error codes the library uses: | |
9 | $MR_DBMS_ERR = 47836421; | |
10 | $MR_OCONFIG = 47836460; | |
11 | ||
12 | $ENV{PATH} = "/bin:/usr/bin:/sbin:/usr/sbin"; | |
13 | ||
14 | $outdir = '/moira/dcm/ldap'; | |
15 | $outfile = '/moira/dcm/ldap.out'; | |
16 | umask 022; | |
17 | ||
18 | $dbh = DBI->connect("dbi:Oracle:moira", "moira", "moira") | |
19 | || exit $MR_DBMS_ERR; | |
20 | ||
a19f8db5 | 21 | $sth = $dbh->prepare("SELECT login, first, middle, last, clearid FROM users " . |
33a29ee6 | 22 | "WHERE status = 1 OR status = 9"); |
a9392f29 | 23 | |
24 | $sth->execute; | |
25 | ||
26 | open(OUT, ">$outdir/users") || exit $MR_OCONFIG; | |
27 | ||
6fbea18e | 28 | while(($login, $first, $middle, $last, $clearid) = $sth->fetchrow_array) { |
a9392f29 | 29 | $row = "dn: uid=$login,ou=users,dc=mit,dc=edu\n"; |
30 | $row .= "objectclass: top\n"; | |
31 | $row .= "objectclass: person\n"; | |
32 | $row .= "objectclass: organizationalperson\n"; | |
33 | $row .= "objectclass: inetorgperson\n"; | |
34 | $row .= "objectClass: krb5Principal\n"; | |
35 | $row .= "uid: $login\n"; | |
36 | $row .= "krb5PrincipalName: $login\@ATHENA.MIT.EDU\n"; | |
37 | $row .= "userPassword: {KERBEROS}$login\@ATHENA.MIT.EDU\n"; | |
6fbea18e | 38 | $row .= "employeeNumber: $clearid\n"; |
a9392f29 | 39 | |
40 | if($last) { | |
41 | $sn = "sn: $last\n"; | |
42 | } | |
43 | else { | |
44 | $sn = "sn: NONE\n"; | |
45 | } | |
46 | ||
47 | if($first) { | |
48 | $cn = "cn: $first"; | |
49 | $givenName = "givenName: $first"; | |
50 | } | |
51 | else { | |
52 | $cn = "cn:"; | |
53 | $givenName = "givenName:"; | |
54 | } | |
55 | ||
56 | if($middle) { | |
57 | $cn .= " $middle\n"; | |
58 | $givenName .= " $middle\n"; | |
59 | } | |
60 | else { | |
61 | $cn .= "\n"; | |
62 | $givenName .= "\n"; | |
63 | } | |
64 | ||
65 | $row .= $sn; | |
66 | $row .= $cn; | |
67 | $row .= $givenName; | |
68 | $row .= "ou: user\n"; | |
69 | $row .= "description: user\n\n"; | |
70 | $row =~ s/\0//g; | |
71 | ||
72 | print OUT $row; | |
73 | } | |
74 | close(OUT); | |
75 | ||
76 | open(OUT, ">$outdir/groups") || exit $MR_OCONFIG; | |
77 | ||
58f653f7 | 78 | $sth0 = $dbh->prepare("SELECT name FROM list WHERE active = 1 " . |
79 | "AND grouplist = 1") | |
80 | || exit $MR_DBMS_ERR; | |
81 | ||
a9392f29 | 82 | $sth0->execute; |
83 | ||
84 | while (($name) = $sth0->fetchrow_array) { | |
58f653f7 | 85 | $sth = $dbh->prepare("SELECT UNIQUE u.login FROM users u, imembers i, " . |
86 | "list l WHERE l.name = " . $dbh->quote($name) . | |
87 | "AND l.list_id = i.list_id " . | |
88 | "AND i.member_type = 'USER' " . | |
89 | "AND i.member_id = u.users_id") || exit $MR_DBMS_ERR; | |
a9392f29 | 90 | $sth->execute; |
91 | ||
92 | $members = 0; | |
58f653f7 | 93 | while (($member) = $sth->fetchrow_array) { |
94 | if(!$members) { | |
95 | $row = "dn: cn=$name,ou=groups,dc=mit,dc=edu\n"; | |
96 | $row .= "objectClass: top\n"; | |
97 | $row .= "objectClass: groupOfUniqueNames\n"; | |
98 | $row .= "cn: $name\n"; | |
99 | $row =~ s/\0//g; | |
100 | print OUT $row; | |
101 | ||
102 | $members = 1; | |
103 | } | |
104 | ||
105 | $row = "uniqueMember: uid=$member,ou=users,dc=mit,dc=edu\n"; | |
106 | $row =~ s/\0//g; | |
107 | print OUT $row; | |
a9392f29 | 108 | } |
109 | ||
110 | print OUT "\n"; | |
111 | } | |
112 | close(OUT); | |
113 | ||
114 | system("cd $outdir && tar cf $outfile .") == 0 || exit $MR_OCONFIG; | |
115 | ||
116 | $dbh->disconnect; | |
117 | ||
118 | exit 0; |