diff options
author | Sumit Bose <sbose@redhat.com> | 2015-05-27 11:22:20 +0200 |
---|---|---|
committer | Jakub Hrozek <jhrozek@redhat.com> | 2015-06-19 18:48:13 +0200 |
commit | 7d8b7d82f0a91ed656320577fc781f24a66db9f8 (patch) | |
tree | 2cbf69045645258e3f659262be180c689c9ffce1 /src/db/sysdb_ops.c | |
parent | bf01e8179cbb2be476805340636098deda7e1366 (diff) | |
download | sssd-7d8b7d82f0a91ed656320577fc781f24a66db9f8.tar.gz sssd-7d8b7d82f0a91ed656320577fc781f24a66db9f8.tar.xz sssd-7d8b7d82f0a91ed656320577fc781f24a66db9f8.zip |
sysdb: add sysdb_search_user_by_cert() and sysdb_search_object_by_cert()
Related to https://fedorahosted.org/sssd/ticket/2596
Reviewed-by: Pavel Březina <pbrezina@redhat.com>
Diffstat (limited to 'src/db/sysdb_ops.c')
-rw-r--r-- | src/db/sysdb_ops.c | 35 |
1 files changed, 35 insertions, 0 deletions
diff --git a/src/db/sysdb_ops.c b/src/db/sysdb_ops.c index d34583787..6d0aede8a 100644 --- a/src/db/sysdb_ops.c +++ b/src/db/sysdb_ops.c @@ -24,6 +24,7 @@ #include "db/sysdb_services.h" #include "db/sysdb_autofs.h" #include "util/crypto/sss_crypto.h" +#include "util/cert.h" #include <time.h> int add_string(struct ldb_message *msg, int flags, @@ -3702,6 +3703,40 @@ errno_t sysdb_search_object_by_uuid(TALLOC_CTX *mem_ctx, uuid_str, attrs, res); } +errno_t sysdb_search_object_by_cert(TALLOC_CTX *mem_ctx, + struct sss_domain_info *domain, + const char *cert, + const char **attrs, + struct ldb_result **res) +{ + int ret; + char *user_filter; + + ret = sss_cert_derb64_to_ldap_filter(mem_ctx, cert, SYSDB_USER_CERT, + &user_filter); + if (ret != EOK) { + DEBUG(SSSDBG_OP_FAILURE, "sss_cert_derb64_to_ldap_filter failed.\n"); + return ret; + } + + ret = sysdb_search_object_by_str_attr(mem_ctx, domain, + SYSDB_USER_CERT_FILTER, + user_filter, attrs, res); + talloc_free(user_filter); + + return ret; +} + +errno_t sysdb_search_user_by_cert(TALLOC_CTX *mem_ctx, + struct sss_domain_info *domain, + const char *cert, + struct ldb_result **res) +{ + const char *user_attrs[] = SYSDB_PW_ATTRS; + + return sysdb_search_object_by_cert(mem_ctx, domain, cert, user_attrs, res); +} + errno_t sysdb_get_sids_of_members(TALLOC_CTX *mem_ctx, struct sss_domain_info *dom, const char *group_name, |