Skip to content

Commit

Permalink
SYSDB: make sysdb_get_user_members_recursively() static
Browse files Browse the repository at this point in the history
as it is only used in `sysdb_add_group_member_overrides()`
  • Loading branch information
alexey-tikhonov committed Feb 18, 2025
1 parent 9109bbb commit 50b6c98
Show file tree
Hide file tree
Showing 3 changed files with 75 additions and 80 deletions.
5 changes: 0 additions & 5 deletions src/db/sysdb.h
Original file line number Diff line number Diff line change
Expand Up @@ -1594,11 +1594,6 @@ errno_t sysdb_get_sids_of_members(TALLOC_CTX *mem_ctx,
const char ***_dns,
size_t *_n);

errno_t sysdb_get_user_members_recursively(TALLOC_CTX *mem_ctx,
struct sss_domain_info *dom,
struct ldb_dn *group_dn,
struct ldb_result **members);

errno_t sysdb_handle_original_uuid(const char *orig_name,
struct sysdb_attrs *src_attrs,
const char *src_name,
Expand Down
74 changes: 0 additions & 74 deletions src/db/sysdb_ops.c
Original file line number Diff line number Diff line change
Expand Up @@ -5420,80 +5420,6 @@ errno_t sysdb_get_sids_of_members(TALLOC_CTX *mem_ctx,
return ret;
}

errno_t sysdb_get_user_members_recursively(TALLOC_CTX *mem_ctx,
struct sss_domain_info *dom,
struct ldb_dn *group_dn,
struct ldb_result **members)
{
TALLOC_CTX *tmp_ctx;
int ret;
size_t count;
struct ldb_result *res;
struct ldb_dn *base_dn;
char *filter;
char *sanitized_name;
const char *attrs[] = SYSDB_PW_ATTRS;
struct ldb_message **msgs;

tmp_ctx = talloc_new(NULL);
if (tmp_ctx == NULL) {
return ENOMEM;
}

base_dn = sysdb_base_dn(dom->sysdb, tmp_ctx);
if (base_dn == NULL) {
DEBUG(SSSDBG_OP_FAILURE, "sysdb_base_dn failed.\n");
ret = ENOMEM;
goto done;
}

ret = sss_filter_sanitize(tmp_ctx, ldb_dn_get_linearized(group_dn),
&sanitized_name);
if (ret != EOK) {
DEBUG(SSSDBG_CRIT_FAILURE,
"Failed to sanitize the given name:'%s'.\n",
ldb_dn_get_linearized(group_dn));
goto done;
}

filter = talloc_asprintf(tmp_ctx, "(&("SYSDB_UC")("SYSDB_MEMBEROF"=%s))",
sanitized_name);
if (filter == NULL) {
DEBUG(SSSDBG_OP_FAILURE, "talloc_asprintf failed.\n");
ret = ENOMEM;
goto done;
}

ret = sysdb_search_entry(tmp_ctx, dom->sysdb, base_dn, LDB_SCOPE_SUBTREE,
filter, attrs, &count, &msgs);
if (ret != EOK) {
goto done;
}

res = talloc_zero(tmp_ctx, struct ldb_result);
if (res == NULL) {
DEBUG(SSSDBG_OP_FAILURE, "talloc_zero failed.\n");
ret = ENOMEM;
goto done;
}

res->count = count;
res->msgs = talloc_steal(res, msgs);

ret = EOK;

done:
if (ret == EOK) {
*members = talloc_steal(mem_ctx, res);
} else if (ret == ENOENT) {
DEBUG(SSSDBG_TRACE_FUNC, "No such entry\n");
} else {
DEBUG(SSSDBG_OP_FAILURE, "Error: %d (%s)\n", ret, strerror(ret));
}
talloc_free(tmp_ctx);
return ret;
}

errno_t sysdb_handle_original_uuid(const char *orig_name,
struct sysdb_attrs *src_attrs,
const char *src_name,
Expand Down
76 changes: 75 additions & 1 deletion src/db/sysdb_views.c
Original file line number Diff line number Diff line change
Expand Up @@ -1533,6 +1533,80 @@ errno_t sysdb_add_overrides_to_object(struct sss_domain_info *domain,
return ret;
}

static errno_t get_user_members_recursively(TALLOC_CTX *mem_ctx,
struct sss_domain_info *dom,
struct ldb_dn *group_dn,
struct ldb_result **members)
{
TALLOC_CTX *tmp_ctx;
int ret;
size_t count;
struct ldb_result *res;
struct ldb_dn *base_dn;
char *filter;
char *sanitized_name;
const char *attrs[] = SYSDB_PW_ATTRS;
struct ldb_message **msgs;

tmp_ctx = talloc_new(NULL);
if (tmp_ctx == NULL) {
return ENOMEM;
}

base_dn = sysdb_base_dn(dom->sysdb, tmp_ctx);
if (base_dn == NULL) {
DEBUG(SSSDBG_OP_FAILURE, "sysdb_base_dn failed.\n");
ret = ENOMEM;
goto done;
}

ret = sss_filter_sanitize(tmp_ctx, ldb_dn_get_linearized(group_dn),
&sanitized_name);
if (ret != EOK) {
DEBUG(SSSDBG_CRIT_FAILURE,
"Failed to sanitize the given name:'%s'.\n",
ldb_dn_get_linearized(group_dn));
goto done;
}

filter = talloc_asprintf(tmp_ctx, "(&("SYSDB_UC")("SYSDB_MEMBEROF"=%s))",
sanitized_name);
if (filter == NULL) {
DEBUG(SSSDBG_OP_FAILURE, "talloc_asprintf failed.\n");
ret = ENOMEM;
goto done;
}

ret = sysdb_search_entry(tmp_ctx, dom->sysdb, base_dn, LDB_SCOPE_SUBTREE,
filter, attrs, &count, &msgs);
if (ret != EOK) {
goto done;
}

res = talloc_zero(tmp_ctx, struct ldb_result);
if (res == NULL) {
DEBUG(SSSDBG_OP_FAILURE, "talloc_zero failed.\n");
ret = ENOMEM;
goto done;
}

res->count = count;
res->msgs = talloc_steal(res, msgs);

ret = EOK;

done:
if (ret == EOK) {
*members = talloc_steal(mem_ctx, res);
} else if (ret == ENOENT) {
DEBUG(SSSDBG_TRACE_FUNC, "No such entry\n");
} else {
DEBUG(SSSDBG_OP_FAILURE, "Error: %d (%s)\n", ret, strerror(ret));
}
talloc_free(tmp_ctx);
return ret;
}

static inline int add_domain_name(TALLOC_CTX *mem_ctx,
struct sss_domain_info *domain,
const char *orig_name,
Expand Down Expand Up @@ -1595,7 +1669,7 @@ errno_t sysdb_add_group_member_overrides(struct sss_domain_info *domain,
return ENOMEM;
}

ret = sysdb_get_user_members_recursively(tmp_ctx, domain, obj->dn,
ret = get_user_members_recursively(tmp_ctx, domain, obj->dn,
&res_members);
if (ret == ENOENT) {
ret = EOK;
Expand Down

0 comments on commit 50b6c98

Please sign in to comment.