mirror of
https://git.openldap.org/openldap/openldap.git
synced 2025-12-24 16:49:39 -05:00
ITS#7212 slapmodify support for back-ldif
This commit is contained in:
parent
1c2b5e3c0c
commit
5ee5251fa4
1 changed files with 67 additions and 4 deletions
|
|
@ -759,6 +759,7 @@ ldif_send_entry( Operation *op, SlapReply *rs, Entry *e, int scope )
|
|||
tl->entries = entries;
|
||||
}
|
||||
tl->entries[tl->ecount++] = e;
|
||||
e->e_id = tl->ecount;
|
||||
return rc;
|
||||
}
|
||||
|
||||
|
|
@ -1706,6 +1707,30 @@ ldif_back_entry_get(
|
|||
return rc;
|
||||
}
|
||||
|
||||
static int
|
||||
ldif_back_entry_release_rw (
|
||||
Operation *op,
|
||||
Entry *e,
|
||||
int rw )
|
||||
{
|
||||
ID id = e->e_id;
|
||||
|
||||
/* only tool mode assigns valid IDs */
|
||||
if ( id != 0 && id != NOID )
|
||||
{
|
||||
struct ldif_tool *tl = &((struct ldif_info *) op->o_bd->be_private)->li_tool;
|
||||
|
||||
id--;
|
||||
|
||||
assert( id < tl->ecount );
|
||||
assert( e == tl->entries[id] );
|
||||
tl->entries[id] = NULL;
|
||||
}
|
||||
|
||||
entry_free( e );
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
/* Slap tools */
|
||||
|
||||
|
|
@ -1786,6 +1811,23 @@ ldif_tool_entry_first_x( BackendDB *be, struct berval *base, int scope, Filter *
|
|||
return ldif_tool_entry_next( be );
|
||||
}
|
||||
|
||||
static ID
|
||||
ldif_tool_dn2id_get( BackendDB *be, struct berval *dn )
|
||||
{
|
||||
struct ldif_tool *tl = &((struct ldif_info *) be->be_private)->li_tool;
|
||||
|
||||
Operation op = {0};
|
||||
|
||||
op.o_bd = be;
|
||||
op.o_req_dn = *dn;
|
||||
op.o_req_ndn = *dn;
|
||||
op.ors_scope = LDAP_SCOPE_BASE;
|
||||
if ( search_tree( &op, NULL ) != LDAP_SUCCESS ) {
|
||||
return NOID;
|
||||
}
|
||||
return tl->ecount;
|
||||
}
|
||||
|
||||
static Entry *
|
||||
ldif_tool_entry_get( BackendDB *be, ID id )
|
||||
{
|
||||
|
|
@ -1795,7 +1837,6 @@ ldif_tool_entry_get( BackendDB *be, ID id )
|
|||
--id;
|
||||
if ( id < tl->ecount ) {
|
||||
e = tl->entries[id];
|
||||
tl->entries[id] = NULL;
|
||||
}
|
||||
return e;
|
||||
}
|
||||
|
|
@ -1828,6 +1869,28 @@ ldif_tool_entry_put( BackendDB *be, Entry *e, struct berval *text )
|
|||
return NOID;
|
||||
}
|
||||
|
||||
static ID
|
||||
ldif_tool_entry_modify( BackendDB *be, Entry *e, struct berval *text )
|
||||
{
|
||||
int rc;
|
||||
const char *errmsg = NULL;
|
||||
struct berval path;
|
||||
Operation op = {0};
|
||||
|
||||
op.o_bd = be;
|
||||
ndn2path( &op, &e->e_nname, &path, 0 );
|
||||
rc = ldif_write_entry( &op, e, &path, NULL, &errmsg );
|
||||
SLAP_FREE( path.bv_val );
|
||||
if ( rc == LDAP_SUCCESS )
|
||||
return 1;
|
||||
|
||||
if ( errmsg == NULL && rc != LDAP_OTHER )
|
||||
errmsg = ldap_err2string( rc );
|
||||
if ( errmsg != NULL )
|
||||
snprintf( text->bv_val, text->bv_len, "%s", errmsg );
|
||||
return NOID;
|
||||
}
|
||||
|
||||
|
||||
/* Setup */
|
||||
|
||||
|
|
@ -1912,6 +1975,7 @@ ldif_back_initialize( BackendInfo *bi )
|
|||
bi->bi_connection_destroy = 0;
|
||||
|
||||
bi->bi_entry_get_rw = ldif_back_entry_get;
|
||||
bi->bi_entry_release_rw = ldif_back_entry_release_rw;
|
||||
|
||||
#if 0 /* NOTE: uncomment to completely disable access control */
|
||||
bi->bi_access_allowed = slap_access_always_allowed;
|
||||
|
|
@ -1922,14 +1986,13 @@ ldif_back_initialize( BackendInfo *bi )
|
|||
bi->bi_tool_entry_first = backend_tool_entry_first;
|
||||
bi->bi_tool_entry_first_x = ldif_tool_entry_first_x;
|
||||
bi->bi_tool_entry_next = ldif_tool_entry_next;
|
||||
bi->bi_tool_dn2id_get = ldif_tool_dn2id_get;
|
||||
bi->bi_tool_entry_get = ldif_tool_entry_get;
|
||||
bi->bi_tool_entry_put = ldif_tool_entry_put;
|
||||
bi->bi_tool_entry_modify = ldif_tool_entry_modify;
|
||||
bi->bi_tool_entry_reindex = 0;
|
||||
bi->bi_tool_sync = 0;
|
||||
|
||||
bi->bi_tool_dn2id_get = 0;
|
||||
bi->bi_tool_entry_modify = 0;
|
||||
|
||||
bi->bi_cf_ocs = ldifocs;
|
||||
|
||||
rc = config_register_schema( ldifcfg, ldifocs );
|
||||
|
|
|
|||
Loading…
Reference in a new issue