summaryrefslogtreecommitdiff
path: root/source4/librpc/rpc/dcerpc_auth.c
diff options
context:
space:
mode:
authorAndrew Tridgell <tridge@samba.org>2005-01-09 08:34:05 +0000
committerGerald (Jerry) Carter <jerry@samba.org>2007-10-10 13:08:34 -0500
commit6836f5d0b167027908da9a08b9b219520997b563 (patch)
treebe9fcc45bd4cb753a7be128a4b9fed39666ed010 /source4/librpc/rpc/dcerpc_auth.c
parent3feb4423f3ec35dd3dfa2c358797a4f6a86b2fb5 (diff)
downloadsamba-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.c84
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