diff options
author | Jakub Hrozek <jhrozek@redhat.com> | 2011-12-05 15:51:35 +0100 |
---|---|---|
committer | Stephen Gallagher <sgallagh@redhat.com> | 2011-12-16 14:46:17 -0500 |
commit | 75a43c7f91fcb27dee75976cc7c094dd5fa589f6 (patch) | |
tree | a1c05b7934e12f3bf8a561eae2d33a1f7b09e97e | |
parent | 4e9631a9f1ae87317eef53145622099c46196b56 (diff) | |
download | sssd-75a43c7f91fcb27dee75976cc7c094dd5fa589f6.tar.gz sssd-75a43c7f91fcb27dee75976cc7c094dd5fa589f6.tar.xz sssd-75a43c7f91fcb27dee75976cc7c094dd5fa589f6.zip |
Export the function to convert ldb_result to sysdb_attrs
It will be reused later in the sudo responder
-rw-r--r-- | src/db/sysdb.c | 29 | ||||
-rw-r--r-- | src/db/sysdb.h | 4 | ||||
-rw-r--r-- | src/providers/ipa/ipa_access.c | 2 | ||||
-rw-r--r-- | src/providers/ldap/ldap_common.c | 29 |
4 files changed, 34 insertions, 30 deletions
diff --git a/src/db/sysdb.c b/src/db/sysdb.c index 034e5da0d..8ca4c17fb 100644 --- a/src/db/sysdb.c +++ b/src/db/sysdb.c @@ -1765,3 +1765,32 @@ done: talloc_free(tmp_ctx); return ret; } + +errno_t sysdb_msg2attrs(TALLOC_CTX *mem_ctx, size_t count, + struct ldb_message **msgs, + struct sysdb_attrs ***attrs) +{ + int i; + struct sysdb_attrs **a; + + a = talloc_array(mem_ctx, struct sysdb_attrs *, count); + if (a == NULL) { + DEBUG(1, ("talloc_array failed.\n")); + return ENOMEM; + } + + for (i = 0; i < count; i++) { + a[i] = talloc(a, struct sysdb_attrs); + if (a[i] == NULL) { + DEBUG(1, ("talloc_array failed.\n")); + talloc_free(a); + return ENOMEM; + } + a[i]->num = msgs[i]->num_elements; + a[i]->a = talloc_steal(a[i], msgs[i]->elements); + } + + *attrs = a; + + return EOK; +} diff --git a/src/db/sysdb.h b/src/db/sysdb.h index 6094a4aaa..3d2a76826 100644 --- a/src/db/sysdb.h +++ b/src/db/sysdb.h @@ -254,6 +254,10 @@ errno_t sysdb_get_real_name(TALLOC_CTX *mem_ctx, const char *name, const char **_cname); +errno_t sysdb_msg2attrs(TALLOC_CTX *mem_ctx, size_t count, + struct ldb_message **msgs, + struct sysdb_attrs ***attrs); + /* convert an ldb error into an errno error */ int sysdb_error_to_errno(int ldberr); diff --git a/src/providers/ipa/ipa_access.c b/src/providers/ipa/ipa_access.c index 880f07d31..bb496e594 100644 --- a/src/providers/ipa/ipa_access.c +++ b/src/providers/ipa/ipa_access.c @@ -644,7 +644,7 @@ static errno_t hbac_get_cached_rules(TALLOC_CTX *mem_ctx, count = 0; } - ret = msgs2attrs_array(mem_ctx, count, msgs, &hbac_ctx->rules); + ret = sysdb_msg2attrs(mem_ctx, count, msgs, &hbac_ctx->rules); if (ret != EOK) { DEBUG(1, ("Could not convert ldb message to sysdb_attrs\n")); goto done; diff --git a/src/providers/ldap/ldap_common.c b/src/providers/ldap/ldap_common.c index f9627ac1d..dc55f6eca 100644 --- a/src/providers/ldap/ldap_common.c +++ b/src/providers/ldap/ldap_common.c @@ -1402,32 +1402,3 @@ char *sdap_get_id_specific_filter(TALLOC_CTX *mem_ctx, } return filter; /* NULL or not */ } - -errno_t msgs2attrs_array(TALLOC_CTX *mem_ctx, size_t count, - struct ldb_message **msgs, - struct sysdb_attrs ***attrs) -{ - int i; - struct sysdb_attrs **a; - - a = talloc_array(mem_ctx, struct sysdb_attrs *, count); - if (a == NULL) { - DEBUG(1, ("talloc_array failed.\n")); - return ENOMEM; - } - - for (i = 0; i < count; i++) { - a[i] = talloc(a, struct sysdb_attrs); - if (a[i] == NULL) { - DEBUG(1, ("talloc_array failed.\n")); - talloc_free(a); - return ENOMEM; - } - a[i]->num = msgs[i]->num_elements; - a[i]->a = talloc_steal(a[i], msgs[i]->elements); - } - - *attrs = a; - - return EOK; -} |