X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;f=servers%2Fslapd%2Frepl.c;h=443fe81d932f6565172d24fcdadc6970ff4cd245;hb=ae63be3894c799771d0ccabec1e376c7478cd263;hp=ecea75af7a0f5619ed5fc0ac1bda1be8b67fbf05;hpb=17fe0f59f8a33fdddfac49dada8c42c2ed3819f6;p=openldap diff --git a/servers/slapd/repl.c b/servers/slapd/repl.c index ecea75af7a..443fe81d93 100644 --- a/servers/slapd/repl.c +++ b/servers/slapd/repl.c @@ -1,4 +1,9 @@ /* repl.c - log modifications for replication purposes */ +/* $OpenLDAP$ */ +/* + * Copyright 1998-2000 The OpenLDAP Foundation, All Rights Reserved. + * COPYING RESTRICTIONS APPLY, see COPYRIGHT file + */ #include "portable.h" @@ -8,7 +13,9 @@ #include #include +#ifdef HAVE_SYS_FILE_H #include +#endif #include "slap.h" @@ -16,16 +23,15 @@ void replog( Backend *be, - int optype, + Operation *op, char *dn, - void *change, - int flag + void *change ) { - LDAPMod *mods; + Modifications *ml; Entry *e; - char *newrdn, *tmp; - int deleteoldrdn; + struct replog_moddn *moddn; + char *tmp; FILE *fp, *lfp; int len, i; @@ -33,10 +39,10 @@ replog( return; } - pthread_mutex_lock( &replog_mutex ); + ldap_pvt_thread_mutex_lock( &replog_mutex ); if ( (fp = lock_fopen( be->be_replogfile ? be->be_replogfile : replogfile, "a", &lfp )) == NULL ) { - pthread_mutex_unlock( &replog_mutex ); + ldap_pvt_thread_mutex_unlock( &replog_mutex ); return; } @@ -44,41 +50,44 @@ replog( i++ ) { fprintf( fp, "replica: %s\n", be->be_replica[i] ); } - fprintf( fp, "time: %ld\n", (long) currenttime ); + fprintf( fp, "time: %ld\n", (long) slap_get_time() ); fprintf( fp, "dn: %s\n", dn ); - switch ( optype ) { + switch ( op->o_tag ) { case LDAP_REQ_MODIFY: fprintf( fp, "changetype: modify\n" ); - mods = change; - for ( ; mods != NULL; mods = mods->mod_next ) { - switch ( mods->mod_op & ~LDAP_MOD_BVALUES ) { + ml = change; + for ( ; ml != NULL; ml = ml->sml_next ) { + char *type; + type = ml->sml_desc->ad_cname->bv_val; + switch ( ml->sml_op ) { case LDAP_MOD_ADD: - fprintf( fp, "add: %s\n", mods->mod_type ); + fprintf( fp, "add: %s\n", type ); break; case LDAP_MOD_DELETE: - fprintf( fp, "delete: %s\n", mods->mod_type ); + fprintf( fp, "delete: %s\n", type ); break; case LDAP_MOD_REPLACE: - fprintf( fp, "replace: %s\n", mods->mod_type ); + fprintf( fp, "replace: %s\n", type ); break; } - for ( i = 0; mods->mod_bvalues != NULL && - mods->mod_bvalues[i] != NULL; i++ ) { + for ( i = 0; ml->sml_bvalues != NULL && + ml->sml_bvalues[i] != NULL; i++ ) { char *buf, *bufp; - len = strlen( mods->mod_type ); + len = strlen( type ); len = LDIF_SIZE_NEEDED( len, - mods->mod_bvalues[i]->bv_len ) + 1; + ml->sml_bvalues[i]->bv_len ) + 1; buf = (char *) ch_malloc( len ); bufp = buf; - put_type_and_value( &bufp, mods->mod_type, - mods->mod_bvalues[i]->bv_val, - mods->mod_bvalues[i]->bv_len ); + ldif_sput( &bufp, LDIF_PUT_VALUE, + type, + ml->sml_bvalues[i]->bv_val, + ml->sml_bvalues[i]->bv_len ); *bufp = '\0'; fputs( buf, fp ); @@ -92,15 +101,15 @@ replog( case LDAP_REQ_ADD: e = change; fprintf( fp, "changetype: add\n" ); - pthread_mutex_lock( &entry2str_mutex ); - tmp = entry2str( e, &len, 0 ); + ldap_pvt_thread_mutex_lock( &entry2str_mutex ); + tmp = entry2str( e, &len ); while ( (tmp = strchr( tmp, '\n' )) != NULL ) { tmp++; - if ( ! isspace( *tmp ) ) + if ( ! isspace( (unsigned char) *tmp ) ) break; } fprintf( fp, "%s", tmp ); - pthread_mutex_unlock( &entry2str_mutex ); + ldap_pvt_thread_mutex_unlock( &entry2str_mutex ); break; case LDAP_REQ_DELETE: @@ -108,13 +117,16 @@ replog( break; case LDAP_REQ_MODRDN: - newrdn = change; + moddn = change; fprintf( fp, "changetype: modrdn\n" ); - fprintf( fp, "newrdn: %s\n", newrdn ); - fprintf( fp, "deleteoldrdn: %d\n", flag ? 1 : 0 ); + fprintf( fp, "newrdn: %s\n", moddn->newrdn ); + fprintf( fp, "deleteoldrdn: %d\n", moddn->deloldrdn ? 1 : 0 ); + if( moddn->newsup != NULL ) { + fprintf( fp, "newsuperior: %s\n", moddn->newsup ); + } } fprintf( fp, "\n" ); lock_fclose( fp, lfp ); - pthread_mutex_unlock( &replog_mutex ); + ldap_pvt_thread_mutex_unlock( &replog_mutex ); }