]> andersk Git - moira.git/blobdiff - gen/ldap.gen
Reimplement events.gen as a Pro*C application.
[moira.git] / gen / ldap.gen
index 1da68704de91364dc78d177841e4ff6e2460730c..e59081a899e1c82ede5a12ef30ff91f09d2327fd 100755 (executable)
@@ -18,14 +18,18 @@ umask 022;
 $dbh = DBI->connect("dbi:Oracle:moira", "moira", "moira")
     || exit $MR_DBMS_ERR;
 
-$sth = $dbh->prepare("SELECT login, first, middle, last FROM users " .
-                    "WHERE status = 1");
+$sth = $dbh->prepare("SELECT u.login, u.first, u.middle, u.last, " .
+                    "u.clearid, u.unix_uid, u.shell, f.type, f.name " .
+                    "FROM users u, filesys f " .
+                    "WHERE (u.status = 1 OR u.status = 9) " .
+                    "AND f.label = u.login");
 
 $sth->execute;
 
 open(OUT, ">$outdir/users") || exit $MR_OCONFIG;
 
-while(($login, $first, $middle, $last, $clearid) = $sth->fetchrow_array) {
+while(($login, $first, $middle, $last, $clearid, $unix_uid, $shell, $f_type,
+       $f_name) = $sth->fetchrow_array) {
     $row = "dn: uid=$login,ou=users,dc=mit,dc=edu\n";
     $row .= "objectclass: top\n";
     $row .= "objectclass: person\n";
@@ -36,6 +40,9 @@ while(($login, $first, $middle, $last, $clearid) = $sth->fetchrow_array) {
     $row .= "krb5PrincipalName: $login\@ATHENA.MIT.EDU\n";
     $row .= "userPassword: {KERBEROS}$login\@ATHENA.MIT.EDU\n";
     $row .= "employeeNumber: $clearid\n";
+    $row .= "loginShell: $shell\n";
+    $row .= "uidNumber: $unix_uid\n";
+    $row .= "gidNumber: 101\n";
 
     if($last) {
        $sn = "sn: $last\n";
@@ -62,6 +69,10 @@ while(($login, $first, $middle, $last, $clearid) = $sth->fetchrow_array) {
        $givenName .= "\n";
     }
 
+    if($f_type eq "AFS") {
+       $row .= "homeDirectory: $f_name\n";
+    }
+
     $row .= $sn;
     $row .= $cn;
     $row .= $givenName;
@@ -75,45 +86,37 @@ close(OUT);
 
 open(OUT, ">$outdir/groups") || exit $MR_OCONFIG;
 
-$sth0 = $dbh->prepare("SELECT DISTINCT l.name FROM list l, imembers i " .
-                      "WHERE i.member_type = 'LIST' " .
-                      "AND i.member_id = l.list_id " .
-                      "AND l.grouplist = 1 " .
-                      "ORDER BY l.name") || exit $MR_DBMS_ERR;
+$sth0 = $dbh->prepare("SELECT name FROM list WHERE active = 1 " .
+                     "AND grouplist = 1")
+    || exit $MR_DBMS_ERR;
+
 $sth0->execute;
 
 while (($name) = $sth0->fetchrow_array) {
-    $sth = $dbh->prepare("SELECT UNIQUE i.member_id " .
-                         "FROM imembers i, list l, users u " .
-                         "WHERE l.name = " . $dbh->quote($name) .
-                         "AND i.list_id = l.list_id " .
-                         "AND i.member_id = u.users_id " .
-                         "AND u.status = 1 " .
-                         "AND member_type = 'USER'")
-                         || exit $MR_DBMS_ERR;
+    $sth = $dbh->prepare("SELECT UNIQUE u.login FROM users u, imembers i, " .
+                        "list l WHERE l.name = " . $dbh->quote($name) .
+                        "AND l.list_id = i.list_id " .
+                        "AND i.member_type = 'USER' " .
+                        "AND (u.status = 1 OR u.status = 9) " .
+                        "AND i.member_id = u.users_id") || exit $MR_DBMS_ERR;
     $sth->execute;
 
     $members = 0;
-    while (($id) = $sth->fetchrow_array) {
-       if(!$members) {
-           $row = "dn: cn=$name,ou=groups,dc=mit,dc=edu\n";
-           $row .= "objectClass: top\n";
-           $row .= "objectClass: groupOfUniqueNames\n";
-           $row .= "cn: $name\n";
-           $row =~ s/\0//g;
-           print OUT $row;
-
-           $members = 1;
-       }
-
-       ($member) = $dbh->selectrow_array("SELECT login FROM users " .
-                                         "WHERE users_id = " .
-                                         $dbh->quote($id)) ||
-                                             exit $MR_DBMS_ERR;
-
-       $row = "uniqueMember: uid=$member,ou=users,dc=mit,dc=edu\n";
-       $row =~ s/\0//g;
-       print OUT $row;
+    while (($member) = $sth->fetchrow_array) {
+       if(!$members) {
+           $row = "dn: cn=$name,ou=groups,dc=mit,dc=edu\n";
+           $row .= "objectClass: top\n";
+           $row .= "objectClass: groupOfUniqueNames\n";
+           $row .= "cn: $name\n";
+           $row =~ s/\0//g;
+           print OUT $row;
+
+           $members = 1;
+       }
+
+       $row = "uniqueMember: uid=$member,ou=users,dc=mit,dc=edu\n";
+       $row =~ s/\0//g;
+       print OUT $row;
     }
 
     print OUT "\n";
This page took 0.048321 seconds and 4 git commands to generate.