]>
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 | ||
0317105c | 21 | $sth0 = $dbh->prepare("SELECT u.login, u.first, u.middle, u.last, " . |
22 | "u.clearid, u.unix_uid, u.shell FROM users u " . | |
23 | "WHERE (u.status = 1 OR u.status = 9)") | |
24 | || exit $MR_DBMS_ERR; | |
25 | ||
a9392f29 | 26 | |
0317105c | 27 | $sth0->execute; |
a9392f29 | 28 | |
29 | open(OUT, ">$outdir/users") || exit $MR_OCONFIG; | |
30 | ||
0317105c | 31 | while(($login, $first, $middle, $last, $clearid, $unix_uid, |
32 | $shell) = $sth0->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 | ||
0317105c | 72 | $sth = $dbh->prepare("SELECT f.type, f.name FROM filesys f " . |
73 | "WHERE f.label = '$login'") || exit $MR_DBMS_ERR; | |
74 | ||
75 | $sth->execute; | |
76 | ||
77 | if(($f_type, $f_name) = $sth->fetchrow_array) { | |
78 | if($f_type eq "AFS") { | |
79 | $row .= "homeDirectory: $f_name\n"; | |
80 | } | |
a3b2d9b2 | 81 | } |
82 | ||
a9392f29 | 83 | $row .= $sn; |
84 | $row .= $cn; | |
85 | $row .= $givenName; | |
86 | $row .= "ou: user\n"; | |
87 | $row .= "description: user\n\n"; | |
88 | $row =~ s/\0//g; | |
89 | ||
90 | print OUT $row; | |
91 | } | |
92 | close(OUT); | |
93 | ||
94 | open(OUT, ">$outdir/groups") || exit $MR_OCONFIG; | |
95 | ||
58f653f7 | 96 | $sth0 = $dbh->prepare("SELECT name FROM list WHERE active = 1 " . |
97 | "AND grouplist = 1") | |
98 | || exit $MR_DBMS_ERR; | |
99 | ||
a9392f29 | 100 | $sth0->execute; |
101 | ||
102 | while (($name) = $sth0->fetchrow_array) { | |
58f653f7 | 103 | $sth = $dbh->prepare("SELECT UNIQUE u.login FROM users u, imembers i, " . |
104 | "list l WHERE l.name = " . $dbh->quote($name) . | |
105 | "AND l.list_id = i.list_id " . | |
106 | "AND i.member_type = 'USER' " . | |
85578414 | 107 | "AND (u.status = 1 OR u.status = 9) " . |
58f653f7 | 108 | "AND i.member_id = u.users_id") || exit $MR_DBMS_ERR; |
a9392f29 | 109 | $sth->execute; |
110 | ||
111 | $members = 0; | |
58f653f7 | 112 | while (($member) = $sth->fetchrow_array) { |
113 | if(!$members) { | |
114 | $row = "dn: cn=$name,ou=groups,dc=mit,dc=edu\n"; | |
115 | $row .= "objectClass: top\n"; | |
116 | $row .= "objectClass: groupOfUniqueNames\n"; | |
117 | $row .= "cn: $name\n"; | |
118 | $row =~ s/\0//g; | |
119 | print OUT $row; | |
120 | ||
121 | $members = 1; | |
122 | } | |
123 | ||
124 | $row = "uniqueMember: uid=$member,ou=users,dc=mit,dc=edu\n"; | |
125 | $row =~ s/\0//g; | |
126 | print OUT $row; | |
a9392f29 | 127 | } |
128 | ||
129 | print OUT "\n"; | |
130 | } | |
131 | close(OUT); | |
132 | ||
133 | system("cd $outdir && tar cf $outfile .") == 0 || exit $MR_OCONFIG; | |
134 | ||
135 | $dbh->disconnect; | |
136 | ||
137 | exit 0; |