diff options
author | Simo Sorce <ssorce@redhat.com> | 2012-02-13 22:21:17 -0500 |
---|---|---|
committer | Rob Crittenden <rcritten@redhat.com> | 2012-02-15 04:50:57 -0500 |
commit | c3c59ce15c48110a5b91a2953fef2f51af875899 (patch) | |
tree | e56341661f692470949d11c156e661f696977400 /daemons/ipa-kdb | |
parent | 0eb56656e0151cf58898ee1ac47aae3dc31cbbe6 (diff) | |
download | freeipa-c3c59ce15c48110a5b91a2953fef2f51af875899.tar.gz freeipa-c3c59ce15c48110a5b91a2953fef2f51af875899.tar.xz freeipa-c3c59ce15c48110a5b91a2953fef2f51af875899.zip |
ipa-kdb: Avoid lookup on modify if possible
This avoids one useless search if we already have the entry_dn.
Diffstat (limited to 'daemons/ipa-kdb')
-rw-r--r-- | daemons/ipa-kdb/ipa_kdb_principals.c | 46 |
1 files changed, 27 insertions, 19 deletions
diff --git a/daemons/ipa-kdb/ipa_kdb_principals.c b/daemons/ipa-kdb/ipa_kdb_principals.c index 3540f0eea..9a3c86fb0 100644 --- a/daemons/ipa-kdb/ipa_kdb_principals.c +++ b/daemons/ipa-kdb/ipa_kdb_principals.c @@ -1760,33 +1760,37 @@ static krb5_error_code ipadb_modify_principal(krb5_context kcontext, LDAPMessage *lentry; struct ipadb_mods *imods = NULL; char *dn = NULL; + struct ipadb_e_data *ied; ipactx = ipadb_get_context(kcontext); if (!ipactx) { return KRB5_KDB_DBNOTINITED; } - kerr = krb5_unparse_name(kcontext, entry->princ, &principal); - if (kerr != 0) { - goto done; - } + ied = (struct ipadb_e_data *)entry->e_data; + if (!ied || !ied->entry_dn) { + kerr = krb5_unparse_name(kcontext, entry->princ, &principal); + if (kerr != 0) { + goto done; + } - kerr = ipadb_fetch_principals(ipactx, principal, &res); - if (kerr != 0) { - goto done; - } + kerr = ipadb_fetch_principals(ipactx, principal, &res); + if (kerr != 0) { + goto done; + } - /* FIXME: no alias allowed for now, should we allow modifies - * by alias name ? */ - kerr = ipadb_find_principal(kcontext, 0, res, &principal, &lentry); - if (kerr != 0) { - goto done; - } + /* FIXME: no alias allowed for now, should we allow modifies + * by alias name ? */ + kerr = ipadb_find_principal(kcontext, 0, res, &principal, &lentry); + if (kerr != 0) { + goto done; + } - dn = ldap_get_dn(ipactx->lcontext, lentry); - if (!dn) { - kerr = KRB5_KDB_INTERNAL_ERROR; - goto done; + dn = ldap_get_dn(ipactx->lcontext, lentry); + if (!dn) { + kerr = KRB5_KDB_INTERNAL_ERROR; + goto done; + } } kerr = new_ipadb_mods(&imods); @@ -1800,7 +1804,11 @@ static krb5_error_code ipadb_modify_principal(krb5_context kcontext, goto done; } - kerr = ipadb_simple_modify(ipactx, dn, imods->mods); + if (!ied || !ied->entry_dn) { + kerr = ipadb_simple_modify(ipactx, dn, imods->mods); + } else { + kerr = ipadb_simple_modify(ipactx, ied->entry_dn, imods->mods); + } done: ipadb_mods_free(imods); |