diff options
author | Simo Sorce <ssorce@redhat.com> | 2011-05-30 15:10:44 -0400 |
---|---|---|
committer | Simo Sorce <ssorce@redhat.com> | 2012-01-11 12:04:12 -0500 |
commit | d1723f6690a0128be930de8cb1f910e173239a0c (patch) | |
tree | 5656bd7258453b138e20f1b263667dcc167a7949 /daemons | |
parent | d87f03571d0d171708ed3e7c19180728bd78fa2c (diff) | |
download | freeipa.git-d1723f6690a0128be930de8cb1f910e173239a0c.tar.gz freeipa.git-d1723f6690a0128be930de8cb1f910e173239a0c.tar.xz freeipa.git-d1723f6690a0128be930de8cb1f910e173239a0c.zip |
ipa-kdb: add function to iterate over principals
Diffstat (limited to 'daemons')
-rw-r--r-- | daemons/ipa-kdb/ipa_kdb_principals.c | 42 |
1 files changed, 41 insertions, 1 deletions
diff --git a/daemons/ipa-kdb/ipa_kdb_principals.c b/daemons/ipa-kdb/ipa_kdb_principals.c index e697629f..d6a816f9 100644 --- a/daemons/ipa-kdb/ipa_kdb_principals.c +++ b/daemons/ipa-kdb/ipa_kdb_principals.c @@ -993,6 +993,46 @@ krb5_error_code ipadb_iterate(krb5_context kcontext, int (*func)(krb5_pointer, krb5_db_entry *), krb5_pointer func_arg) { - return KRB5_PLUGIN_OP_NOTSUPP; + struct ipadb_context *ipactx; + krb5_error_code kerr; + LDAPMessage *res = NULL; + LDAPMessage *lentry; + krb5_db_entry *kentry; + uint32_t pol; + + ipactx = ipadb_get_context(kcontext); + if (!ipactx) { + return KRB5_KDB_DBNOTINITED; + } + + /* fetch list of principal matching filter */ + kerr = ipadb_fetch_principals(ipactx, match_entry, &res); + if (kerr != 0) { + goto done; + } + + lentry = ldap_first_entry(ipactx->lcontext, res); + + while (lentry) { + + kentry = NULL; + kerr = ipadb_parse_ldap_entry(kcontext, NULL, lentry, &kentry, &pol); + if (kerr == 0 && pol != 0) { + kerr = ipadb_fetch_tktpolicy(kcontext, lentry, kentry, pol); + } + if (kerr == 0) { + /* Now call the callback with the entry */ + func(func_arg, kentry); + } + ipadb_free_principal(kcontext, kentry); + + lentry = ldap_next_entry(ipactx->lcontext, lentry); + } + + kerr = 0; + +done: + ldap_msgfree(res); + return kerr; } |