From 355b404f7494a8bd3067f13a908b41ae8b9fa0e2 Mon Sep 17 00:00:00 2001 From: Sumit Bose Date: Thu, 7 Jul 2016 21:06:40 +0200 Subject: memberOf: use defaultOverrideName if available --- src/ldb_modules/memberof.c | 33 ++++++++++++++++++++++----------- 1 file changed, 22 insertions(+), 11 deletions(-) diff --git a/src/ldb_modules/memberof.c b/src/ldb_modules/memberof.c index af7147ee7..7d415db3a 100644 --- a/src/ldb_modules/memberof.c +++ b/src/ldb_modules/memberof.c @@ -28,6 +28,7 @@ #define DB_MEMBEROF "memberof" #define DB_MEMBERUID "memberuid" #define DB_NAME "name" +#define DB_DEFAULT_OVERRIDE_NAME "defaultOverrideName" #define DB_USER_CLASS "user" #define DB_GROUP_CLASS "group" #define DB_CACHE_EXPIRE "dataExpireTimestamp" @@ -639,7 +640,7 @@ static int mbof_add_callback(struct ldb_request *req, static int mbof_next_add(struct mbof_add_operation *addop) { - static const char *attrs[] = { DB_OC, DB_NAME, + static const char *attrs[] = { DB_OC, DB_NAME, DB_DEFAULT_OVERRIDE_NAME, DB_MEMBER, DB_GHOST, DB_MEMBEROF, NULL }; struct ldb_context *ldb; @@ -887,9 +888,12 @@ static int mbof_add_operation(struct mbof_add_operation *addop) switch (ret) { case LDB_SUCCESS: /* it's a user object */ - name = ldb_msg_find_attr_as_string(addop->entry, DB_NAME, NULL); + name = ldb_msg_find_attr_as_string(addop->entry, DB_DEFAULT_OVERRIDE_NAME, NULL); if (!name) { - return LDB_ERR_OPERATIONS_ERROR; + name = ldb_msg_find_attr_as_string(addop->entry, DB_NAME, NULL); + if (!name) { + return LDB_ERR_OPERATIONS_ERROR; + } } for (i = 0; i < parents->num; i++) { @@ -1314,7 +1318,7 @@ static void free_delop_contents(struct mbof_del_operation *delop); static int memberof_del(struct ldb_module *module, struct ldb_request *req) { - static const char *attrs[] = { DB_OC, DB_NAME, + static const char *attrs[] = { DB_OC, DB_NAME, DB_DEFAULT_OVERRIDE_NAME, DB_MEMBER, DB_MEMBEROF, DB_GHOST, NULL }; struct ldb_context *ldb = ldb_module_get_ctx(module); @@ -1767,7 +1771,7 @@ static int mbof_del_execute_op(struct mbof_del_operation *delop) char *expression; const char *dn; char *clean_dn; - static const char *attrs[] = { DB_OC, DB_NAME, + static const char *attrs[] = { DB_OC, DB_NAME, DB_DEFAULT_OVERRIDE_NAME, DB_MEMBER, DB_MEMBEROF, NULL }; int ret; @@ -2226,9 +2230,12 @@ static int mbof_del_mod_entry(struct mbof_del_operation *delop) if (is_user && diff[0]) { /* file memberuid removal operations */ - name = ldb_msg_find_attr_as_string(delop->entry, DB_NAME, NULL); + name = ldb_msg_find_attr_as_string(delop->entry, DB_DEFAULT_OVERRIDE_NAME, NULL); if (!name) { - return LDB_ERR_OPERATIONS_ERROR; + name = ldb_msg_find_attr_as_string(delop->entry, DB_NAME, NULL); + if (!name) { + return LDB_ERR_OPERATIONS_ERROR; + } } for (i = 0; diff[i]; i++) { @@ -2462,9 +2469,13 @@ static int mbof_del_fill_muop(struct mbof_del_ctx *del_ctx, } name = talloc_strdup(del_ctx, - ldb_msg_find_attr_as_string(entry, DB_NAME, NULL)); + ldb_msg_find_attr_as_string(entry, DB_DEFAULT_OVERRIDE_NAME, NULL)); if (!name) { - return LDB_ERR_OPERATIONS_ERROR; + name = talloc_strdup(del_ctx, + ldb_msg_find_attr_as_string(entry, DB_NAME, NULL)); + if (!name) { + return LDB_ERR_OPERATIONS_ERROR; + } } for (i = 0; i < el->num_values; i++) { @@ -3927,7 +3938,7 @@ static int memberof_recompute_task(struct ldb_module *module, struct ldb_request *req) { struct ldb_context *ldb = ldb_module_get_ctx(module); - static const char *attrs[] = { DB_NAME, DB_MEMBEROF, NULL }; + static const char *attrs[] = { DB_NAME, DB_DEFAULT_OVERRIDE_NAME, DB_MEMBEROF, NULL }; static const char *filter = "(objectclass=user)"; struct mbof_rcmp_context *ctx; struct ldb_request *src_req; @@ -4034,7 +4045,7 @@ static int mbof_rcmp_search_groups(struct mbof_rcmp_context *ctx) { struct ldb_context *ldb = ldb_module_get_ctx(ctx->module); static const char *attrs[] = { DB_MEMBEROF, DB_MEMBERUID, - DB_NAME, DB_MEMBER, NULL }; + DB_NAME, DB_DEFAULT_OVERRIDE_NAME, DB_MEMBER, NULL }; static const char *filter = "(objectclass=group)"; struct ldb_request *req; int ret; -- cgit