summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorStefan Metzmacher <metze@samba.org>2015-11-26 11:44:02 +0100
committerStefan Metzmacher <metze@samba.org>2016-03-10 06:52:27 +0100
commitccfd2647c7e65c3e2ad92dbc27c21570da0706d4 (patch)
tree8a2a09f3991a6295befd903b57a9364da9999389
parent8efcb4943585f015c9956118d8f42be89d5c7677 (diff)
downloadsamba-ccfd2647c7e65c3e2ad92dbc27c21570da0706d4.tar.gz
s3:auth_generic: add auth_generic_client_start_by_name()
Signed-off-by: Stefan Metzmacher <metze@samba.org> Reviewed-by: Andrew Bartlett <abartlet@samba.org> Reviewed-by: Günther Deschner <gd@samba.org>
-rw-r--r--source3/include/auth_generic.h3
-rw-r--r--source3/libsmb/auth_generic.c23
2 files changed, 25 insertions, 1 deletions
diff --git a/source3/include/auth_generic.h b/source3/include/auth_generic.h
index 07df62af43a..2672dc28724 100644
--- a/source3/include/auth_generic.h
+++ b/source3/include/auth_generic.h
@@ -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);
diff --git a/source3/libsmb/auth_generic.c b/source3/libsmb/auth_generic.c
index 68d14516f39..c07445e79a3 100644
--- a/source3/libsmb/auth_generic.c
+++ b/source3/libsmb/auth_generic.c
@@ -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)