]> andersk Git - moira.git/commitdiff
LDAP DCM for calendaring service, and Makefile.in goo to install it.
authorzacheiss <zacheiss>
Wed, 14 Apr 2004 20:47:26 +0000 (20:47 +0000)
committerzacheiss <zacheiss>
Wed, 14 Apr 2004 20:47:26 +0000 (20:47 +0000)
gen/Makefile.in
gen/ldap.gen [new file with mode: 0755]

index 97dc9c99e7edb0590415855f6b4142e80f232ee0..0f3117cb0764ebfae6214b84eaf5987bbf466e23 100644 (file)
@@ -42,12 +42,12 @@ TARGET=     acl.gen boot.gen dhcp.gen directory.gen hesiod.gen hosts.gen \
        mailhub.gen ndb.gen network.gen nfs.gen pobox.gen \
        postoffice.gen print.gen warehouse.gen winad.gen www.gen zephyr.gen
 
-SCRIPTS=access.gen access.sh acl.sh aliases.sh boot.sh ca.gen calendar.gen dhcp.sh \
-       events.gen events.sh hesiod.sh ip-billing.gen ip-billing.sh longjobs.gen \
-       longjobs.sh mailhub.sh mailman.gen mailman.sh ndb.sh nfs.sh null.sh \
-       postoffice.sh print.sh sapprint.gen sapprint.sh spwatch.gen stellar.gen \
-       stellar.sh warehouse.sh winstats.gen winstats.sh www.sh zephyr.sh \
-       install_dirs install_quotas zero_quotas
+SCRIPTS=access.gen access.sh acl.sh aliases.sh boot.sh ca.gen calendar.gen \
+       dhcp.sh events.gen events.sh hesiod.sh ip-billing.gen ip-billing.sh \
+       ldap.gen longjobs.gen longjobs.sh mailhub.sh mailman.gen mailman.sh \
+       ndb.sh nfs.sh null.sh postoffice.sh print.sh sapprint.gen sapprint.sh \
+       spwatch.gen stellar.gen stellar.sh warehouse.sh winstats.gen \
+       winstats.sh www.sh zephyr.sh install_dirs install_quotas zero_quotas
 
 .SUFFIXES: .pc .gen
 
diff --git a/gen/ldap.gen b/gen/ldap.gen
new file mode 100755 (executable)
index 0000000..37e6f48
--- /dev/null
@@ -0,0 +1,126 @@
+#!/moira/bin/perl -Tw
+
+# $Id$
+
+use DBI;
+
+# The following exit codes are defined and MUST BE CONSISTENT with the
+# error codes the library uses:
+$MR_DBMS_ERR = 47836421;
+$MR_OCONFIG = 47836460;
+
+$ENV{PATH} = "/bin:/usr/bin:/sbin:/usr/sbin";
+
+$outdir = '/moira/dcm/ldap';
+$outfile = '/moira/dcm/ldap.out';
+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->execute;
+
+open(OUT, ">$outdir/users") || exit $MR_OCONFIG;
+
+while(($login, $first, $middle, $last) = $sth->fetchrow_array) {
+    $row = "dn: uid=$login,ou=users,dc=mit,dc=edu\n";
+    $row .= "objectclass: top\n";
+    $row .= "objectclass: person\n";
+    $row .= "objectclass: organizationalperson\n";
+    $row .= "objectclass: inetorgperson\n";
+    $row .= "objectClass: krb5Principal\n";
+    $row .= "uid: $login\n";
+    $row .= "krb5PrincipalName: $login\@ATHENA.MIT.EDU\n";
+    $row .= "userPassword: {KERBEROS}$login\@ATHENA.MIT.EDU\n";
+
+    if($last) {
+       $sn = "sn: $last\n";
+    }
+    else {
+       $sn = "sn: NONE\n";
+    }
+
+    if($first) {
+       $cn = "cn: $first";
+       $givenName = "givenName: $first";
+    }
+    else {
+       $cn = "cn:";
+       $givenName = "givenName:";
+    }
+
+    if($middle) {
+       $cn .= " $middle\n";
+       $givenName .= " $middle\n";
+    }
+    else {
+       $cn .= "\n";
+       $givenName .= "\n";
+    }
+
+    $row .= $sn;
+    $row .= $cn;
+    $row .= $givenName;
+    $row .= "ou: user\n";
+    $row .= "description: user\n\n";
+    $row =~ s/\0//g;
+
+    print OUT $row;
+}
+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->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->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;
+    }
+
+    print OUT "\n";
+}
+close(OUT);
+
+system("cd $outdir && tar cf $outfile .") == 0 || exit $MR_OCONFIG;
+
+$dbh->disconnect;
+
+exit 0;
This page took 0.042849 seconds and 5 git commands to generate.