[SSSD] [sssd PR#301][synchronized] Introduce sysdb_search_by_orig_dn()

2017-09-02 Thread fidencio
   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()

2017-08-31 Thread fidencio
   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()

2017-07-27 Thread fidencio
   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