]> andersk Git - moira.git/blob - gen/ldap.gen
Command line printer manipulation client, and build goo.
[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 $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
26
27 $sth0->execute;
28
29 open(OUT, ">$outdir/users") || exit $MR_OCONFIG;
30
31 while(($login, $first, $middle, $last, $clearid, $unix_uid, 
32        $shell) = $sth0->fetchrow_array) {
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";
42     $row .= "employeeNumber: $clearid\n";
43     $row .= "loginShell: $shell\n";
44     $row .= "uidNumber: $unix_uid\n";
45     $row .= "gidNumber: 101\n";
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
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         }
81     }
82
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
96 $sth0 = $dbh->prepare("SELECT name FROM list WHERE active = 1 " .
97                       "AND grouplist = 1")
98     || exit $MR_DBMS_ERR;
99
100 $sth0->execute;
101
102 while (($name) = $sth0->fetchrow_array) {
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' " .
107                          "AND (u.status = 1 OR u.status = 9) " .
108                          "AND i.member_id = u.users_id") || exit $MR_DBMS_ERR;
109     $sth->execute;
110
111     $members = 0;
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;
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;
This page took 1.460675 seconds and 5 git commands to generate.