X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;ds=sidebyside;f=servers%2Fslapd%2Fbackover.c;h=1be6cfa3e9000e8034454bd54e9ac0a83a65832b;hb=ad09b1319604bd3a321a885f84e4f27775c7cda2;hp=58ca3198fc994e35cf24641ada97c458381bdd76;hpb=bc09f6e8ad59a02cc5e63f6029538ff87bbf92a8;p=openldap diff --git a/servers/slapd/backover.c b/servers/slapd/backover.c index 58ca3198fc..1be6cfa3e9 100644 --- a/servers/slapd/backover.c +++ b/servers/slapd/backover.c @@ -2,7 +2,7 @@ /* $OpenLDAP$ */ /* This work is part of OpenLDAP Software . * - * Copyright 2003-2008 The OpenLDAP Foundation. + * Copyright 2003-2009 The OpenLDAP Foundation. * All rights reserved. * * Redistribution and use in source and binary forms, with or without @@ -103,6 +103,8 @@ over_db_config( ca.be = be; snprintf( ca.log, sizeof( ca.log ), "%s: line %d", ca.fname, ca.lineno ); + ca.op = SLAP_CONFIG_ADD; + ca.valx = -1; for (; on; on=on->on_next) { rc = SLAP_CONF_UNKNOWN; @@ -138,25 +140,22 @@ over_db_open( { slap_overinfo *oi = be->bd_info->bi_private; slap_overinst *on = oi->oi_list; - BackendInfo *bi_orig = be->bd_info; + BackendDB db = *be; int rc = 0; - be->be_flags |= SLAP_DBFLAG_OVERLAY; - be->bd_info = oi->oi_orig; - if ( be->bd_info->bi_db_open ) { - rc = be->bd_info->bi_db_open( be, cr ); + db.be_flags |= SLAP_DBFLAG_OVERLAY; + db.bd_info = oi->oi_orig; + if ( db.bd_info->bi_db_open ) { + rc = db.bd_info->bi_db_open( &db, cr ); } for (; on && rc == 0; on=on->on_next) { - be->bd_info = &on->on_bi; - if ( be->bd_info->bi_db_open ) { - rc = be->bd_info->bi_db_open( be, cr ); + db.bd_info = &on->on_bi; + if ( db.bd_info->bi_db_open ) { + rc = db.bd_info->bi_db_open( &db, cr ); } } - be->bd_info = bi_orig; - be->be_flags ^= SLAP_DBFLAG_OVERLAY; - return rc; } @@ -1111,13 +1110,14 @@ overlay_remove( BackendDB *be, slap_overinst *on ) { slap_overinfo *oi = on->on_info; slap_overinst **oidx; + BackendInfo *bi_orig; /* remove overlay from oi_list an call db_close and db_destroy * handlers */ for ( oidx = &oi->oi_list; *oidx; oidx = &(*oidx)->on_next ) { if ( *oidx == on ) { *oidx = on->on_next; - BackendInfo *bi_orig = be->bd_info; + bi_orig = be->bd_info; be->bd_info = (BackendInfo *)on; if ( on->on_bi.bi_db_close ) { on->on_bi.bi_db_close( be, NULL );