s4:credentials Allow setting of an empty Kerberos CCACHE
authorAndrew Bartlett <abartlet@samba.org>
Wed, 12 May 2010 02:34:15 +0000 (12:34 +1000)
committerAndrew Bartlett <abartlet@samba.org>
Fri, 14 May 2010 13:25:45 +0000 (23:25 +1000)
This allows us to tell the credentials code where we want the
credentials put.

Andrew Bartlett

source4/auth/credentials/credentials_krb5.c

index 12bf610bf8e905ed646427dd573ac35efabcbb9a..f4ee2641d9826b5937423000c655455c012b4701 100644 (file)
@@ -182,28 +182,22 @@ _PUBLIC_ int cli_credentials_set_ccache(struct cli_credentials *cred,
 
        ret = krb5_cc_get_principal(ccc->smb_krb5_context->krb5_context, ccc->ccache, &princ);
 
-       if (ret) {
-               (*error_string) = talloc_asprintf(cred, "failed to get principal from default ccache: %s\n",
-                                                 smb_get_krb5_error_message(ccc->smb_krb5_context->krb5_context,
-                                                                            ret, ccc));
-               talloc_free(ccc);
-               return ret;
-       }
+       if (ret == 0) {
+               krb5_free_principal(ccc->smb_krb5_context->krb5_context, princ);
+               ret = cli_credentials_set_from_ccache(cred, ccc, obtained, error_string);
 
-       krb5_free_principal(ccc->smb_krb5_context->krb5_context, princ);
+               if (ret) {
+                       (*error_string) = error_message(ret);
+                       return ret;
+               }
 
-       ret = cli_credentials_set_from_ccache(cred, ccc, obtained, error_string);
+               cred->ccache = ccc;
+               cred->ccache_obtained = obtained;
+               talloc_steal(cred, ccc);
 
-       if (ret) {
-               (*error_string) = error_message(ret);
-               return ret;
+               cli_credentials_invalidate_client_gss_creds(cred, cred->ccache_obtained);
+               return 0;
        }
-
-       cred->ccache = ccc;
-       cred->ccache_obtained = obtained;
-       talloc_steal(cred, ccc);
-
-       cli_credentials_invalidate_client_gss_creds(cred, cred->ccache_obtained);
        return 0;
 }