Add dn2id_get / modify support

This commit is contained in:
Howard Chu 2008-03-20 23:34:04 +00:00
parent 133ecac740
commit c495cba4af

View File

@ -792,6 +792,49 @@ glue_tool_entry_next (
return rc;
}
static ID
glue_tool_dn2id_get (
BackendDB *b0,
struct berval *dn
)
{
BackendDB *be, b2;
int rc = -1;
b2 = *b0;
b2.bd_info = (BackendInfo *)glue_tool_inst( b0->bd_info );
be = glue_back_select (&b2, dn);
if ( be == &b2 ) be = &toolDB;
if (!be->be_dn2id_get)
return NOID;
if (!glueBack) {
if ( be->be_entry_open ) {
rc = be->be_entry_open (be, glueMode);
}
if (rc != 0) {
return NOID;
}
} else if (be != glueBack) {
/* If this entry belongs in a different branch than the
* previous one, close the current database and open the
* new one.
*/
if ( glueBack->be_entry_close ) {
glueBack->be_entry_close (glueBack);
}
if ( be->be_entry_open ) {
rc = be->be_entry_open (be, glueMode);
}
if (rc != 0) {
return NOID;
}
}
glueBack = be;
return be->be_dn2id_get (be, dn);
}
static Entry *
glue_tool_entry_get (
BackendDB *b0,
@ -848,6 +891,19 @@ glue_tool_entry_put (
return be->be_entry_put (be, e, text);
}
static ID
glue_tool_entry_modify (
BackendDB *b0,
Entry *e,
struct berval *text
)
{
if (!glueBack || !glueBack->be_entry_modify)
return NOID;
return glueBack->be_entry_modify (glueBack, e, text);
}
static int
glue_tool_entry_reindex (
BackendDB *b0,
@ -921,17 +977,17 @@ glue_db_init(
oi->oi_bi.bi_tool_entry_next = glue_tool_entry_next;
if ( bi->bi_tool_entry_get )
oi->oi_bi.bi_tool_entry_get = glue_tool_entry_get;
if ( bi->bi_tool_dn2id_get )
oi->oi_bi.bi_tool_dn2id_get = glue_tool_dn2id_get;
if ( bi->bi_tool_entry_put )
oi->oi_bi.bi_tool_entry_put = glue_tool_entry_put;
if ( bi->bi_tool_entry_reindex )
oi->oi_bi.bi_tool_entry_reindex = glue_tool_entry_reindex;
if ( bi->bi_tool_entry_modify )
oi->oi_bi.bi_tool_entry_modify = glue_tool_entry_modify;
if ( bi->bi_tool_sync )
oi->oi_bi.bi_tool_sync = glue_tool_sync;
/*FIXME : need to add support */
oi->oi_bi.bi_tool_dn2id_get = 0;
oi->oi_bi.bi_tool_entry_modify = 0;
SLAP_DBFLAGS( be ) |= SLAP_DBFLAG_GLUE_INSTANCE;
return 0;