]>
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 | ||
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 | ||
85 | while (($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 | } | |
121 | close(OUT); | |
122 | ||
123 | system("cd $outdir && tar cf $outfile .") == 0 || exit $MR_OCONFIG; | |
124 | ||
125 | $dbh->disconnect; | |
126 | ||
127 | exit 0; |