X-Git-Url: http://andersk.mit.edu/gitweb/moira.git/blobdiff_plain/a9392f293654ad31bc85f5bc65cea67079bed2a4..b601d0fe82a9cd76b424f568e75224752d7c1511:/gen/ldap.gen diff --git a/gen/ldap.gen b/gen/ldap.gen index 37e6f485..e59081a8 100755 --- a/gen/ldap.gen +++ b/gen/ldap.gen @@ -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) = $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"; @@ -35,6 +39,10 @@ while(($login, $first, $middle, $last) = $sth->fetchrow_array) { $row .= "uid: $login\n"; $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"; @@ -61,6 +69,10 @@ while(($login, $first, $middle, $last) = $sth->fetchrow_array) { $givenName .= "\n"; } + if($f_type eq "AFS") { + $row .= "homeDirectory: $f_name\n"; + } + $row .= $sn; $row .= $cn; $row .= $givenName; @@ -74,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";