summaryrefslogtreecommitdiffstats
path: root/daemons
diff options
context:
space:
mode:
authorSimo Sorce <ssorce@redhat.com>2012-02-13 22:21:17 -0500
committerRob Crittenden <rcritten@redhat.com>2012-02-15 04:50:57 -0500
commitc3c59ce15c48110a5b91a2953fef2f51af875899 (patch)
treee56341661f692470949d11c156e661f696977400 /daemons
parent0eb56656e0151cf58898ee1ac47aae3dc31cbbe6 (diff)
downloadfreeipa-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')
-rw-r--r--daemons/ipa-kdb/ipa_kdb_principals.c46
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);