]> andersk Git - moira.git/blame - gen/ldap.gen
Include status 9 users as well.
[moira.git] / gen / ldap.gen
CommitLineData
a9392f29 1#!/moira/bin/perl -Tw
2
3# $Id$
4
5use 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';
16umask 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
26open(OUT, ">$outdir/users") || exit $MR_OCONFIG;
27
6fbea18e 28while(($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}
74close(OUT);
75
76open(OUT, ">$outdir/groups") || exit $MR_OCONFIG;
77
78$sth0 = $dbh->prepare("SELECT DISTINCT l.name FROM list l, imembers i " .
79 "WHERE i.member_type = 'LIST' " .
80 "AND i.member_id = l.list_id " .
81 "AND l.grouplist = 1 " .
82 "ORDER BY l.name") || exit $MR_DBMS_ERR;
83$sth0->execute;
84
85while (($name) = $sth0->fetchrow_array) {
86 $sth = $dbh->prepare("SELECT UNIQUE i.member_id " .
87 "FROM imembers i, list l, users u " .
88 "WHERE l.name = " . $dbh->quote($name) .
89 "AND i.list_id = l.list_id " .
90 "AND i.member_id = u.users_id " .
33a29ee6 91 "AND (u.status = 1 OR u.status = 9)" .
a9392f29 92 "AND member_type = 'USER'")
93 || exit $MR_DBMS_ERR;
94 $sth->execute;
95
96 $members = 0;
97 while (($id) = $sth->fetchrow_array) {
98 if(!$members) {
99 $row = "dn: cn=$name,ou=groups,dc=mit,dc=edu\n";
100 $row .= "objectClass: top\n";
101 $row .= "objectClass: groupOfUniqueNames\n";
102 $row .= "cn: $name\n";
103 $row =~ s/\0//g;
104 print OUT $row;
105
106 $members = 1;
107 }
108
109 ($member) = $dbh->selectrow_array("SELECT login FROM users " .
110 "WHERE users_id = " .
111 $dbh->quote($id)) ||
112 exit $MR_DBMS_ERR;
113
114 $row = "uniqueMember: uid=$member,ou=users,dc=mit,dc=edu\n";
115 $row =~ s/\0//g;
116 print OUT $row;
117 }
118
119 print OUT "\n";
120}
121close(OUT);
122
123system("cd $outdir && tar cf $outfile .") == 0 || exit $MR_OCONFIG;
124
125$dbh->disconnect;
126
127exit 0;
This page took 0.970958 seconds and 5 git commands to generate.