[SSSD] [PATCH] KRB5 child: handle more error codes gracefully

Jakub Hrozek jhrozek at redhat.com
Wed Sep 19 10:56:00 UTC 2012


This patch changes handling of krb5 child error codes so that it's on par
with the 1.8 branch after Joschi Brauchle reviewed the 1.8 backport.
-------------- next part --------------
>From 3afac414b842053957ce947378512638c5ddea4c Mon Sep 17 00:00:00 2001
From: Jakub Hrozek <jhrozek at redhat.com>
Date: Wed, 19 Sep 2012 12:51:50 +0200
Subject: [PATCH] KRB5 child: handle more error codes gracefully

This patch changes handling of krb5 child error codes so that it's on
par with the 1.8 branch after Joschi Brauchle reviewed the 1.8 backport.
---
 src/providers/krb5/krb5_child.c | 57 +++++++++++++++++++----------------------
 1 file changed, 26 insertions(+), 31 deletions(-)

diff --git a/src/providers/krb5/krb5_child.c b/src/providers/krb5/krb5_child.c
index 9665f45ba2cdca9a8a19e7da24354e624ae33f7e..6987d2b9ed0c4c794e165716ed64f61427e66e0c 100644
--- a/src/providers/krb5/krb5_child.c
+++ b/src/providers/krb5/krb5_child.c
@@ -923,40 +923,45 @@ done:
 
 }
 
-static int kerr_to_status(krb5_error_code kerr)
+static int kerr_handle_error(krb5_error_code kerr)
 {
-    int pam_status = PAM_SYSTEM_ERR;
-
-    if (kerr == 0) {
-        return PAM_SUCCESS;
-    }
+    int pam_status;
 
     KRB5_CHILD_DEBUG(SSSDBG_CRIT_FAILURE, kerr);
     switch (kerr) {
         case KRB5_LIBOS_CANTREADPWD:
-                pam_status = PAM_CRED_UNAVAIL;
-                break;
+            pam_status = PAM_CRED_UNAVAIL;
+            break;
         case KRB5_KDC_UNREACH:
-                pam_status = PAM_AUTHINFO_UNAVAIL;
-                break;
+            pam_status = PAM_AUTHINFO_UNAVAIL;
+            break;
         case KRB5KDC_ERR_KEY_EXP:
-                pam_status = PAM_NEW_AUTHTOK_REQD;
-                break;
+            pam_status = PAM_NEW_AUTHTOK_REQD;
+            break;
         case KRB5KRB_AP_ERR_BAD_INTEGRITY:
-                pam_status = PAM_AUTH_ERR;
-                break;
+            pam_status = PAM_AUTH_ERR;
+            break;
         case KRB5_PREAUTH_FAILED:
         case KRB5KDC_ERR_PREAUTH_FAILED:
-                pam_status = PAM_CRED_ERR;
-                break;
+            pam_status = PAM_CRED_ERR;
+            break;
         default:
-                pam_status = PAM_SYSTEM_ERR;
-                break;
+            pam_status = PAM_SYSTEM_ERR;
+            break;
     }
 
     return pam_status;
 }
 
+static int kerr_to_status(krb5_error_code kerr)
+{
+    if (kerr == 0) {
+        return PAM_SUCCESS;
+    }
+
+    return kerr_handle_error(kerr);
+}
+
 static errno_t changepw_child(int fd, struct krb5_req *kr)
 {
     int ret;
@@ -1015,8 +1020,7 @@ static errno_t changepw_child(int fd, struct krb5_req *kr)
                                         changepw_princ,
                                         kr->options);
     if (kerr != 0) {
-        KRB5_CHILD_DEBUG(SSSDBG_CRIT_FAILURE, kerr);
-        pam_status = kerr_to_status(kerr);
+        pam_status = kerr_handle_error(kerr);
         goto sendresponse;
     }
 
@@ -1104,12 +1108,7 @@ static errno_t changepw_child(int fd, struct krb5_req *kr)
     talloc_zfree(newpass_str);
     memset(kr->pd->newauthtok, 0, kr->pd->newauthtok_size);
 
-    if (kerr != 0) {
-        KRB5_CHILD_DEBUG(SSSDBG_CRIT_FAILURE, kerr);
-        if (kerr == KRB5_KDC_UNREACH) {
-            pam_status = PAM_AUTHINFO_UNAVAIL;
-        }
-    }
+    pam_status = kerr_to_status(kerr);
 
 sendresponse:
     ret = sendresponse(fd, kerr, pam_status, kr);
@@ -1264,11 +1263,7 @@ static errno_t renew_tgt_child(int fd, struct krb5_req *kr)
 
     kerr = krb5_get_renewed_creds(kr->ctx, kr->creds, kr->princ, ccache, NULL);
     if (kerr != 0) {
-        KRB5_CHILD_DEBUG(SSSDBG_CRIT_FAILURE, kerr);
-        if (kerr == KRB5_KDC_UNREACH) {
-            status = PAM_AUTHINFO_UNAVAIL;
-            DEBUG(SSSDBG_TRACE_ALL, ("kdc unreachable for renewed creds.\n"));
-        }
+        status = kerr_handle_error(kerr);
         goto done;
     }
 
-- 
1.7.11.4



More information about the sssd-devel mailing list