]> git.sur5r.net Git - openldap/blobdiff - servers/slapd/repl.c
Support subtree rename, refuse subtree delete
[openldap] / servers / slapd / repl.c
index 8ebc23ac7597bee43a012d1655ac886321538dfa..529416023c97fc1cd7afa356f144c50c9a4c807a 100644 (file)
@@ -2,7 +2,7 @@
 /* $OpenLDAP$ */
 /* This work is part of OpenLDAP Software <http://www.openldap.org/>.
  *
- * Copyright 1998-2004 The OpenLDAP Foundation.
+ * Copyright 1998-2005 The OpenLDAP Foundation.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -42,6 +42,7 @@
 int
 add_replica_info(
     Backend     *be,
+    const char  *uri, 
     const char  *host 
 )
 {
@@ -59,7 +60,8 @@ add_replica_info(
 
        be->be_replica[ i ] 
                = ch_calloc( sizeof( struct slap_replica_info ), 1 );
-       be->be_replica[ i ]->ri_host = ch_strdup( host );
+       be->be_replica[ i ]->ri_uri = uri;
+       be->be_replica[ i ]->ri_host = host;
        be->be_replica[ i ]->ri_nsuffix = NULL;
        be->be_replica[ i ]->ri_attrs = NULL;
        be->be_replica[ i + 1 ] = NULL;
@@ -134,15 +136,17 @@ replog( Operation *op )
 #endif
        int     subsets = 0;
        long now = slap_get_time();
+       char    *replogfile;
 
-       if ( op->o_bd->be_replogfile == NULL && frontendDB->be_replogfile == NULL ) {
+       replogfile = op->o_bd->be_replogfile ? op->o_bd->be_replogfile :
+               frontendDB->be_replogfile;
+       if ( !replogfile ) {
                return;
        }
 
-       ldap_pvt_thread_mutex_lock( &SLAPD_GLOBAL(replog_mutex) );
-       if ( (fp = lock_fopen( op->o_bd->be_replogfile ? op->o_bd->be_replogfile :
-           frontendDB->be_replogfile, "a", &lfp )) == NULL ) {
-               ldap_pvt_thread_mutex_unlock( &SLAPD_GLOBAL(replog_mutex) );
+       ldap_pvt_thread_mutex_lock( &replog_mutex );
+       if ( (fp = lock_fopen( replogfile, "a", &lfp )) == NULL ) {
+               ldap_pvt_thread_mutex_unlock( &replog_mutex );
                return;
        }
 
@@ -183,7 +187,7 @@ replog( Operation *op )
                /* if no replicas matched, drop the log 
                 * (should we log it anyway?) */
                lock_fclose( fp, lfp );
-               ldap_pvt_thread_mutex_unlock( &SLAPD_GLOBAL(replog_mutex) );
+               ldap_pvt_thread_mutex_unlock( &replog_mutex );
 
                return;
        }
@@ -231,7 +235,7 @@ replog( Operation *op )
        }
 
        lock_fclose( fp, lfp );
-       ldap_pvt_thread_mutex_unlock( &SLAPD_GLOBAL(replog_mutex) );
+       ldap_pvt_thread_mutex_unlock( &replog_mutex );
 }
 
 static void