mirror of
https://github.com/samba-team/samba.git
synced 2025-01-12 09:18:10 +03:00
ldb_tdb: Add/remove a GUID index of the DN during ltdb_index_add_all()/ltdb_index_delete()
Signed-off-by: Andrew Bartlett <abartlet@samba.org> Reviewed-by: Garming Sam <garming@catalyst.net.nz>
This commit is contained in:
parent
98e82113ed
commit
ec30439c43
@ -44,6 +44,10 @@ struct ltdb_idxptr {
|
||||
int error;
|
||||
};
|
||||
|
||||
static int ltdb_write_index_dn_guid(struct ldb_module *module,
|
||||
const struct ldb_message *msg,
|
||||
int add);
|
||||
|
||||
/* we put a @IDXVERSION attribute on index entries. This
|
||||
allows us to tell if it was written by an older version
|
||||
*/
|
||||
@ -1387,6 +1391,7 @@ static int ltdb_index_add_all(struct ldb_module *module,
|
||||
struct ldb_message_element *elements = msg->elements;
|
||||
unsigned int i;
|
||||
const char *dn_str;
|
||||
int ret;
|
||||
|
||||
if (ldb_dn_is_special(msg->dn)) {
|
||||
return LDB_SUCCESS;
|
||||
@ -1397,13 +1402,17 @@ static int ltdb_index_add_all(struct ldb_module *module,
|
||||
return LDB_ERR_OPERATIONS_ERROR;
|
||||
}
|
||||
|
||||
ret = ltdb_write_index_dn_guid(module, msg, 1);
|
||||
if (ret != LDB_SUCCESS) {
|
||||
return ret;
|
||||
}
|
||||
|
||||
if (!ltdb->cache->attribute_indexes) {
|
||||
/* no indexed fields */
|
||||
return LDB_SUCCESS;
|
||||
}
|
||||
|
||||
for (i = 0; i < msg->num_elements; i++) {
|
||||
int ret;
|
||||
if (!ltdb_is_indexed(module, ltdb, elements[i].name)) {
|
||||
continue;
|
||||
}
|
||||
@ -1495,6 +1504,25 @@ static int ltdb_index_onelevel(struct ldb_module *module,
|
||||
return ret;
|
||||
}
|
||||
|
||||
/*
|
||||
insert a one level index for a message
|
||||
*/
|
||||
static int ltdb_write_index_dn_guid(struct ldb_module *module,
|
||||
const struct ldb_message *msg,
|
||||
int add)
|
||||
{
|
||||
struct ltdb_private *ltdb = talloc_get_type(ldb_module_get_private(module),
|
||||
struct ltdb_private);
|
||||
|
||||
/* We index for DN only if using a GUID index */
|
||||
if (ltdb->cache->GUID_index_attribute == NULL) {
|
||||
return LDB_SUCCESS;
|
||||
}
|
||||
|
||||
return ltdb_modify_index_dn(module, ltdb, msg, msg->dn,
|
||||
LTDB_IDXDN, add);
|
||||
}
|
||||
|
||||
/*
|
||||
add the index entries for a new element in a record
|
||||
The caller guarantees that these element values are not yet indexed
|
||||
@ -1671,6 +1699,11 @@ int ltdb_index_delete(struct ldb_module *module, const struct ldb_message *msg)
|
||||
return ret;
|
||||
}
|
||||
|
||||
ret = ltdb_write_index_dn_guid(module, msg, 0);
|
||||
if (ret != LDB_SUCCESS) {
|
||||
return ret;
|
||||
}
|
||||
|
||||
if (!ltdb->cache->attribute_indexes) {
|
||||
/* no indexed fields */
|
||||
return LDB_SUCCESS;
|
||||
|
@ -62,6 +62,7 @@ struct ltdb_context {
|
||||
#define LTDB_IDXVERSION "@IDXVERSION"
|
||||
#define LTDB_IDXATTR "@IDXATTR"
|
||||
#define LTDB_IDXONE "@IDXONE"
|
||||
#define LTDB_IDXDN "@IDXDN"
|
||||
#define LTDB_BASEINFO "@BASEINFO"
|
||||
#define LTDB_OPTIONS "@OPTIONS"
|
||||
#define LTDB_ATTRIBUTES "@ATTRIBUTES"
|
||||
|
Loading…
Reference in New Issue
Block a user