s3:libsmb: add a cache for cli_session_creds_prepare_krb5()
[bbaumbach/samba-autobuild/.git] / source3 / libsmb / cliconnect.c
index 1fb1f0127b966d07c02e3c5b4bfe65679c699755..c1be7fc39430862089fb7221e63af5df9d87f1cd 100644 (file)
@@ -305,6 +305,18 @@ NTSTATUS cli_session_creds_prepare_krb5(struct cli_state *cli,
         * only if required!
         */
        setenv(KRB5_ENV_CCNAME, "MEMORY:cliconnect", 1);
+
+       if (cli->last_prepared_creds == creds) {
+               DBG_DEBUG("Re-using previously prepared Kerberos credentials "
+                         "for %s to access %s.\n",
+                         user_principal,
+                         target_hostname);
+               TALLOC_FREE(frame);
+               return NT_STATUS_OK;
+       }
+
+       cli->last_prepared_creds = NULL;
+
        ret = kerberos_kinit_password_ext(user_principal,
                                          pass,
                                          0,
@@ -362,6 +374,8 @@ NTSTATUS cli_session_creds_prepare_krb5(struct cli_state *cli,
                  canon_principal,
                  target_hostname);
 
+       cli->last_prepared_creds = creds;
+
        TALLOC_FREE(frame);
        return NT_STATUS_OK;
 }