diff options
author | Andrew Tridgell <tridge@samba.org> | 2005-01-09 08:34:05 +0000 |
---|---|---|
committer | Gerald (Jerry) Carter <jerry@samba.org> | 2007-10-10 13:08:34 -0500 |
commit | 6836f5d0b167027908da9a08b9b219520997b563 (patch) | |
tree | be9fcc45bd4cb753a7be128a4b9fed39666ed010 /source4/librpc/rpc/dcerpc_auth.c | |
parent | 3feb4423f3ec35dd3dfa2c358797a4f6a86b2fb5 (diff) | |
download | samba-6836f5d0b167027908da9a08b9b219520997b563.tar.gz samba-6836f5d0b167027908da9a08b9b219520997b563.tar.bz2 samba-6836f5d0b167027908da9a08b9b219520997b563.zip |
r4616: the first phase in the addition of proper support for
dcerpc_alter_context and multiple context_ids in the dcerpc client
library.
This stage does the following:
- split "struct dcerpc_pipe" into two parts, the main part being "struct dcerpc_connection", which
contains all the parts not dependent on the context, and "struct dcerpc_pipe" which has
the context dependent part. This is similar to the layering in libcli_*() for SMB
- disable the current dcerpc_alter code. I've used a #warning until i
get the 2nd phase finished. I don't know how portable #warning is, but
it won't be long before I add full alter context support anyway, so it won't last long
- cleanup the allocation of dcerpc_pipe structures. The previous code
was quite awkward.
(This used to be commit 4004c69937be7e5dae56f9567ca607f982d395d3)
Diffstat (limited to 'source4/librpc/rpc/dcerpc_auth.c')
-rw-r--r-- | source4/librpc/rpc/dcerpc_auth.c | 84 |
1 files changed, 44 insertions, 40 deletions
diff --git a/source4/librpc/rpc/dcerpc_auth.c b/source4/librpc/rpc/dcerpc_auth.c index 36e4ba6eea..9d43218e4b 100644 --- a/source4/librpc/rpc/dcerpc_auth.c +++ b/source4/librpc/rpc/dcerpc_auth.c @@ -45,7 +45,7 @@ NTSTATUS dcerpc_bind_auth_none(struct dcerpc_pipe *p, } NTSTATUS dcerpc_bind_auth3(struct dcerpc_pipe *p, uint8_t auth_type, uint8_t auth_level, - const char *uuid, uint_t version) + const char *uuid, uint_t version) { NTSTATUS status; TALLOC_CTX *mem_ctx; @@ -57,33 +57,34 @@ NTSTATUS dcerpc_bind_auth3(struct dcerpc_pipe *p, uint8_t auth_type, uint8_t aut return NT_STATUS_NO_MEMORY; } - if (!p->security_state.generic_state) { - status = gensec_client_start(p, &p->security_state.generic_state); + if (!p->conn->security_state.generic_state) { + status = gensec_client_start(p, &p->conn->security_state.generic_state); if (!NT_STATUS_IS_OK(status)) { return status; } - status = gensec_start_mech_by_authtype(p->security_state.generic_state, auth_type, auth_level); + status = gensec_start_mech_by_authtype(p->conn->security_state.generic_state, + auth_type, auth_level); if (!NT_STATUS_IS_OK(status)) { return status; } } - p->security_state.auth_info = talloc_p(p, struct dcerpc_auth); - if (!p->security_state.auth_info) { + p->conn->security_state.auth_info = talloc(p, struct dcerpc_auth); + if (!p->conn->security_state.auth_info) { status = NT_STATUS_NO_MEMORY; goto done; } - p->security_state.auth_info->auth_type = auth_type; - p->security_state.auth_info->auth_level = auth_level; - p->security_state.auth_info->auth_pad_length = 0; - p->security_state.auth_info->auth_reserved = 0; - p->security_state.auth_info->auth_context_id = random(); - p->security_state.auth_info->credentials = null_data_blob; + p->conn->security_state.auth_info->auth_type = auth_type; + p->conn->security_state.auth_info->auth_level = auth_level; + p->conn->security_state.auth_info->auth_pad_length = 0; + p->conn->security_state.auth_info->auth_reserved = 0; + p->conn->security_state.auth_info->auth_context_id = random(); + p->conn->security_state.auth_info->credentials = null_data_blob; - status = gensec_update(p->security_state.generic_state, mem_ctx, + status = gensec_update(p->conn->security_state.generic_state, mem_ctx, null_data_blob, &credentials); @@ -91,38 +92,40 @@ NTSTATUS dcerpc_bind_auth3(struct dcerpc_pipe *p, uint8_t auth_type, uint8_t aut goto done; } - p->security_state.auth_info->credentials = credentials; + p->conn->security_state.auth_info->credentials = credentials; status = dcerpc_bind_byuuid(p, mem_ctx, uuid, version); if (!NT_STATUS_IS_OK(status)) { goto done; } - status = gensec_update(p->security_state.generic_state, mem_ctx, - p->security_state.auth_info->credentials, + status = gensec_update(p->conn->security_state.generic_state, mem_ctx, + p->conn->security_state.auth_info->credentials, &credentials); if (!NT_STATUS_EQUAL(status, NT_STATUS_MORE_PROCESSING_REQUIRED)) { goto done; } - p->security_state.auth_info->credentials = credentials; + p->conn->security_state.auth_info->credentials = credentials; - status = dcerpc_auth3(p, mem_ctx); + status = dcerpc_auth3(p->conn, mem_ctx); done: talloc_destroy(mem_ctx); if (!NT_STATUS_IS_OK(status)) { - talloc_free(p->security_state.generic_state); - ZERO_STRUCT(p->security_state); + talloc_free(p->conn->security_state.generic_state); + ZERO_STRUCT(p->conn->security_state); } else { /* Authenticated connections use the generic session key */ - p->security_state.session_key = dcerpc_generic_session_key; + p->conn->security_state.session_key = dcerpc_generic_session_key; } return status; } +#warning "bind_alter not implemented" +#if 0 NTSTATUS dcerpc_bind_alter(struct dcerpc_pipe *p, uint8_t auth_type, uint8_t auth_level, const char *uuid, uint_t version) { @@ -136,13 +139,13 @@ NTSTATUS dcerpc_bind_alter(struct dcerpc_pipe *p, uint8_t auth_type, uint8_t aut return NT_STATUS_NO_MEMORY; } - if (!p->security_state.generic_state) { - status = gensec_client_start(p, &p->security_state.generic_state); + if (!p->conn->security_state.generic_state) { + status = gensec_client_start(p, &p->conn->security_state.generic_state); if (!NT_STATUS_IS_OK(status)) { return status; } - status = gensec_start_mech_by_authtype(p->security_state.generic_state, + status = gensec_start_mech_by_authtype(p->conn->security_state.generic_state, auth_type, auth_level); if (!NT_STATUS_IS_OK(status)) { @@ -150,20 +153,20 @@ NTSTATUS dcerpc_bind_alter(struct dcerpc_pipe *p, uint8_t auth_type, uint8_t aut } } - p->security_state.auth_info = talloc_p(p, struct dcerpc_auth); - if (!p->security_state.auth_info) { + p->conn->security_state.auth_info = talloc_p(p, struct dcerpc_auth); + if (!p->conn->security_state.auth_info) { status = NT_STATUS_NO_MEMORY; goto done; } - p->security_state.auth_info->auth_type = auth_type; - p->security_state.auth_info->auth_level = auth_level; - p->security_state.auth_info->auth_pad_length = 0; - p->security_state.auth_info->auth_reserved = 0; - p->security_state.auth_info->auth_context_id = random(); - p->security_state.auth_info->credentials = null_data_blob; + p->conn->security_state.auth_info->auth_type = auth_type; + p->conn->security_state.auth_info->auth_level = auth_level; + p->conn->security_state.auth_info->auth_pad_length = 0; + p->conn->security_state.auth_info->auth_reserved = 0; + p->conn->security_state.auth_info->auth_context_id = random(); + p->conn->security_state.auth_info->credentials = null_data_blob; - status = gensec_update(p->security_state.generic_state, mem_ctx, + status = gensec_update(p->conn->security_state.generic_state, mem_ctx, null_data_blob, &credentials); @@ -171,7 +174,7 @@ NTSTATUS dcerpc_bind_alter(struct dcerpc_pipe *p, uint8_t auth_type, uint8_t aut goto done; } - p->security_state.auth_info->credentials = credentials; + p->conn->security_state.auth_info->credentials = credentials; status = dcerpc_bind_byuuid(p, mem_ctx, uuid, version); if (!NT_STATUS_IS_OK(status)) { @@ -179,15 +182,15 @@ NTSTATUS dcerpc_bind_alter(struct dcerpc_pipe *p, uint8_t auth_type, uint8_t aut } while(1) { - status = gensec_update(p->security_state.generic_state, mem_ctx, - p->security_state.auth_info->credentials, + status = gensec_update(p->conn->security_state.generic_state, mem_ctx, + p->conn->security_state.auth_info->credentials, &credentials); if (!NT_STATUS_EQUAL(status, NT_STATUS_MORE_PROCESSING_REQUIRED)) { goto done; } - p->security_state.auth_info->credentials = credentials; + p->conn->security_state.auth_info->credentials = credentials; status = dcerpc_alter(p, mem_ctx); if (!NT_STATUS_IS_OK(status)) { @@ -199,12 +202,13 @@ done: talloc_destroy(mem_ctx); if (!NT_STATUS_IS_OK(status)) { - talloc_free(p->security_state.generic_state); - ZERO_STRUCT(p->security_state); + talloc_free(p->conn->security_state.generic_state); + ZERO_STRUCT(p->conn->security_state); } else { /* Authenticated connections use the generic session key */ - p->security_state.session_key = dcerpc_generic_session_key; + p->conn->security_state.session_key = dcerpc_generic_session_key; } return status; } +#endif |