Author: rhafer Date: Mon Sep 8 17:32:19 2008 New Revision: 50818 URL: http://svn.opensuse.org/viewcvs/yast?rev=50818&view=rev Log: agent support for delete databases Modified: trunk/ldap-server/src/agent/SlapdConfigAgent.cc Modified: trunk/ldap-server/src/agent/SlapdConfigAgent.cc URL: http://svn.opensuse.org/viewcvs/yast/trunk/ldap-server/src/agent/SlapdConfigAgent.cc?rev=50818&r1=50817&r2=50818&view=diff ============================================================================== --- trunk/ldap-server/src/agent/SlapdConfigAgent.cc (original) +++ trunk/ldap-server/src/agent/SlapdConfigAgent.cc Mon Sep 8 17:32:19 2008 @@ -306,7 +306,10 @@ OlcDatabaseList::iterator i; for ( i = databases.begin(); i != databases.end() ; i++ ) { - olc.updateEntry(**i); + if ( ! (*i)->isDeletedEntry() ) + { + olc.updateEntry(**i); + } OlcOverlayList overlays = (*i)->getOverlays(); OlcOverlayList::iterator k; for ( k = overlays.begin(); k != overlays.end(); k++ ) @@ -314,6 +317,10 @@ y2milestone("Update overlay: %s", (*k)->getDn().c_str() ); olc.updateEntry(**k); } + if ( (*i)->isDeletedEntry() ) + { + olc.updateEntry(**i); + } } } catch ( LDAPException e ) { std::string errstring = "Error while commiting changes to config database"; @@ -461,6 +468,10 @@ for (i = databases.begin(); i != databases.end(); i++ ) { YCPMap ymap; + if ( (*i)->isDeletedEntry() ) + { + continue; + } ymap.add( YCPString("suffix"), YCPString((*i)->getSuffix()) ); ymap.add( YCPString("type"), YCPString((*i)->getType()) ); ymap.add( YCPString("index"), YCPInteger((*i)->getEntryIndex()) ); @@ -1035,6 +1046,7 @@ { y2milestone("Database to write: %d", dbIndex); OlcDatabaseList::const_iterator i; + bool dbDeleted=false; for ( i = databases.begin(); i != databases.end() ; i++ ) { if ( (*i)->getEntryIndex() == dbIndex ) @@ -1042,6 +1054,19 @@ if ( path->length() == 1 ) { YCPMap dbMap= arg->asMap(); + if ( dbMap.size() == 0 ) // database delete + { + (*i)->clearChangedEntry(); + // delete the overlays' DNs as well + OlcOverlayList overlays = (*i)->getOverlays(); + OlcOverlayList::const_iterator l = overlays.begin(); + for (; l != overlays.end(); l++ ) + { + (*l)->clearChangedEntry(); + } + dbDeleted = true; + } + YCPValue val = dbMap.value( YCPString("rootdn") ); if ( ! val.isNull() && val->isString() ) { @@ -1254,6 +1279,24 @@ break; } } + if ( dbDeleted ) // renumber other dbs + { + i++; + // renumber remaining databases + for( ; i != databases.end(); i++ ) + { + y2milestone("%s needs to be renumbered", (*i)->getSuffix().c_str() ); + (*i)->setIndex( (*i)->getEntryIndex() + 1, true ); + + // update the overlays' DNs accordingly + OlcOverlayList overlays = (*i)->getOverlays(); + OlcOverlayList::const_iterator l = overlays.begin(); + for (; l != overlays.end(); l++ ) + { + (*l)->newParentDn( (*i)->getUpdatedDn() ); + } + } + } } return YCPBoolean(ret); -- To unsubscribe, e-mail: yast-commit+unsubscribe@opensuse.org For additional commands, e-mail: yast-commit+help@opensuse.org