[Date Prev][Date Next] [Chronological] [Thread] [Top]

slurpd patch for timestamp issue on openldap-1.2.x (ITS#1323)



Hello,

I did a simple backport of the 2.0.x CVS update to openldap 1.2.x
(1.2.12), and it seems to work fine. Patch is included if some of you
are intereted.

Gaël.

-- 
Gaël Roualland -+- gael.roualland@oleane.net
diff -ru openldap-1.2.12/servers/slurpd/re.c openldap-1.2.12-patched/servers/slurpd/re.c
--- openldap-1.2.12/servers/slurpd/re.c	Fri Jan 29 06:11:51 1999
+++ openldap-1.2.12-patched/servers/slurpd/re.c	Mon Sep 10 12:02:56 2001
@@ -83,7 +83,6 @@
     /* This seems to have problems under SunOS lwp */
     ldap_pvt_thread_mutex_destroy( &re->re_mutex );
 #endif /* HAVE_LWP */
-    ch_free( re->re_timestamp );
     if (( rh = re->re_replicas ) != NULL ) {
 	for ( i = 0; rh[ i ].rh_hostname != NULL; i++ ) {
 	    free( rh[ i ].rh_hostname );
@@ -175,7 +174,7 @@
 		/* there was a sequence number */
 		*p++ = '\0';
 	    }
-	    re->re_timestamp = strdup( value );
+	    re->re_timestamp = atol( value );
 	    if ( p != NULL && isdigit( (unsigned char) *p )) {
 		re->re_seq = atoi( p );
 	    }
@@ -439,7 +438,7 @@
     }
     fprintf( fp, "Re_dump: ******\n" );
     fprintf( fp, "re_refcnt: %d\n", re->re_refcnt );
-    fprintf( fp, "re_timestamp: %s\n", re->re_timestamp );
+    fprintf( fp, "re_timestamp: %ld\n", re->re_timestamp );
     fprintf( fp, "re_seq: %d\n", re->re_seq );
     for ( i = 0; re->re_replicas && re->re_replicas[ i ].rh_hostname != NULL;
 		i++ ) {
@@ -525,7 +524,7 @@
 	    }
 	}
     }
