summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrew Bartlett <abartlet@samba.org>2011-10-17 20:19:11 +1100
committerAndrew Bartlett <abartlet@samba.org>2011-10-18 12:25:30 +0200
commitf9b042641f9c6615f6a4b102f0182de545d6a19a (patch)
tree3697a6f9e7d87c77e2a451fc384aca3e8bb981a1
parentf3333bdade7d54b19bfcdc2addc685abd165eddf (diff)
downloadsamba-f9b042641f9c6615f6a4b102f0182de545d6a19a.tar.gz
samba-f9b042641f9c6615f6a4b102f0182de545d6a19a.tar.bz2
samba-f9b042641f9c6615f6a4b102f0182de545d6a19a.zip
s3-ntlmssp split auth_ntlmssp_client_start() into two parts
This will allow it to be a wrapper around a gensec module, which requires that they options be set on a context, but before the mechanism is started. This also simplfies the callers, by moving the lp_*() calls into one place. Andrew Bartlett
-rw-r--r--source3/include/ntlmssp_wrap.h9
-rw-r--r--source3/librpc/crypto/cli_spnego.c11
-rw-r--r--source3/libsmb/clifsinfo.c11
-rw-r--r--source3/libsmb/ntlmssp_wrap.c16
-rw-r--r--source3/rpc_client/cli_pipe.c12
5 files changed, 34 insertions, 25 deletions
diff --git a/source3/include/ntlmssp_wrap.h b/source3/include/ntlmssp_wrap.h
index 863c359bbe..7ee3d3d9d8 100644
--- a/source3/include/ntlmssp_wrap.h
+++ b/source3/include/ntlmssp_wrap.h
@@ -74,9 +74,8 @@ NTSTATUS auth_ntlmssp_update(struct auth_ntlmssp_state *ans,
TALLOC_CTX *mem_ctx,
const DATA_BLOB request, DATA_BLOB *reply);
-NTSTATUS auth_ntlmssp_client_start(TALLOC_CTX *mem_ctx,
- const char *netbios_name,
- const char *netbios_domain,
- bool use_ntlmv2,
- struct auth_ntlmssp_state **_ans);
+NTSTATUS auth_ntlmssp_client_prepare(TALLOC_CTX *mem_ctx,
+ struct auth_ntlmssp_state **_ans);
+NTSTATUS auth_ntlmssp_client_start(struct auth_ntlmssp_state *ans);
+
#endif /* _NTLMSSP_WRAP_ */
diff --git a/source3/librpc/crypto/cli_spnego.c b/source3/librpc/crypto/cli_spnego.c
index 3420e20d27..4742158b24 100644
--- a/source3/librpc/crypto/cli_spnego.c
+++ b/source3/librpc/crypto/cli_spnego.c
@@ -99,10 +99,7 @@ NTSTATUS spnego_ntlmssp_init_client(TALLOC_CTX *mem_ctx,
}
sp_ctx->mech = SPNEGO_NTLMSSP;
- status = auth_ntlmssp_client_start(sp_ctx,
- lp_netbios_name(),
- lp_workgroup(),
- lp_client_ntlmv2_auth(),
+ status = auth_ntlmssp_client_prepare(sp_ctx,
&sp_ctx->mech_ctx.ntlmssp_state);
if (!NT_STATUS_IS_OK(status)) {
TALLOC_FREE(sp_ctx);
@@ -138,6 +135,12 @@ NTSTATUS spnego_ntlmssp_init_client(TALLOC_CTX *mem_ctx,
NTLMSSP_FEATURE_SEAL);
}
+ status = auth_ntlmssp_client_start(sp_ctx->mech_ctx.ntlmssp_state);
+ if (!NT_STATUS_IS_OK(status)) {
+ TALLOC_FREE(sp_ctx);
+ return status;
+ }
+
*spnego_ctx = sp_ctx;
return NT_STATUS_OK;
}
diff --git a/source3/libsmb/clifsinfo.c b/source3/libsmb/clifsinfo.c
index 12961c9390..b312cfbd48 100644
--- a/source3/libsmb/clifsinfo.c
+++ b/source3/libsmb/clifsinfo.c
@@ -613,11 +613,8 @@ NTSTATUS cli_raw_ntlm_smb_encryption_start(struct cli_state *cli,
if (!es) {
return NT_STATUS_NO_MEMORY;
}
- status = auth_ntlmssp_client_start(NULL,
- lp_netbios_name(),
- lp_workgroup(),
- lp_client_ntlmv2_auth(),
- &es->s.auth_ntlmssp_state);
+ status = auth_ntlmssp_client_prepare(NULL,
+ &es->s.auth_ntlmssp_state);
if (!NT_STATUS_IS_OK(status)) {
goto fail;
}
@@ -635,6 +632,10 @@ NTSTATUS cli_raw_ntlm_smb_encryption_start(struct cli_state *cli,
goto fail;
}
+ if (!NT_STATUS_IS_OK(status = auth_ntlmssp_client_start(es->s.auth_ntlmssp_state))) {
+ goto fail;
+ }
+
do {
status = auth_ntlmssp_update(es->s.auth_ntlmssp_state, es->s.auth_ntlmssp_state,
blob_in, &blob_out);
diff --git a/source3/libsmb/ntlmssp_wrap.c b/source3/libsmb/ntlmssp_wrap.c
index 6f854f25cd..5f8e246398 100644
--- a/source3/libsmb/ntlmssp_wrap.c
+++ b/source3/libsmb/ntlmssp_wrap.c
@@ -176,10 +176,7 @@ NTSTATUS auth_ntlmssp_update(struct auth_ntlmssp_state *ans,
return status;
}
-NTSTATUS auth_ntlmssp_client_start(TALLOC_CTX *mem_ctx,
- const char *netbios_name,
- const char *netbios_domain,
- bool use_ntlmv2,
+NTSTATUS auth_ntlmssp_client_prepare(TALLOC_CTX *mem_ctx,
struct auth_ntlmssp_state **_ans)
{
struct auth_ntlmssp_state *ans;
@@ -188,8 +185,8 @@ NTSTATUS auth_ntlmssp_client_start(TALLOC_CTX *mem_ctx,
ans = talloc_zero(mem_ctx, struct auth_ntlmssp_state);
status = ntlmssp_client_start(ans,
- netbios_name, netbios_domain,
- use_ntlmv2, &ans->ntlmssp_state);
+ lp_netbios_name(), lp_workgroup(),
+ lp_client_ntlmv2_auth(), &ans->ntlmssp_state);
if (!NT_STATUS_IS_OK(status)) {
return status;
}
@@ -197,3 +194,10 @@ NTSTATUS auth_ntlmssp_client_start(TALLOC_CTX *mem_ctx,
*_ans = ans;
return NT_STATUS_OK;
}
+
+NTSTATUS auth_ntlmssp_client_start(struct auth_ntlmssp_state *ans)
+{
+ NTSTATUS status;
+
+ return NT_STATUS_OK;
+}
diff --git a/source3/rpc_client/cli_pipe.c b/source3/rpc_client/cli_pipe.c
index 247e4867f9..94e4a5106f 100644
--- a/source3/rpc_client/cli_pipe.c
+++ b/source3/rpc_client/cli_pipe.c
@@ -2283,11 +2283,8 @@ static NTSTATUS rpccli_ntlmssp_bind_data(TALLOC_CTX *mem_ctx,
goto fail;
}
- status = auth_ntlmssp_client_start(result,
- lp_netbios_name(),
- lp_workgroup(),
- lp_client_ntlmv2_auth(),
- &ntlmssp_ctx);
+ status = auth_ntlmssp_client_prepare(result,
+ &ntlmssp_ctx);
if (!NT_STATUS_IS_OK(status)) {
goto fail;
}
@@ -2313,6 +2310,11 @@ static NTSTATUS rpccli_ntlmssp_bind_data(TALLOC_CTX *mem_ctx,
auth_ntlmssp_want_feature(ntlmssp_ctx, NTLMSSP_FEATURE_SEAL);
}
+ status = auth_ntlmssp_client_start(ntlmssp_ctx);
+ if (!NT_STATUS_IS_OK(status)) {
+ goto fail;
+ }
+
result->auth_ctx = ntlmssp_ctx;
*presult = result;
return NT_STATUS_OK;