diff options
author | Andrew Bartlett <abartlet@samba.org> | 2011-12-21 15:34:17 +1100 |
---|---|---|
committer | Stefan Metzmacher <metze@samba.org> | 2011-12-22 19:25:11 +0100 |
commit | 06498637bb4d71787f6e903e7dc58466b1d660d2 (patch) | |
tree | 259a51e2765799a70c64c79703cda1b560957f8e /source3/rpc_server/dcesrv_auth_generic.c | |
parent | d52e5473ef3c167e2d5707616313f049b406d725 (diff) | |
download | samba-06498637bb4d71787f6e903e7dc58466b1d660d2.tar.gz samba-06498637bb4d71787f6e903e7dc58466b1d660d2.tar.bz2 samba-06498637bb4d71787f6e903e7dc58466b1d660d2.zip |
s3-rpc_server: Rework pipe_ntlmssp_auth_bind() to be generic
Signed-off-by: Stefan Metzmacher <metze@samba.org>
Diffstat (limited to 'source3/rpc_server/dcesrv_auth_generic.c')
-rw-r--r-- | source3/rpc_server/dcesrv_auth_generic.c | 44 |
1 files changed, 43 insertions, 1 deletions
diff --git a/source3/rpc_server/dcesrv_auth_generic.c b/source3/rpc_server/dcesrv_auth_generic.c index 16dfd4a976..73737c24b7 100644 --- a/source3/rpc_server/dcesrv_auth_generic.c +++ b/source3/rpc_server/dcesrv_auth_generic.c @@ -71,7 +71,49 @@ NTSTATUS auth_generic_server_start(TALLOC_CTX *mem_ctx, goto done; } - /* steal ntlmssp context too */ + /* steal gensec context too */ + *ctx = talloc_move(mem_ctx, &a->gensec_security); + + status = NT_STATUS_OK; + +done: + TALLOC_FREE(a); + + return status; +} + +NTSTATUS auth_generic_server_authtype_start(TALLOC_CTX *mem_ctx, + uint8_t auth_type, uint8_t auth_level, + DATA_BLOB *token_in, + DATA_BLOB *token_out, + const struct tsocket_address *remote_address, + struct gensec_security **ctx) +{ + struct auth_generic_state *a = NULL; + NTSTATUS status; + + status = auth_generic_prepare(remote_address, &a); + if (!NT_STATUS_IS_OK(status)) { + DEBUG(0, (__location__ ": auth_generic_prepare failed: %s\n", + nt_errstr(status))); + return status; + } + + status = auth_generic_authtype_start(a, auth_type, auth_level); + if (!NT_STATUS_IS_OK(status)) { + DEBUG(0, (__location__ ": auth_generic_start failed: %s\n", + nt_errstr(status))); + return status; + } + + status = gensec_update(a->gensec_security, mem_ctx, NULL, *token_in, token_out); + if (!NT_STATUS_IS_OK(status) && !NT_STATUS_EQUAL(status, NT_STATUS_MORE_PROCESSING_REQUIRED)) { + DEBUG(2, (__location__ ": gensec_update failed: %s\n", + nt_errstr(status))); + goto done; + } + + /* steal gensec context too */ *ctx = talloc_move(mem_ctx, &a->gensec_security); status = NT_STATUS_OK; |