-    if ( fprintf( fp, "time: %s.%d\n", re->re_timestamp, re->re_seq ) < 0 ) {
+    if ( fprintf( fp, "time: %ld.%d\n", re->re_timestamp, re->re_seq ) < 0 ) {
 	rc = -1;
 	goto bad;
     }
@@ -688,7 +687,7 @@
 
     /* Initialize private data */
    (*re)->re_refcnt = sglob->num_replicas;
-   (*re)->re_timestamp = NULL;
+   (*re)->re_timestamp = (time_t) 0L;
    (*re)->re_replicas = NULL;
    (*re)->re_dn = NULL;
    (*re)->re_changetype = 0;
diff -ru openldap-1.2.12/servers/slurpd/ri.c openldap-1.2.12-patched/servers/slurpd/ri.c
--- openldap-1.2.12/servers/slurpd/ri.c	Fri Jan 29 06:11:51 1999
+++ openldap-1.2.12-patched/servers/slurpd/ri.c	Mon Sep 10 12:02:28 2001
@@ -226,12 +226,12 @@
     Re	*re
 )
 {
-    int	x;
+    long x;
     int	ret;
 
     /* Lock the St struct to avoid a race */
     sglob->st->st_lock( sglob->st );
-    x = strcmp( re->re_timestamp, ri->ri_stel->last );
+    x = re->re_timestamp - ri->ri_stel->last;
     if ( x > 0 ) {
 	/* re timestamp is newer */
 	ret = 1;
diff -ru openldap-1.2.12/servers/slurpd/rq.c openldap-1.2.12-patched/servers/slurpd/rq.c
--- openldap-1.2.12/servers/slurpd/rq.c	Wed Apr 26 01:05:44 2000
+++ openldap-1.2.12-patched/servers/slurpd/rq.c	Mon Sep 10 12:03:22 2001
@@ -180,7 +180,7 @@
 
     /* set the sequence number */
     re->re_seq = 0;
-    if ( !wasempty && !strcmp(rq->rq_tail->re_timestamp, re->re_timestamp )) {
+    if ( !wasempty && ( rq->rq_tail->re_timestamp == re->re_timestamp )) {
 	/*
 	 * Our new re has the same timestamp as the tail's timestamp.
 	 * Increment the seq number in the tail and use it as our seq number.
diff -ru openldap-1.2.12/servers/slurpd/slurp.h openldap-1.2.12-patched/servers/slurpd/slurp.h
--- openldap-1.2.12/servers/slurpd/slurp.h	Fri Jan 29 06:11:51 1999
+++ openldap-1.2.12-patched/servers/slurpd/slurp.h	Mon Sep 10 11:57:12 2001
@@ -217,7 +217,7 @@
     ldap_pvt_thread_mutex_t
 		re_mutex;		/* mutex for this Re */
     int		re_refcnt;		/* ref count, 0 = done */
-    char	*re_timestamp;		/* timestamp of this re */
+    time_t	re_timestamp;		/* timestamp of this re */
     int		re_seq;			/* sequence number */
     Rh    	*re_replicas;		/* array of replica info */
     char	*re_dn;			/* dn of entry being modified */
@@ -288,7 +288,7 @@
 typedef struct stel {
     char	*hostname;		/* host name of replica */
     int		port;			/* port number of replica */
-    char	last[ 64 ];		/* timestamp of last successful repl */
+    time_t      last;			/* timestamp of last successful repl */
     int		seq;			/* Sequence number of last repl */
 } Stel;
 
diff -ru openldap-1.2.12/servers/slurpd/st.c openldap-1.2.12-patched/servers/slurpd/st.c
--- openldap-1.2.12/servers/slurpd/st.c	Fri Jan 29 06:11:51 1999
+++ openldap-1.2.12-patched/servers/slurpd/st.c	Mon Sep 10 12:04:57 2001
@@ -61,7 +61,7 @@
 
     st->st_data[ ind ]->hostname = strdup( ri->ri_hostname );
     st->st_data[ ind ]->port = ri->ri_port;
-    memset( st->st_data[ ind ]->last, 0, sizeof( st->st_data[ ind ]->last )); 
+    st->st_data[ ind ]->last = (time_t) 0L;
     st->st_data[ ind ]->seq = 0;
 
     ldap_pvt_thread_mutex_unlock( &(st->st_mutex ));
@@ -108,8 +108,8 @@
     fseek( st->st_fp, 0L, 0 );
     for ( i = 0; i < st->st_nreplicas; i++ ) {
 	stel = st->st_data[ i ];
-	fprintf( st->st_fp, "%s:%d:%s:%d\n", stel->hostname, stel->port,
-		stel->last, stel->seq );
+	fprintf( st->st_fp, "%s:%d:%ld:%d\n", stel->hostname, stel->port,
+		 (long) stel->last, stel->seq );
     }
     fflush( st->st_fp );
 
@@ -136,7 +136,7 @@
     }
 
     ldap_pvt_thread_mutex_lock( &(st->st_mutex ));
-    strcpy( stel->last, re->re_timestamp );
+    stel->last = re->re_timestamp;
     stel->seq = re->re_seq;
     ldap_pvt_thread_mutex_unlock( &(st->st_mutex ));
     return 0;
@@ -214,7 +214,7 @@
 	    if ( !strcmp( hostname, sglob->st->st_data[ i ]->hostname ) &&
 		    atoi( port ) == sglob->st->st_data[ i ]->port ) {
 		found = 1;
-		strcpy( sglob->st->st_data[ i ]->last, timestamp );
+		sglob->st->st_data[ i ]->last = atol( timestamp );
 		sglob->st->st_data[ i ]->seq = atoi( seq );
 		break;
 	    }
Only in openldap-1.2.12-patched/servers: slurpd.old