Blame SOURCES/krb5-master-keyringccops.patch

7d335d
commit bfdc0955657ba83940c63d1d9771b09edc0cb453
7d335d
Author: Nalin Dahyabhai <nalin@dahyabhai.net>
7d335d
Date:   Thu Dec 5 13:54:09 2013 -0500
7d335d
7d335d
    Flag no-such-keyring errors in get/set-flags ccops
7d335d
    
7d335d
    When attempting to use a keyring cache that doesn't exist, return
7d335d
    KRB5_FCC_NOFILE errors during ccache get/set flags ops, and set an error
7d335d
    message when we fail to read a principal name, bringing us more in line
7d335d
    with the behavior we already have when using file-based caches.
7d335d
7d335d
diff --git a/src/lib/krb5/ccache/cc_keyring.c b/src/lib/krb5/ccache/cc_keyring.c
7d335d
index 1a0f1df..421b228 100644
7d335d
--- a/src/lib/krb5/ccache/cc_keyring.c
7d335d
+++ b/src/lib/krb5/ccache/cc_keyring.c
7d335d
@@ -1521,16 +1521,34 @@ krb5_krcc_remove_cred(krb5_context context, krb5_ccache cache,
7d335d
 static krb5_error_code KRB5_CALLCONV
7d335d
 krb5_krcc_set_flags(krb5_context context, krb5_ccache id, krb5_flags flags)
7d335d
 {
7d335d
+    krb5_krcc_data *d = (krb5_krcc_data *) id->data;
7d335d
+
7d335d
     DEBUG_PRINT(("krb5_krcc_set_flags: entered\n"));
7d335d
 
7d335d
+    k5_cc_mutex_lock(context, &d->lock);
7d335d
+    if (!d->cache_id) {
7d335d
+        k5_cc_mutex_unlock(context, &d->lock);
7d335d
+        return KRB5_FCC_NOFILE;
7d335d
+    }
7d335d
+    k5_cc_mutex_unlock(context, &d->lock);
7d335d
+
7d335d
     return KRB5_OK;
7d335d
 }
7d335d
 
7d335d
 static krb5_error_code KRB5_CALLCONV
7d335d
 krb5_krcc_get_flags(krb5_context context, krb5_ccache id, krb5_flags * flags)
7d335d
 {
7d335d
+    krb5_krcc_data *d = (krb5_krcc_data *) id->data;
7d335d
+
7d335d
     DEBUG_PRINT(("krb5_krcc_get_flags: entered\n"));
7d335d
 
7d335d
+    k5_cc_mutex_lock(context, &d->lock);
7d335d
+    if (!d->cache_id) {
7d335d
+        k5_cc_mutex_unlock(context, &d->lock);
7d335d
+        return KRB5_FCC_NOFILE;
7d335d
+    }
7d335d
+    k5_cc_mutex_unlock(context, &d->lock);
7d335d
+
7d335d
     *flags = 0;
7d335d
     return KRB5_OK;
7d335d
 }
7d335d
@@ -1707,6 +1725,12 @@ krb5_krcc_retrieve_principal(krb5_context context, krb5_ccache id,
7d335d
     if (!d->cache_id || !d->princ_id) {
7d335d
         princ = 0L;
7d335d
         kret = KRB5_FCC_NOFILE;
7d335d
+        if (d->name) {
7d335d
+            krb5_set_error_message(context, kret,
7d335d
+                                   _("Credentials cache keyring '%s' "
7d335d
+                                     "not found"),
7d335d
+                                   d->name);
7d335d
+        }
7d335d
         goto errout;
7d335d
     }
7d335d