summaryrefslogtreecommitdiff
path: root/source3/auth
diff options
context:
space:
mode:
authorAndrew Bartlett <abartlet@samba.org>2011-12-26 12:26:43 +1100
committerStefan Metzmacher <metze@samba.org>2012-01-05 17:17:28 +0100
commite22b1b4f9e1ec46cf7dffbce24a88240d6fa2a05 (patch)
tree777fd7d82132bf57c5d031d6385f1fddf5f04bbe /source3/auth
parent1075efabc73ef9e890fdb7a53b15cabf467c6a9b (diff)
downloadsamba-e22b1b4f9e1ec46cf7dffbce24a88240d6fa2a05.tar.gz
samba-e22b1b4f9e1ec46cf7dffbce24a88240d6fa2a05.tar.bz2
samba-e22b1b4f9e1ec46cf7dffbce24a88240d6fa2a05.zip
s3-auth re-create the auth context in the s3 ntlmssp server module
This removes the abstraction violation in auth_generic.c. Andrew Bartlett Signed-off-by: Stefan Metzmacher <metze@samba.org>
Diffstat (limited to 'source3/auth')
-rw-r--r--source3/auth/auth.c2
-rw-r--r--source3/auth/auth_generic.c60
-rw-r--r--source3/auth/auth_ntlmssp.c5
-rw-r--r--source3/auth/auth_samba4.c2
4 files changed, 8 insertions, 61 deletions
diff --git a/source3/auth/auth.c b/source3/auth/auth.c
index 4e413b1de5..1e1ede45a4 100644
--- a/source3/auth/auth.c
+++ b/source3/auth/auth.c
@@ -464,8 +464,6 @@ static NTSTATUS make_auth_context_text_list(TALLOC_CTX *mem_ctx,
for (method = (*auth_context)->auth_method_list; method; method = method->next) {
if (method->prepare_gensec) {
(*auth_context)->prepare_gensec = method->prepare_gensec;
- (*auth_context)->gensec_start_mech_by_oid = method->gensec_start_mech_by_oid;
- (*auth_context)->gensec_start_mech_by_authtype = method->gensec_start_mech_by_authtype;
break;
}
}
diff --git a/source3/auth/auth_generic.c b/source3/auth/auth_generic.c
index 34a499895e..13246d642f 100644
--- a/source3/auth/auth_generic.c
+++ b/source3/auth/auth_generic.c
@@ -112,66 +112,12 @@ NTSTATUS auth_generic_prepare(TALLOC_CTX *mem_ctx,
NTSTATUS auth_generic_start(struct auth_generic_state *auth_ntlmssp_state, const char *oid)
{
- struct gensec_ntlmssp_context *gensec_ntlmssp;
- NTSTATUS status;
-
- if (auth_ntlmssp_state->auth_context->gensec_start_mech_by_oid) {
- return auth_ntlmssp_state->auth_context->gensec_start_mech_by_oid(
- auth_ntlmssp_state->gensec_security, oid);
- }
-
- if (strcmp(oid, GENSEC_OID_NTLMSSP) != 0) {
- return NT_STATUS_NOT_IMPLEMENTED;
- }
-
- status = gensec_start_mech_by_oid(auth_ntlmssp_state->gensec_security, oid);
- if (!NT_STATUS_IS_OK(status)) {
- return status;
- }
-
- gensec_ntlmssp =
- talloc_get_type_abort(auth_ntlmssp_state->gensec_security->private_data,
- struct gensec_ntlmssp_context);
-
- gensec_ntlmssp->auth_context = talloc_move(gensec_ntlmssp, &auth_ntlmssp_state->auth_context);
-
- return NT_STATUS_OK;
+ return gensec_start_mech_by_oid(auth_ntlmssp_state->gensec_security, oid);
}
NTSTATUS auth_generic_authtype_start(struct auth_generic_state *auth_ntlmssp_state,
uint8_t auth_type, uint8_t auth_level)
{
- struct gensec_ntlmssp_context *gensec_ntlmssp;
- NTSTATUS status;
-
- if (auth_ntlmssp_state->auth_context->gensec_start_mech_by_authtype) {
- return auth_ntlmssp_state->auth_context->gensec_start_mech_by_authtype(
- auth_ntlmssp_state->gensec_security,
- auth_type, auth_level);
- }
-
- if (auth_type != DCERPC_AUTH_TYPE_NTLMSSP) {
- /* The caller will then free the auth_ntlmssp_state,
- * undoing what was done in auth_generic_prepare().
- *
- * We can't do that logic here, as
- * auth_ntlmssp_want_feature() may have been called in
- * between.
- */
- return NT_STATUS_NOT_IMPLEMENTED;
- }
-
- status = gensec_start_mech_by_authtype(auth_ntlmssp_state->gensec_security,
- auth_type, auth_level);
- if (!NT_STATUS_IS_OK(status)) {
- return status;
- }
-
- gensec_ntlmssp =
- talloc_get_type_abort(auth_ntlmssp_state->gensec_security->private_data,
- struct gensec_ntlmssp_context);
-
- gensec_ntlmssp->auth_context = talloc_move(gensec_ntlmssp, &auth_ntlmssp_state->auth_context);
-
- return NT_STATUS_OK;
+ return gensec_start_mech_by_authtype(auth_ntlmssp_state->gensec_security,
+ auth_type, auth_level);
}
diff --git a/source3/auth/auth_ntlmssp.c b/source3/auth/auth_ntlmssp.c
index a0deada9b8..f2b7fa4a19 100644
--- a/source3/auth/auth_ntlmssp.c
+++ b/source3/auth/auth_ntlmssp.c
@@ -242,6 +242,11 @@ static NTSTATUS gensec_ntlmssp3_server_start(struct gensec_security *gensec_secu
talloc_get_type_abort(gensec_security->private_data,
struct gensec_ntlmssp_context);
+ nt_status = make_auth_context_subsystem(gensec_ntlmssp, &gensec_ntlmssp->auth_context);
+ if (!NT_STATUS_IS_OK(nt_status)) {
+ return nt_status;
+ }
+
nt_status = ntlmssp_server_start(gensec_ntlmssp,
is_standalone,
netbios_name,
diff --git a/source3/auth/auth_samba4.c b/source3/auth/auth_samba4.c
index 119099d5dd..971f9d6898 100644
--- a/source3/auth/auth_samba4.c
+++ b/source3/auth/auth_samba4.c
@@ -185,8 +185,6 @@ static NTSTATUS auth_init_samba4(struct auth_context *auth_context,
result->name = "samba4";
result->auth = check_samba4_security;
result->prepare_gensec = prepare_gensec;
- result->gensec_start_mech_by_oid = gensec_start_mech_by_oid;
- result->gensec_start_mech_by_authtype = gensec_start_mech_by_authtype;
*auth_method = result;
return NT_STATUS_OK;