]> andersk Git - moira.git/blame - gen/ldap.gen
add ops to contactgroup
[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
a3b2d9b2 21$sth = $dbh->prepare("SELECT u.login, u.first, u.middle, u.last, " .
22 "u.clearid, u.unix_uid, u.shell, f.type, f.name " .
23 "FROM users u, filesys f " .
24 "WHERE (u.status = 1 OR u.status = 9) " .
25 "AND f.label = u.login");
a9392f29 26
27$sth->execute;
28
29open(OUT, ">$outdir/users") || exit $MR_OCONFIG;
30
a3b2d9b2 31while(($login, $first, $middle, $last, $clearid, $unix_uid, $shell, $f_type,
32 $f_name) = $sth->fetchrow_array) {
a9392f29 33 $row = "dn: uid=$login,ou=users,dc=mit,dc=edu\n";
34 $row .= "objectclass: top\n";
35 $row .= "objectclass: person\n";
36 $row .= "objectclass: organizationalperson\n";
37 $row .= "objectclass: inetorgperson\n";
38 $row .= "objectClass: krb5Principal\n";
39 $row .= "uid: $login\n";
40 $row .= "krb5PrincipalName: $login\@ATHENA.MIT.EDU\n";
41 $row .= "userPassword: {KERBEROS}$login\@ATHENA.MIT.EDU\n";
6fbea18e 42 $row .= "employeeNumber: $clearid\n";
a3b2d9b2 43 $row .= "loginShell: $shell\n";
44 $row .= "uidNumber: $unix_uid\n";
45 $row .= "gidNumber: 101\n";
a9392f29 46
47 if($last) {
48 $sn = "sn: $last\n";
49 }
50 else {
51 $sn = "sn: NONE\n";
52 }
53
54 if($first) {
55 $cn = "cn: $first";
56 $givenName = "givenName: $first";
57 }
58 else {
59 $cn = "cn:";
60 $givenName = "givenName:";
61 }
62
63 if($middle) {
64 $cn .= " $middle\n";
65 $givenName .= " $middle\n";
66 }
67 else {
68 $cn .= "\n";
69 $givenName .= "\n";
70 }
71
a3b2d9b2 72 if($f_type eq "AFS") {
73 $row .= "homeDirectory: $f_name\n";
74 }
75
a9392f29 76 $row .= $sn;
77 $row .= $cn;
78 $row .= $givenName;
79 $row .= "ou: user\n";
80 $row .= "description: user\n\n";
81 $row =~ s/\0//g;
82
83 print OUT $row;
84}
85close(OUT);
86
87open(OUT, ">$outdir/groups") || exit $MR_OCONFIG;
88
58f653f7 89$sth0 = $dbh->prepare("SELECT name FROM list WHERE active = 1 " .
90 "AND grouplist = 1")
91 || exit $MR_DBMS_ERR;
92
a9392f29 93$sth0->execute;
94
95while (($name) = $sth0->fetchrow_array) {
58f653f7 96 $sth = $dbh->prepare("SELECT UNIQUE u.login FROM users u, imembers i, " .
97 "list l WHERE l.name = " . $dbh->quote($name) .
98 "AND l.list_id = i.list_id " .
99 "AND i.member_type = 'USER' " .
85578414 100 "AND (u.status = 1 OR u.status = 9) " .
58f653f7 101 "AND i.member_id = u.users_id") || exit $MR_DBMS_ERR;
a9392f29 102 $sth->execute;
103
104 $members = 0;
58f653f7 105 while (($member) = $sth->fetchrow_array) {
106 if(!$members) {
107 $row = "dn: cn=$name,ou=groups,dc=mit,dc=edu\n";
108 $row .= "objectClass: top\n";
109 $row .= "objectClass: groupOfUniqueNames\n";
110 $row .= "cn: $name\n";
111 $row =~ s/\0//g;
112 print OUT $row;
113
114 $members = 1;
115 }
116
117 $row = "uniqueMember: uid=$member,ou=users,dc=mit,dc=edu\n";
118 $row =~ s/\0//g;
119 print OUT $row;
a9392f29 120 }
121
122 print OUT "\n";
123}
124close(OUT);
125
126system("cd $outdir && tar cf $outfile .") == 0 || exit $MR_OCONFIG;
127
128$dbh->disconnect;
129
130exit 0;
This page took 0.060125 seconds and 5 git commands to generate.