cli_credentials_krb5_refresh_ccache_send call kinit_to_ccache() directly
authorStefan Metzmacher <metze@samba.org>
Wed, 27 Nov 2019 15:56:37 +0000 (16:56 +0100)
committerStefan Metzmacher <metze@samba.org>
Thu, 6 Aug 2020 12:03:26 +0000 (14:03 +0200)
auth/credentials/credentials_krb5.c

index 46ca47d67b6e57401d96a87fb811b61a15d5bff1..19db940a7bf0e284f1366bad3e8e528849c63062 100644 (file)
@@ -1387,7 +1387,8 @@ _PUBLIC_ struct tevent_req *cli_credentials_krb5_refresh_ccache_send(
        char *existing_ccache = NULL;
        bool auth_requested;
        NTSTATUS status;
-       int ret;
+       krb5_error_code ret;
+       enum credentials_obtained obtained;
 
        req = tevent_req_create(mem_ctx, &state,
                                struct cli_credentials_krb5_refresh_ccache_state);
@@ -1409,12 +1410,22 @@ _PUBLIC_ struct tevent_req *cli_credentials_krb5_refresh_ccache_send(
                return tevent_req_post(req, ev);
        }
 
-       ret = cli_credentials_get_named_ccache(cred,
-                                              ev,
-                                              lp_ctx,
-                                              ccache_name,
-                                              &ccc,
-                                              &error_string);
+       ret = cli_credentials_new_ccache(cred,
+                                        lp_ctx,
+                                        ccache_name,
+                                        &ccc,
+                                        &error_string);
+       status = krb5_to_nt_status(ret);
+       if (tevent_req_nterror(req, status)) {
+               return tevent_req_post(req, ev);
+       }
+
+       ret = kinit_to_ccache(cred,
+                             cred,
+                             ccc->smb_krb5_context,
+                             ev,
+                             ccc->ccache,
+                             &obtained, &error_string);
        switch (ret) {
        case 0:
                status = NT_STATUS_OK;
@@ -1452,6 +1463,15 @@ _PUBLIC_ struct tevent_req *cli_credentials_krb5_refresh_ccache_send(
                return tevent_req_post(req, ev);
        }
 
+       ret = cli_credentials_set_from_ccache(cred,
+                                             ccc,
+                                             obtained,
+                                             &error_string);
+       status = krb5_to_nt_status(ret);
+       if (tevent_req_nterror(req, status)) {
+               return tevent_req_post(req, ev);
+       }
+
        tevent_req_done(req);
        return tevent_req_post(req, ev);
 }