mirror of
https://github.com/samba-team/samba.git
synced 2024-12-24 21:34:56 +03:00
s4-dsdb: added DSDB_FLAG_OWN_MODULE
This allows you to call dsdb_module_*() functions while including the current module in the module stack to be used Pair-Programmed-With: Andrew Bartlett <abartlet@samba.org>
This commit is contained in:
parent
e1ffcfc783
commit
ca5c3a0a02
@ -211,7 +211,12 @@ int dsdb_module_search(struct ldb_module *module,
|
||||
return ret;
|
||||
}
|
||||
|
||||
ret = ldb_next_request(module, req);
|
||||
if (dsdb_flags & DSDB_FLAG_OWN_MODULE) {
|
||||
const struct ldb_module_ops *ops = ldb_module_get_ops(module);
|
||||
ret = ops->search(module, req);
|
||||
} else {
|
||||
ret = ldb_next_request(module, req);
|
||||
}
|
||||
if (ret == LDB_SUCCESS) {
|
||||
ret = ldb_wait(req->handle, LDB_WAIT_ALL);
|
||||
}
|
||||
@ -262,6 +267,37 @@ int dsdb_module_dn_by_guid(struct ldb_module *module, TALLOC_CTX *mem_ctx,
|
||||
return LDB_SUCCESS;
|
||||
}
|
||||
|
||||
/*
|
||||
find a GUID given a DN.
|
||||
*/
|
||||
int dsdb_module_guid_by_dn(struct ldb_module *module, struct ldb_dn *dn, struct GUID *guid)
|
||||
{
|
||||
const char *attrs[] = { NULL };
|
||||
struct ldb_result *res;
|
||||
TALLOC_CTX *tmp_ctx = talloc_new(module);
|
||||
int ret;
|
||||
NTSTATUS status;
|
||||
|
||||
ret = dsdb_module_search_dn(module, tmp_ctx, &res, dn, attrs,
|
||||
DSDB_SEARCH_SHOW_DELETED|
|
||||
DSDB_SEARCH_SHOW_EXTENDED_DN);
|
||||
if (ret != LDB_SUCCESS) {
|
||||
ldb_asprintf_errstring(ldb_module_get_ctx(module), "Failed to find GUID for %s",
|
||||
ldb_dn_get_linearized(dn));
|
||||
talloc_free(tmp_ctx);
|
||||
return ret;
|
||||
}
|
||||
|
||||
status = dsdb_get_extended_dn_guid(res->msgs[0]->dn, guid, "GUID");
|
||||
if (!NT_STATUS_IS_OK(status)) {
|
||||
talloc_free(tmp_ctx);
|
||||
return LDB_ERR_OPERATIONS_ERROR;
|
||||
}
|
||||
|
||||
talloc_free(tmp_ctx);
|
||||
return LDB_SUCCESS;
|
||||
}
|
||||
|
||||
/*
|
||||
a ldb_modify request operating on modules below the
|
||||
current module
|
||||
@ -293,7 +329,12 @@ int dsdb_module_modify(struct ldb_module *module,
|
||||
}
|
||||
|
||||
/* Run the new request */
|
||||
ret = ldb_next_request(module, mod_req);
|
||||
if (dsdb_flags & DSDB_FLAG_OWN_MODULE) {
|
||||
const struct ldb_module_ops *ops = ldb_module_get_ops(module);
|
||||
ret = ops->modify(module, mod_req);
|
||||
} else {
|
||||
ret = ldb_next_request(module, mod_req);
|
||||
}
|
||||
if (ret == LDB_SUCCESS) {
|
||||
ret = ldb_wait(mod_req->handle, LDB_WAIT_ALL);
|
||||
}
|
||||
@ -336,7 +377,12 @@ int dsdb_module_rename(struct ldb_module *module,
|
||||
}
|
||||
|
||||
/* Run the new request */
|
||||
ret = ldb_next_request(module, req);
|
||||
if (dsdb_flags & DSDB_FLAG_OWN_MODULE) {
|
||||
const struct ldb_module_ops *ops = ldb_module_get_ops(module);
|
||||
ret = ops->rename(module, req);
|
||||
} else {
|
||||
ret = ldb_next_request(module, req);
|
||||
}
|
||||
if (ret == LDB_SUCCESS) {
|
||||
ret = ldb_wait(req->handle, LDB_WAIT_ALL);
|
||||
}
|
||||
|
@ -31,3 +31,4 @@ struct dsdb_attribute;
|
||||
#define DSDB_SEARCH_REVEAL_INTERNALS 0x0008
|
||||
#define DSDB_SEARCH_SHOW_EXTENDED_DN 0x0010
|
||||
#define DSDB_MODIFY_RELAX 0x0020
|
||||
#define DSDB_FLAG_OWN_MODULE 0x0040
|
||||
|
Loading…
Reference in New Issue
Block a user