steffen: server/perl-kolab/Kolab-LDAP-Backend-slurpd slurpd.pm, 1.8, 1.9

cvs at intevation.de cvs at intevation.de
Fri Aug 13 02:34:27 CEST 2004


Author: steffen

Update of /kolabrepository/server/perl-kolab/Kolab-LDAP-Backend-slurpd
In directory doto:/tmp/cvs-serv17375/Kolab-LDAP-Backend-slurpd

Modified Files:
	slurpd.pm 
Log Message:
fix for long lasting bug that causes kolabd to loop when slapd is stopped

Index: slurpd.pm
===================================================================
RCS file: /kolabrepository/server/perl-kolab/Kolab-LDAP-Backend-slurpd/slurpd.pm,v
retrieving revision 1.8
retrieving revision 1.9
diff -u -d -r1.8 -r1.9
--- slurpd.pm	15 Jul 2004 01:10:11 -0000	1.8
+++ slurpd.pm	13 Aug 2004 00:34:25 -0000	1.9
@@ -273,9 +273,15 @@
 
             Kolab::log('SD', 'Waiting for LDAP updates');
 
-            for ($ready = 1; $ready; $ready = $select->can_read(1)) {
+            for ($ready = 1; $conn && $ready; $ready = $select->can_read(1)) {
                 Kolab::log('SD', 'Reading ASN', KOLAB_DEBUG);
-                $offset = asn_read($conn, $pdu, $offset);
+                my $newoffset = asn_read($conn, $pdu, $offset);
+	        if( !$conn->connected() or $offset == $newoffset ) {
+		  Kolab::log('SD', 'Connection closed', KOLAB_DEBUG);
+		  $conn->close;
+		  undef $conn;
+		}
+		$offset = $newoffset;
                 defined($offset) or $offset = 0;
                 sleep 1;
             }
@@ -291,14 +297,17 @@
                 undef $pdu;
 
                 SWITCH: {
-                    if (/bindRequest/) { $pdu = responseBind($request); last SWITCH; }
+                    if (/^bindRequest/) { $pdu = responseBind($request); last SWITCH; }
                     if (/addRequest/) { $pdu = responseAdd($request); $changes = 1; last SWITCH; }
                     if (/delRequest/) { $pdu = responseDel($request); $changes = 1; last SWITCH; }
                     if (/modifyRequest/) { $pdu = responseMod($request); $changes = 1; last SWITCH; }
                     if (/modDNRequest/) { $pdu = responseModDN($request); $changes = 1; last SWITCH; }
 
-                    $conn->close;
-                    undef $conn;
+                    if( $conn ) {
+		      Kolab::log('SD', 'Unknown request, connection closed', KOLAB_DEBUG);
+		      $conn->close;
+		      undef $conn;
+		    }
                 }
             }
 





More information about the commits mailing list