/* repl.c - log modifications for replication purposes */
/* $OpenLDAP$ */
/*
- * Copyright 1998-2000 The OpenLDAP Foundation, All Rights Reserved.
+ * Copyright 1998-2002 The OpenLDAP Foundation, All Rights Reserved.
* COPYING RESTRICTIONS APPLY, see COPYRIGHT file
*/
const char *suffix
)
{
- char *nsuffix = ch_strdup( suffix );
- int rc = 0;
-
- if ( dn_normalize( nsuffix ) != NULL ) {
- if ( select_backend( nsuffix, 0 ) == be ) {
- charray_add( &be->be_replica[nr]->ri_nsuffix, nsuffix );
- } else {
- rc = 1;
- }
- } else {
- rc = 2;
+ struct berval dn, *ndn = NULL;
+ int rc;
+
+ dn.bv_val = (char *) suffix;
+ dn.bv_len = strlen( dn.bv_val );
+
+ rc = dnNormalize( NULL, &dn, &ndn );
+ if( rc != LDAP_SUCCESS ) {
+ return 2;
}
- free( nsuffix );
- return( rc );
+ if ( select_backend( ndn, 0, 0 ) != be ) {
+ ber_bvfree( ndn );
+ return 1;
+ }
+
+ ber_bvecadd( &be->be_replica[nr]->ri_nsuffix, ndn );
+ return 0;
}
void
replog(
Backend *be,
Operation *op,
- char *dn,
+ struct berval *dn,
+ struct berval *ndn,
void *change
)
{
Modifications *ml;
Entry *e;
- struct replog_moddn *moddn;
+ struct slap_replog_moddn *moddn;
char *tmp;
FILE *fp, *lfp;
int len, i;
return;
}
- tmp = ch_strdup( dn );
- if ( dn_normalize( tmp ) == NULL ) {
- /* something has gone really bad */
- ch_free( tmp );
-
- lock_fclose( fp, lfp );
- ldap_pvt_thread_mutex_unlock( &replog_mutex );
- return;
- }
-
- for ( i = 0; be->be_replica != NULL && be->be_replica[i] != NULL;
- i++ ) {
+ for ( i = 0; be->be_replica != NULL && be->be_replica[i] != NULL; i++ ) {
/* check if dn's suffix matches legal suffixes, if any */
if ( be->be_replica[i]->ri_nsuffix != NULL ) {
int j;
for ( j = 0; be->be_replica[i]->ri_nsuffix[j]; j++ ) {
- if ( dn_issuffix( tmp, be->be_replica[i]->ri_nsuffix[j] ) ) {
+ if ( dnIsSuffix( ndn, be->be_replica[i]->ri_nsuffix[j] ) ) {
break;
}
}
#endif
}
- ch_free( tmp );
#ifdef NO_LOG_WHEN_NO_REPLICAS
if ( count == 0 ) {
/* if no replicas matched, drop the log
#endif
fprintf( fp, "time: %ld\n", (long) slap_get_time() );
- fprintf( fp, "dn: %s\n", dn );
+ fprintf( fp, "dn: %s\n", dn->bv_val );
switch ( op->o_tag ) {
case LDAP_REQ_EXTENDED:
ml = change;
for ( ; ml != NULL; ml = ml->sml_next ) {
char *type;
+ struct berval *bv;
type = ml->sml_desc->ad_cname.bv_val;
switch ( ml->sml_op ) {
case LDAP_MOD_ADD:
break;
}
- for ( i = 0; ml->sml_bvalues != NULL &&
- ml->sml_bvalues[i] != NULL; i++ ) {
+ for ( bv = ml->sml_bvalues; bv && bv->bv_val; bv++ )
+ {
char *buf, *bufp;
- len = strlen( type );
+ len = ml->sml_desc->ad_cname.bv_len;
len = LDIF_SIZE_NEEDED( len,
- ml->sml_bvalues[i]->bv_len ) + 1;
+ bv->bv_len ) + 1;
buf = (char *) ch_malloc( len );
bufp = buf;
- ldif_sput( &bufp, LDIF_PUT_VALUE,
- type,
- ml->sml_bvalues[i]->bv_val,
- ml->sml_bvalues[i]->bv_len );
+ ldif_sput( &bufp, LDIF_PUT_VALUE, type,
+ bv->bv_val, bv->bv_len );
*bufp = '\0';
fputs( buf, fp );
case LDAP_REQ_MODRDN:
moddn = change;
fprintf( fp, "changetype: modrdn\n" );
- fprintf( fp, "newrdn: %s\n", moddn->newrdn );
+ fprintf( fp, "newrdn: %s\n", moddn->newrdn->bv_val );
fprintf( fp, "deleteoldrdn: %d\n", moddn->deloldrdn ? 1 : 0 );
if( moddn->newsup != NULL ) {
- fprintf( fp, "newsuperior: %s\n", moddn->newsup );
+ fprintf( fp, "newsuperior: %s\n", moddn->newsup->bv_val );
}
}
fprintf( fp, "\n" );