[SSSD] [PATCH] krb5: Add more debugging to create_ccache()

Jakub Hrozek jhrozek at redhat.com
Tue Mar 10 10:28:13 UTC 2015


On Tue, Mar 10, 2015 at 10:34:23AM +0100, Lukas Slebodnik wrote:
> Please add strerror as well.
> It's easier to see string representation rather than grep header files and
> transfor number to error code.
> 
> LS

strerror and newlines added.
-------------- next part --------------
>From 3dd1119a5ddf3a14e42780ca0e68eeb000afc928 Mon Sep 17 00:00:00 2001
From: Jakub Hrozek <jhrozek at redhat.com>
Date: Tue, 11 Nov 2014 14:04:30 +0100
Subject: [PATCH] KRB5: More debugging for create_ccache()

It was difficult to find where the problem was without advanced
techniques like strace.
---
 src/providers/krb5/krb5_child.c | 54 +++++++++++++++++++++++++++++++----------
 1 file changed, 41 insertions(+), 13 deletions(-)

diff --git a/src/providers/krb5/krb5_child.c b/src/providers/krb5/krb5_child.c
index 8b3f10d8244f483e6f99a79b01964b0018fa3ee4..6c690145dbd0ea03851e6bfb7f45c543c99f6e3a 100644
--- a/src/providers/krb5/krb5_child.c
+++ b/src/providers/krb5/krb5_child.c
@@ -556,7 +556,9 @@ static errno_t handle_randomized(char *in)
         umask(old_umask);
         if (fd == -1) {
             ret = errno;
-            DEBUG(SSSDBG_CRIT_FAILURE, "mkstemp(\"%s\") failed!\n", ccname);
+            DEBUG(SSSDBG_CRIT_FAILURE,
+                  "mkstemp(\"%s\") failed [%d]: %s!\n",
+                  ccname, ret, strerror(ret));
             return ret;
         }
     }
@@ -592,43 +594,73 @@ static krb5_error_code create_ccache(char *ccname, krb5_creds *creds)
     }
 
     kerr = handle_randomized(ccname);
-    if (kerr) goto done;
+    if (kerr) {
+        DEBUG(SSSDBG_CRIT_FAILURE, "handle_randomized failed: %d\n", kerr);
+        goto done;
+    }
 
     kerr = krb5_cc_resolve(kctx, ccname, &kcc);
-    if (kerr) goto done;
+    if (kerr) {
+        KRB5_CHILD_DEBUG(SSSDBG_CRIT_FAILURE, kerr);
+        goto done;
+    }
 
     type = krb5_cc_get_type(kctx, kcc);
     DEBUG(SSSDBG_TRACE_ALL, "Initializing ccache of type [%s]\n", type);
 
 #ifdef HAVE_KRB5_CC_COLLECTION
     if (krb5_cc_support_switch(kctx, type)) {
+        DEBUG(SSSDBG_TRACE_ALL, "CC supports switch\n");
         kerr = krb5_cc_set_default_name(kctx, ccname);
-        if (kerr) goto done;
+        if (kerr) {
+            DEBUG(SSSDBG_TRACE_ALL, "Cannot set default name!\n");
+            KRB5_CHILD_DEBUG(SSSDBG_CRIT_FAILURE, kerr);
+            goto done;
+        }
 
         kerr = krb5_cc_cache_match(kctx, creds->client, &cckcc);
         if (kerr == KRB5_CC_NOTFOUND) {
+            DEBUG(SSSDBG_TRACE_ALL, "Match not found\n");
             kerr = krb5_cc_new_unique(kctx, type, NULL, &cckcc);
             switch_to_cc = true;
         }
-        if (kerr) goto done;
+        if (kerr) {
+            DEBUG(SSSDBG_TRACE_ALL, "krb5_cc_cache_match failed\n");
+            KRB5_CHILD_DEBUG(SSSDBG_CRIT_FAILURE, kerr);
+            goto done;
+        }
         krb5_cc_close(kctx, kcc);
         kcc = cckcc;
     }
 #endif
 
     kerr = krb5_cc_initialize(kctx, kcc, creds->client);
-    if (kerr) goto done;
+    if (kerr) {
+        DEBUG(SSSDBG_TRACE_ALL, "krb5_cc_initialize failed\n");
+        KRB5_CHILD_DEBUG(SSSDBG_CRIT_FAILURE, kerr);
+        goto done;
+    }
 
     kerr = krb5_cc_store_cred(kctx, kcc, creds);
-    if (kerr) goto done;
+    if (kerr) {
+        DEBUG(SSSDBG_TRACE_ALL, "krb5_cc_store_cred failed\n");
+        KRB5_CHILD_DEBUG(SSSDBG_CRIT_FAILURE, kerr);
+        goto done;
+    }
 
 #ifdef HAVE_KRB5_CC_COLLECTION
     if (switch_to_cc) {
+        DEBUG(SSSDBG_TRACE_ALL, "switch_to_cc\n");
         kerr = krb5_cc_switch(kctx, kcc);
-        if (kerr) goto done;
+        if (kerr) {
+            DEBUG(SSSDBG_TRACE_ALL, "krb5_cc_switch\n");
+            KRB5_CHILD_DEBUG(SSSDBG_CRIT_FAILURE, kerr);
+            goto done;
+        }
     }
 #endif
 
+    DEBUG(SSSDBG_TRACE_ALL, "returning: %d\n", kerr);
 done:
     if (kcc) {
         /* FIXME: should we krb5_cc_destroy in case of error ? */
@@ -955,7 +987,6 @@ static krb5_error_code get_and_save_tgt_with_keytab(krb5_context ctx,
     /* Use the updated principal in the creds in case canonicalized */
     kerr = create_ccache(ccname, &creds);
     if (kerr != 0) {
-        KRB5_CHILD_DEBUG(SSSDBG_CRIT_FAILURE, kerr);
         goto done;
     }
     kerr = 0;
@@ -1026,7 +1057,6 @@ static krb5_error_code get_and_save_tgt(struct krb5_req *kr,
     /* Use the updated principal in the creds in case canonicalized */
     kerr = create_ccache(cc_name, kr->creds);
     if (kerr != 0) {
-        KRB5_CHILD_DEBUG(SSSDBG_CRIT_FAILURE, kerr);
         goto done;
     }
 
@@ -1490,9 +1520,7 @@ static errno_t create_empty_ccache(struct krb5_req *kr)
         kerr = 0;
     }
 
-    if (kerr != 0) {
-        KRB5_CHILD_DEBUG(SSSDBG_CRIT_FAILURE, kerr);
-    } else {
+    if (kerr == 0) {
         kerr = k5c_attach_ccname_msg(kr);
     }
 
-- 
2.1.0



More information about the sssd-devel mailing list