s3:auth_generic: add auth_generic_client_start_by_name()
authorStefan Metzmacher <metze@samba.org>
Thu, 26 Nov 2015 10:44:02 +0000 (11:44 +0100)
committerStefan Metzmacher <metze@samba.org>
Thu, 10 Mar 2016 05:52:27 +0000 (06:52 +0100)
Signed-off-by: Stefan Metzmacher <metze@samba.org>
Reviewed-by: Andrew Bartlett <abartlet@samba.org>
Reviewed-by: Günther Deschner <gd@samba.org>
source3/include/auth_generic.h
source3/libsmb/auth_generic.c

index 07df62af43a62681cfc9870051aea7ab97b2e4ec..2672dc28724f9734173b581b575415ec89a7cb17 100644 (file)
@@ -42,7 +42,8 @@ NTSTATUS auth_generic_set_creds(struct auth_generic_state *ans,
 NTSTATUS auth_generic_client_prepare(TALLOC_CTX *mem_ctx,
                                     struct auth_generic_state **_ans);
 NTSTATUS auth_generic_client_start(struct auth_generic_state *ans, const char *oid);
-
+NTSTATUS auth_generic_client_start_by_name(struct auth_generic_state *ans,
+                                          const char *name);
 NTSTATUS auth_generic_client_start_by_authtype(struct auth_generic_state *ans,
                                               uint8_t auth_type,
                                               uint8_t auth_level);
index 68d14516f39eb5db5aba3c017070480e0d95258b..c07445e79a3339383acc568aaef1df5a7060d507 100644 (file)
@@ -151,6 +151,29 @@ NTSTATUS auth_generic_client_start(struct auth_generic_state *ans, const char *o
        return NT_STATUS_OK;
 }
 
+NTSTATUS auth_generic_client_start_by_name(struct auth_generic_state *ans,
+                                          const char *name)
+{
+       NTSTATUS status;
+
+       /* Transfer the credentials to gensec */
+       status = gensec_set_credentials(ans->gensec_security, ans->credentials);
+       if (!NT_STATUS_IS_OK(status)) {
+               DEBUG(1, ("Failed to set GENSEC credentials: %s\n",
+                         nt_errstr(status)));
+               return status;
+       }
+       talloc_unlink(ans, ans->credentials);
+       ans->credentials = NULL;
+
+       status = gensec_start_mech_by_name(ans->gensec_security, name);
+       if (!NT_STATUS_IS_OK(status)) {
+               return status;
+       }
+
+       return NT_STATUS_OK;
+}
+
 NTSTATUS auth_generic_client_start_by_authtype(struct auth_generic_state *ans,
                                               uint8_t auth_type,
                                               uint8_t auth_level)