[SSSD] [sssd PR#301][synchronized] Introduce sysdb_search_by_orig_dn()
URL: https://github.com/SSSD/sssd/pull/301 Author: fidencio Title: #301: Introduce sysdb_search_by_orig_dn() Action: synchronized To pull the PR as Git branch: git remote add ghsssd https://github.com/SSSD/sssd git fetch ghsssd pull/301/head:pr301 git checkout pr301 From cdded9660da5d9ac5435ef6c024a7570c60d7fe2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fabiano=20Fid=C3=AAncio?=Date: Fri, 2 Jun 2017 13:26:49 +0200 Subject: [PATCH 1/6] SYSDB: Add sysdb_search_by_orig_dn() MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Three new methods have been added to sysdb's API in order to perform search by the orig dn (which is quite common in SSSD's code base). A common/base method called sysdb_search_by_orig_dn() is the most important one and then a few other helpers for searching users and groups groups directly. Signed-off-by: Fabiano FidĂȘncio --- src/db/sysdb.h | 27 -- src/db/sysdb_ops.c | 66 ++ 2 files changed, 86 insertions(+), 7 deletions(-) diff --git a/src/db/sysdb.h b/src/db/sysdb.h index f4cad577b..411ee9aed 100644 --- a/src/db/sysdb.h +++ b/src/db/sysdb.h @@ -342,6 +342,12 @@ struct certmap_info { const char **domains; }; +enum sysdb_member_type { +SYSDB_MEMBER_USER, +SYSDB_MEMBER_GROUP, +SYSDB_MEMBER_NETGROUP, +SYSDB_MEMBER_SERVICE, +}; /* These attributes are stored in the timestamp cache */ extern const char *sysdb_ts_cache_attrs[]; @@ -574,6 +580,20 @@ errno_t sysdb_apply_default_override(struct sss_domain_info *domain, struct sysdb_attrs *override_attrs, struct ldb_dn *obj_dn); +errno_t sysdb_search_by_orig_dn(TALLOC_CTX *mem_ctx, +struct sss_domain_info *domain, +enum sysdb_member_type type, +const char *member_dn, +const char **attrs, +size_t *msgs_counts, +struct ldb_message ***msgs); + +#define sysdb_search_users_by_orig_dn(mem_ctx, domain, member_dn, attrs, msgs_counts, msgs) \ +sysdb_search_by_orig_dn(mem_ctx, domain, SYSDB_MEMBER_USER, member_dn, attrs, msgs_counts, msgs); + +#define sysdb_search_groups_by_orig_dn(mem_ctx, domain, member_dn, attrs, msgs_counts, msgs) \ +sysdb_search_by_orig_dn(mem_ctx, domain, SYSDB_MEMBER_GROUP, member_dn, attrs, msgs_counts, msgs); + errno_t sysdb_search_user_override_attrs_by_name(TALLOC_CTX *mem_ctx, struct sss_domain_info *domain, const char *name, @@ -1040,13 +1060,6 @@ int sysdb_store_group(struct sss_domain_info *domain, uint64_t cache_timeout, time_t now); -enum sysdb_member_type { -SYSDB_MEMBER_USER, -SYSDB_MEMBER_GROUP, -SYSDB_MEMBER_NETGROUP, -SYSDB_MEMBER_SERVICE, -}; - int sysdb_add_group_member(struct sss_domain_info *domain, const char *group, const char *member, diff --git a/src/db/sysdb_ops.c b/src/db/sysdb_ops.c index 7ca6575ce..4cfef6823 100644 --- a/src/db/sysdb_ops.c +++ b/src/db/sysdb_ops.c @@ -3236,6 +3236,72 @@ int sysdb_search_custom_by_name(TALLOC_CTX *mem_ctx, return ret; } +static int sysdb_cache_search_users(TALLOC_CTX *mem_ctx, +struct sss_domain_info *domain, +struct ldb_context *ldb, +const char *sub_filter, +const char **attrs, +size_t *msgs_count, +struct ldb_message ***msgs); + +static int sysdb_cache_search_groups(TALLOC_CTX *mem_ctx, + struct sss_domain_info *domain, + struct ldb_context *ldb, + const char *sub_filter, + const char **attrs, + size_t *msgs_count, + struct ldb_message ***msgs); + +errno_t sysdb_search_by_orig_dn(TALLOC_CTX *mem_ctx, +struct sss_domain_info *domain, +enum sysdb_member_type type, +const char *member_dn, +const char **attrs, +size_t *msgs_count, +struct ldb_message ***msgs) +{ +TALLOC_CTX *tmp_ctx; +char *filter; +char *sanitized_dn = NULL; +errno_t ret; + +tmp_ctx = talloc_new(NULL); +if (tmp_ctx == NULL) { +return ENOMEM; +} + +ret =
[SSSD] [sssd PR#301][synchronized] Introduce sysdb_search_by_orig_dn()
URL: https://github.com/SSSD/sssd/pull/301 Author: fidencio Title: #301: Introduce sysdb_search_by_orig_dn() Action: synchronized To pull the PR as Git branch: git remote add ghsssd https://github.com/SSSD/sssd git fetch ghsssd pull/301/head:pr301 git checkout pr301 From 188f45d91bd65c96a49c78a258104f1bd90d9af5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fabiano=20Fid=C3=AAncio?=Date: Fri, 2 Jun 2017 13:26:49 +0200 Subject: [PATCH 1/6] SYSDB: Add sysdb_search_by_orig_dn() MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Three new methods have been added to sysdb's API in order to perform search by the orig dn (which is quite common in SSSD's code base). A common/base method called sysdb_search_by_orig_dn() is the most important one and then a few other helpers for searching users and groups groups directly. Signed-off-by: Fabiano FidĂȘncio --- src/db/sysdb.h | 27 +--- src/db/sysdb_ops.c | 60 ++ 2 files changed, 80 insertions(+), 7 deletions(-) diff --git a/src/db/sysdb.h b/src/db/sysdb.h index f4cad577b..411ee9aed 100644 --- a/src/db/sysdb.h +++ b/src/db/sysdb.h @@ -342,6 +342,12 @@ struct certmap_info { const char **domains; }; +enum sysdb_member_type { +SYSDB_MEMBER_USER, +SYSDB_MEMBER_GROUP, +SYSDB_MEMBER_NETGROUP, +SYSDB_MEMBER_SERVICE, +}; /* These attributes are stored in the timestamp cache */ extern const char *sysdb_ts_cache_attrs[]; @@ -574,6 +580,20 @@ errno_t sysdb_apply_default_override(struct sss_domain_info *domain, struct sysdb_attrs *override_attrs, struct ldb_dn *obj_dn); +errno_t sysdb_search_by_orig_dn(TALLOC_CTX *mem_ctx, +struct sss_domain_info *domain, +enum sysdb_member_type type, +const char *member_dn, +const char **attrs, +size_t *msgs_counts, +struct ldb_message ***msgs); + +#define sysdb_search_users_by_orig_dn(mem_ctx, domain, member_dn, attrs, msgs_counts, msgs) \ +sysdb_search_by_orig_dn(mem_ctx, domain, SYSDB_MEMBER_USER, member_dn, attrs, msgs_counts, msgs); + +#define sysdb_search_groups_by_orig_dn(mem_ctx, domain, member_dn, attrs, msgs_counts, msgs) \ +sysdb_search_by_orig_dn(mem_ctx, domain, SYSDB_MEMBER_GROUP, member_dn, attrs, msgs_counts, msgs); + errno_t sysdb_search_user_override_attrs_by_name(TALLOC_CTX *mem_ctx, struct sss_domain_info *domain, const char *name, @@ -1040,13 +1060,6 @@ int sysdb_store_group(struct sss_domain_info *domain, uint64_t cache_timeout, time_t now); -enum sysdb_member_type { -SYSDB_MEMBER_USER, -SYSDB_MEMBER_GROUP, -SYSDB_MEMBER_NETGROUP, -SYSDB_MEMBER_SERVICE, -}; - int sysdb_add_group_member(struct sss_domain_info *domain, const char *group, const char *member, diff --git a/src/db/sysdb_ops.c b/src/db/sysdb_ops.c index 7ca6575ce..cda27f6f3 100644 --- a/src/db/sysdb_ops.c +++ b/src/db/sysdb_ops.c @@ -3236,6 +3236,66 @@ int sysdb_search_custom_by_name(TALLOC_CTX *mem_ctx, return ret; } +static int sysdb_cache_search_users(TALLOC_CTX *mem_ctx, +struct sss_domain_info *domain, +struct ldb_context *ldb, +const char *sub_filter, +const char **attrs, +size_t *msgs_count, +struct ldb_message ***msgs); + +static int sysdb_cache_search_groups(TALLOC_CTX *mem_ctx, + struct sss_domain_info *domain, + struct ldb_context *ldb, + const char *sub_filter, + const char **attrs, + size_t *msgs_count, + struct ldb_message ***msgs); + +errno_t sysdb_search_by_orig_dn(TALLOC_CTX *mem_ctx, +struct sss_domain_info *domain, +enum sysdb_member_type type, +const char *member_dn, +const char **attrs, +size_t *msgs_count, +struct ldb_message ***msgs) +{ +TALLOC_CTX *tmp_ctx; +char *filter; +errno_t ret; + +tmp_ctx = talloc_new(NULL); +if (tmp_ctx == NULL) { +return ENOMEM; +} + +filter = talloc_asprintf(tmp_ctx, "(%s=%s)",
[SSSD] [sssd PR#301][synchronized] Introduce sysdb_search_by_orig_dn()
URL: https://github.com/SSSD/sssd/pull/301 Author: fidencio Title: #301: Introduce sysdb_search_by_orig_dn() Action: synchronized To pull the PR as Git branch: git remote add ghsssd https://github.com/SSSD/sssd git fetch ghsssd pull/301/head:pr301 git checkout pr301 From 87fd7441f06d61f3c2b2a269955646fd4752c25a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fabiano=20Fid=C3=AAncio?=Date: Fri, 2 Jun 2017 13:26:49 +0200 Subject: [PATCH 1/5] SYSDB: Add sysdb_search_by_orig_dn() MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Three new methods have been added to sysdb's API in order to perform search by the orig dn (which is quite common in SSSD's code base). A common/base method called sysdb_search_by_orig_dn() is the most important one and then a few other helpers for searching users and groups groups directly. Signed-off-by: Fabiano FidĂȘncio --- src/db/sysdb.h | 19 + src/db/sysdb_ops.c | 61 ++ 2 files changed, 80 insertions(+) diff --git a/src/db/sysdb.h b/src/db/sysdb.h index b045684db..4bd9fe6b4 100644 --- a/src/db/sysdb.h +++ b/src/db/sysdb.h @@ -572,6 +572,25 @@ errno_t sysdb_apply_default_override(struct sss_domain_info *domain, struct sysdb_attrs *override_attrs, struct ldb_dn *obj_dn); +enum search_by_orig_dn_type { +SYSDB_SEARCH_USER = 0, +SYSDB_SEARCH_GROUP, +}; + +errno_t sysdb_search_by_orig_dn(TALLOC_CTX *mem_ctx, +struct sss_domain_info *domain, +enum search_by_orig_dn_type type, +const char *member_dn, +const char **attrs, +size_t *msgs_counts, +struct ldb_message ***msgs); + +#define sysdb_search_users_by_orig_dn(mem_ctx, domain, member_dn, attrs, msgs_counts, msgs) \ +sysdb_search_by_orig_dn(mem_ctx, domain, SYSDB_SEARCH_USER, member_dn, attrs, msgs_counts, msgs); + +#define sysdb_search_groups_by_orig_dn(mem_ctx, domain, member_dn, attrs, msgs_counts, msgs) \ +sysdb_search_by_orig_dn(mem_ctx, domain, SYSDB_SEARCH_GROUP, member_dn, attrs, msgs_counts, msgs); + errno_t sysdb_search_user_override_attrs_by_name(TALLOC_CTX *mem_ctx, struct sss_domain_info *domain, const char *name, diff --git a/src/db/sysdb_ops.c b/src/db/sysdb_ops.c index 7ca6575ce..04df6c5e7 100644 --- a/src/db/sysdb_ops.c +++ b/src/db/sysdb_ops.c @@ -3236,6 +3236,67 @@ int sysdb_search_custom_by_name(TALLOC_CTX *mem_ctx, return ret; } +static int sysdb_cache_search_users(TALLOC_CTX *mem_ctx, +struct sss_domain_info *domain, +struct ldb_context *ldb, +const char *sub_filter, +const char **attrs, +size_t *msgs_count, +struct ldb_message ***msgs); + +static int sysdb_cache_search_groups(TALLOC_CTX *mem_ctx, + struct sss_domain_info *domain, + struct ldb_context *ldb, + const char *sub_filter, + const char **attrs, + size_t *msgs_count, + struct ldb_message ***msgs); + +errno_t sysdb_search_by_orig_dn(TALLOC_CTX *mem_ctx, +struct sss_domain_info *domain, +enum search_by_orig_dn_type type, +const char *member_dn, +const char **attrs, +size_t *msgs_count, +struct ldb_message ***msgs) +{ +TALLOC_CTX *tmp_ctx; +char *filter; +struct ldb_dn *basedn; +errno_t ret; + +tmp_ctx = talloc_new(NULL); +if (tmp_ctx == NULL) { +return ENOMEM; +} + +filter = talloc_asprintf(tmp_ctx, "(%s=%s)", SYSDB_ORIG_DN, member_dn); +if (filter == NULL) { +ret = ENOMEM; +goto done; +} + +switch (type) { +case SYSDB_SEARCH_USER: +ret = sysdb_cache_search_users(mem_ctx, domain, domain->sysdb->ldb, + filter, attrs, msgs_count, msgs); +break; +case SYSDB_SEARCH_GROUP: +ret = sysdb_cache_search_groups(mem_ctx, domain, domain->sysdb->ldb, + filter, attrs, msgs_count, msgs); +break; +default: +DEBUG(SSSDBG_CRIT_FAILURE, + "Trying to perform a search by orig_dn using a " + "non-supported