diff options
author | Stephen Gallagher <sgallagh@redhat.com> | 2012-04-23 08:55:58 -0400 |
---|---|---|
committer | Stephen Gallagher <sgallagh@redhat.com> | 2012-05-03 14:09:14 -0400 |
commit | 58d02e0d3d6d48c97fccdb2ad7212e065671ad6d (patch) | |
tree | 6dc162349f366cfb2a20429f98141b258a739369 /src/providers/ldap/ldap_common.c | |
parent | 532eb49e129bedf57cdbd0a66f39ad228b8f2482 (diff) | |
download | sssd-58d02e0d3d6d48c97fccdb2ad7212e065671ad6d.tar.gz sssd-58d02e0d3d6d48c97fccdb2ad7212e065671ad6d.tar.bz2 sssd-58d02e0d3d6d48c97fccdb2ad7212e065671ad6d.zip |
LDAP: Add helper routine to convert LDAP blob to SID string
Diffstat (limited to 'src/providers/ldap/ldap_common.c')
-rw-r--r-- | src/providers/ldap/ldap_common.c | 37 |
1 files changed, 37 insertions, 0 deletions
diff --git a/src/providers/ldap/ldap_common.c b/src/providers/ldap/ldap_common.c index 6b03451a..8e117d26 100644 --- a/src/providers/ldap/ldap_common.c +++ b/src/providers/ldap/ldap_common.c @@ -34,6 +34,7 @@ #include "util/crypto/sss_crypto.h" #include "providers/ldap/ldap_opts.h" +#include "providers/ldap/sdap_idmap.h" /* a fd the child process would log into */ int ldap_child_debug_fd = -1; @@ -1409,3 +1410,39 @@ char *sdap_get_id_specific_filter(TALLOC_CTX *mem_ctx, } return filter; /* NULL or not */ } + +errno_t +sdap_attrs_get_sid_str(TALLOC_CTX *mem_ctx, + struct sdap_idmap_ctx *idmap_ctx, + struct sysdb_attrs *sysdb_attrs, + const char *sid_attr, + char **_sid_str) +{ + errno_t ret; + enum idmap_error_code err; + struct ldb_message_element *el; + char *sid_str; + + ret = sysdb_attrs_get_el(sysdb_attrs, sid_attr, &el); + if (ret != EOK || el->num_values != 1) { + DEBUG(SSSDBG_MINOR_FAILURE, + ("No [%s] attribute while id-mapping. [%d][%s]\n", + sid_attr, el->num_values, strerror(ret))); + return ret; + } + + err = sss_idmap_bin_sid_to_sid(idmap_ctx->map, + el->values[0].data, + el->values[0].length, + &sid_str); + if (err != IDMAP_SUCCESS) { + DEBUG(SSSDBG_MINOR_FAILURE, + ("Could not convert SID: [%s]\n", + idmap_error_string(err))); + return EIO; + } + + *_sid_str = talloc_steal(mem_ctx, sid_str); + + return EOK; +} |