From: Howard Chu Date: Thu, 20 Mar 2008 23:34:04 +0000 (+0000) Subject: Add dn2id_get / modify support X-Git-Tag: OPENLDAP_REL_ENG_2_4_9~20^2~61 X-Git-Url: https://git.sur5r.net/?a=commitdiff_plain;h=c495cba4afc31ba41f5fc807b62d82d2fafde393;p=openldap Add dn2id_get / modify support --- diff --git a/servers/slapd/backglue.c b/servers/slapd/backglue.c index c12d4de4e1..6786f20394 100644 --- a/servers/slapd/backglue.c +++ b/servers/slapd/backglue.c @@ -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;