]> andersk Git - moira.git/blob - gen/ldap.gen
4efa512a8828545a635f7c9b3ea53a2c1d36e75a
[moira.git] / gen / ldap.gen
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
21 $sth = $dbh->prepare("SELECT login, first, middle, last, clearid FROM users " .
22                      "WHERE status = 1 OR status = 9");
23
24 $sth->execute;
25
26 open(OUT, ">$outdir/users") || exit $MR_OCONFIG;
27
28 while(($login, $first, $middle, $last, $clearid) = $sth->fetchrow_array) {
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";
38     $row .= "employeeNumber: $clearid\n";
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 name FROM list WHERE active = 1 " .
79                       "AND grouplist = 1")
80     || exit $MR_DBMS_ERR;
81
82 $sth0->execute;
83
84 while (($name) = $sth0->fetchrow_array) {
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;
90     $sth->execute;
91
92     $members = 0;
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;
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;
This page took 0.518362 seconds and 3 git commands to generate.