[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