diff options
author | Stephen Gallagher <sgallagh@redhat.com> | 2011-03-22 17:42:55 -0400 |
---|---|---|
committer | Stephen Gallagher <sgallagh@redhat.com> | 2011-03-23 04:58:37 -0400 |
commit | 24be43b38dc62de571636f04632f00f699112440 (patch) | |
tree | e8e5f3b210b847c07108453019aa77fd13f31f1c /src/db | |
parent | 34ae23e4b35f182716c716c408c3c7ad9e683fad (diff) | |
download | sssd-24be43b38dc62de571636f04632f00f699112440.tar.gz sssd-24be43b38dc62de571636f04632f00f699112440.tar.xz sssd-24be43b38dc62de571636f04632f00f699112440.zip |
Add sysdb_attrs_primary_name_list() routine
This routine will replace the use of sysdb_attrs_to_list() for any
case where we're trying to get the name of the entry. It's a
necessary precaution in case the name is multi-valued.
Diffstat (limited to 'src/db')
-rw-r--r-- | src/db/sysdb.c | 53 | ||||
-rw-r--r-- | src/db/sysdb.h | 6 |
2 files changed, 59 insertions, 0 deletions
diff --git a/src/db/sysdb.c b/src/db/sysdb.c index ef9d0a237..94738c606 100644 --- a/src/db/sysdb.c +++ b/src/db/sysdb.c @@ -2256,3 +2256,56 @@ done: talloc_free(tmpctx); return ret; } + +errno_t sysdb_attrs_primary_name_list(struct sysdb_ctx *sysdb, + TALLOC_CTX *mem_ctx, + struct sysdb_attrs **attr_list, + size_t attr_count, + const char *ldap_attr, + char ***name_list) +{ + errno_t ret; + size_t i, j; + char **list; + const char *name; + + /* Assume that every entry has a primary name */ + list = talloc_array(mem_ctx, char *, attr_count+1); + if (!list) { + return ENOMEM; + } + + j = 0; + for (i = 0; i < attr_count; i++) { + ret = sysdb_attrs_primary_name(sysdb, + attr_list[i], + ldap_attr, + &name); + if (ret != EOK) { + DEBUG(1, ("Could not determine primary name\n")); + /* Skip and continue. Don't advance 'j' */ + continue; + } + + list[j] = talloc_strdup(list, name); + if (!list[j]) { + ret = ENOMEM; + goto done; + } + + j++; + } + + /* NULL-terminate the list */ + list[j] = NULL; + + *name_list = list; + + ret = EOK; + +done: + if (ret != EOK) { + talloc_free(list); + } + return ret; +} diff --git a/src/db/sysdb.h b/src/db/sysdb.h index 971a35f99..b7256911a 100644 --- a/src/db/sysdb.h +++ b/src/db/sysdb.h @@ -219,6 +219,12 @@ errno_t sysdb_attrs_primary_name(struct sysdb_ctx *sysdb, struct sysdb_attrs *attrs, const char *ldap_attr, const char **_primary); +errno_t sysdb_attrs_primary_name_list(struct sysdb_ctx *sysdb, + TALLOC_CTX *mem_ctx, + struct sysdb_attrs **attr_list, + size_t attr_count, + const char *ldap_attr, + char ***name_list); /* convert an ldb error into an errno error */ int sysdb_error_to_errno(int ldberr); |