[SCM] Samba Shared Repository - branch master updated
Stefan Metzmacher
metze at samba.org
Mon Apr 16 06:45:04 MDT 2012
The branch, master has been updated
via 51e3bbd s4:libcli/smb2: fix anonymous session setups against windows servers
via daa5cec s4:libcli/smb2: remove unused dependency to LIBPACKET
via 66d7553 s3:libsmb: fix anonymous session setups against windows servers
via 92483ee s3:libsmb/ntlmssp: an empty string should mean no password
via b0939c5 libcli/smb: move smb2cli_session_setup_*() prototypes to the code.
via 6054e9a libcli/smb: add smb2cli_session_get_flags()
via c60c2c5 libcli/smb: we should not force a session key for anonymous connections
from b23f5a9 libcli/smb: make use of data_blob_string_const_null()
http://gitweb.samba.org/?p=samba.git;a=shortlog;h=master
- Log -----------------------------------------------------------------
commit 51e3bbd3e0a29171f4ed9e6fb933f4d124400de7
Author: Stefan Metzmacher <metze at samba.org>
Date: Mon Apr 16 12:14:07 2012 +0200
s4:libcli/smb2: fix anonymous session setups against windows servers
Windows server doesn't set the SMB2_SESSION_FLAG_IS_GUEST nor
SMB2_SESSION_FLAG_IS_NULL flag.
This fix makes sure we don't try to verify a signature on the
final session setup response.
metze
Autobuild-User: Stefan Metzmacher <metze at samba.org>
Autobuild-Date: Mon Apr 16 14:44:46 CEST 2012 on sn-devel-104
commit daa5cec1ba765f2894e26b8218b09312e3a682c3
Author: Stefan Metzmacher <metze at samba.org>
Date: Mon Apr 16 12:12:59 2012 +0200
s4:libcli/smb2: remove unused dependency to LIBPACKET
metze
commit 66d7553b0e008601846c1fc7b3a82052cbb5d66d
Author: Stefan Metzmacher <metze at samba.org>
Date: Mon Apr 16 12:14:07 2012 +0200
s3:libsmb: fix anonymous session setups against windows servers
Windows server doesn't set the SMB2_SESSION_FLAG_IS_GUEST nor
SMB2_SESSION_FLAG_IS_NULL flag.
This fix makes sure we don't try to verify a signature on the
final session setup response.
metze
commit 92483eee254ef6844fe88abe1e64f67033a1ea2d
Author: Stefan Metzmacher <metze at samba.org>
Date: Mon Apr 16 12:32:28 2012 +0200
s3:libsmb/ntlmssp: an empty string should mean no password
metze
commit b0939c5774ee4cd4d385309c98eed6893a10381b
Author: Stefan Metzmacher <metze at samba.org>
Date: Mon Apr 16 12:49:58 2012 +0200
libcli/smb: move smb2cli_session_setup_*() prototypes to the code.
metze
commit 6054e9a48b32708797d79a30eaa05d90bdebde27
Author: Stefan Metzmacher <metze at samba.org>
Date: Mon Apr 16 12:45:02 2012 +0200
libcli/smb: add smb2cli_session_get_flags()
metze
commit c60c2c5d94c98e8c2888d912712e0d2155ab7fe7
Author: Stefan Metzmacher <metze at samba.org>
Date: Mon Apr 16 12:41:30 2012 +0200
libcli/smb: we should not force a session key for anonymous connections
smb2cli_session_set_session_key() should not check for a valid session
key, if the connection is a guest or null session.
metze
-----------------------------------------------------------------------
Summary of changes:
libcli/smb/smbXcli_base.c | 13 +++++++++----
libcli/smb/smbXcli_base.h | 16 ++++++++++++++++
source3/libsmb/cliconnect.c | 16 ++++++++++++++++
source3/libsmb/ntlmssp.c | 2 +-
source3/libsmb/smb2cli.h | 15 ---------------
source4/libcli/smb2/session.c | 15 +++++++++++++++
source4/libcli/smb2/transport.c | 1 -
source4/libcli/smb2/wscript_build | 2 +-
8 files changed, 58 insertions(+), 22 deletions(-)
Changeset truncated at 500 lines:
diff --git a/libcli/smb/smbXcli_base.c b/libcli/smb/smbXcli_base.c
index 67ab3d0..aad999d 100644
--- a/libcli/smb/smbXcli_base.c
+++ b/libcli/smb/smbXcli_base.c
@@ -4082,6 +4082,11 @@ uint64_t smb2cli_session_current_id(struct smbXcli_session *session)
return session->smb2.session_id;
}
+uint16_t smb2cli_session_get_flags(struct smbXcli_session *session)
+{
+ return session->smb2.session_flags;
+}
+
NTSTATUS smb2cli_session_application_key(struct smbXcli_session *session,
TALLOC_CTX *mem_ctx,
DATA_BLOB *key)
@@ -4121,10 +4126,6 @@ NTSTATUS smb2cli_session_set_session_key(struct smbXcli_session *session,
return NT_STATUS_INVALID_PARAMETER_MIX;
}
- if (session->smb2.signing_key.length != 0) {
- return NT_STATUS_INVALID_PARAMETER_MIX;
- }
-
no_sign_flags = SMB2_SESSION_FLAG_IS_GUEST | SMB2_SESSION_FLAG_IS_NULL;
if (session->smb2.session_flags & no_sign_flags) {
@@ -4132,6 +4133,10 @@ NTSTATUS smb2cli_session_set_session_key(struct smbXcli_session *session,
return NT_STATUS_OK;
}
+ if (session->smb2.signing_key.length != 0) {
+ return NT_STATUS_INVALID_PARAMETER_MIX;
+ }
+
ZERO_STRUCT(session_key);
memcpy(session_key, _session_key.data,
MIN(_session_key.length, sizeof(session_key)));
diff --git a/libcli/smb/smbXcli_base.h b/libcli/smb/smbXcli_base.h
index dafd836..91dc244 100644
--- a/libcli/smb/smbXcli_base.h
+++ b/libcli/smb/smbXcli_base.h
@@ -247,6 +247,7 @@ struct smbXcli_session *smbXcli_session_create(TALLOC_CTX *mem_ctx,
struct smbXcli_conn *conn);
uint8_t smb2cli_session_security_mode(struct smbXcli_session *session);
uint64_t smb2cli_session_current_id(struct smbXcli_session *session);
+uint16_t smb2cli_session_get_flags(struct smbXcli_session *session);
NTSTATUS smb2cli_session_application_key(struct smbXcli_session *session,
TALLOC_CTX *mem_ctx,
DATA_BLOB *key);
@@ -264,4 +265,19 @@ NTSTATUS smb2cli_session_set_channel_key(struct smbXcli_session *session,
const DATA_BLOB channel_key,
const struct iovec *recv_iov);
+struct tevent_req *smb2cli_session_setup_send(TALLOC_CTX *mem_ctx,
+ struct tevent_context *ev,
+ struct smbXcli_conn *conn,
+ uint32_t timeout_msec,
+ struct smbXcli_session *session,
+ uint8_t in_flags,
+ uint32_t in_capabilities,
+ uint32_t in_channel,
+ uint64_t in_previous_session_id,
+ const DATA_BLOB *in_security_buffer);
+NTSTATUS smb2cli_session_setup_recv(struct tevent_req *req,
+ TALLOC_CTX *mem_ctx,
+ struct iovec **recv_iov,
+ DATA_BLOB *out_security_buffer);
+
#endif /* _SMBXCLI_BASE_H_ */
diff --git a/source3/libsmb/cliconnect.c b/source3/libsmb/cliconnect.c
index 9d4e4e1..6e057a5 100644
--- a/source3/libsmb/cliconnect.c
+++ b/source3/libsmb/cliconnect.c
@@ -1710,6 +1710,22 @@ static void cli_session_setup_ntlmssp_done(struct tevent_req *subreq)
if (cli_state_protocol(state->cli) >= PROTOCOL_SMB2_02) {
struct smbXcli_session *session = state->cli->smb2.session;
+
+ if (state->ntlmssp_state->nt_hash == NULL) {
+ /*
+ * Windows server does not set the
+ * SMB2_SESSION_FLAG_IS_GUEST nor
+ * SMB2_SESSION_FLAG_IS_NULL flag.
+ *
+ * This fix makes sure we do not try
+ * to verify a signature on the final
+ * session setup response.
+ */
+ TALLOC_FREE(state->ntlmssp_state);
+ tevent_req_done(req);
+ return;
+ }
+
status = smb2cli_session_set_session_key(session,
state->ntlmssp_state->session_key,
recv_iov);
diff --git a/source3/libsmb/ntlmssp.c b/source3/libsmb/ntlmssp.c
index b877af5..72466fe 100644
--- a/source3/libsmb/ntlmssp.c
+++ b/source3/libsmb/ntlmssp.c
@@ -78,7 +78,7 @@ NTSTATUS ntlmssp_set_password(struct ntlmssp_state *ntlmssp_state, const char *p
{
TALLOC_FREE(ntlmssp_state->lm_hash);
TALLOC_FREE(ntlmssp_state->nt_hash);
- if (!password) {
+ if (!password || strlen(password) == 0) {
return NT_STATUS_OK;
} else {
uint8_t lm_hash[16];
diff --git a/source3/libsmb/smb2cli.h b/source3/libsmb/smb2cli.h
index 184bd10..eeb6292 100644
--- a/source3/libsmb/smb2cli.h
+++ b/source3/libsmb/smb2cli.h
@@ -24,21 +24,6 @@ struct smbXcli_conn;
struct smbXcli_session;
struct cli_state;
-struct tevent_req *smb2cli_session_setup_send(TALLOC_CTX *mem_ctx,
- struct tevent_context *ev,
- struct smbXcli_conn *conn,
- uint32_t timeout_msec,
- struct smbXcli_session *session,
- uint8_t in_flags,
- uint32_t in_capabilities,
- uint32_t in_channel,
- uint64_t in_previous_session_id,
- const DATA_BLOB *in_security_buffer);
-NTSTATUS smb2cli_session_setup_recv(struct tevent_req *req,
- TALLOC_CTX *mem_ctx,
- struct iovec **recv_iov,
- DATA_BLOB *out_security_buffer);
-
struct tevent_req *smb2cli_logoff_send(TALLOC_CTX *mem_ctx,
struct tevent_context *ev,
struct cli_state *cli);
diff --git a/source4/libcli/smb2/session.c b/source4/libcli/smb2/session.c
index 2657266..57033b8 100644
--- a/source4/libcli/smb2/session.c
+++ b/source4/libcli/smb2/session.c
@@ -27,6 +27,7 @@
#include "libcli/smb2/smb2.h"
#include "libcli/smb2/smb2_calls.h"
#include "auth/gensec/gensec.h"
+#include "auth/credentials/credentials.h"
#include "../libcli/smb/smbXcli_base.h"
#include "../source3/libsmb/smb2cli.h"
@@ -231,6 +232,20 @@ static void smb2_session_setup_spnego_done(struct tevent_req *subreq)
return;
}
+ if (cli_credentials_is_anonymous(state->credentials)) {
+ /*
+ * Windows server does not set the
+ * SMB2_SESSION_FLAG_IS_GUEST nor
+ * SMB2_SESSION_FLAG_IS_NULL flag.
+ *
+ * This fix makes sure we do not try
+ * to verify a signature on the final
+ * session setup response.
+ */
+ tevent_req_done(req);
+ return;
+ }
+
status = gensec_session_key(session->gensec, state,
&session_key);
if (tevent_req_nterror(req, status)) {
diff --git a/source4/libcli/smb2/transport.c b/source4/libcli/smb2/transport.c
index ac563da..a3845a6 100644
--- a/source4/libcli/smb2/transport.c
+++ b/source4/libcli/smb2/transport.c
@@ -27,7 +27,6 @@
#include "libcli/smb2/smb2_calls.h"
#include "lib/socket/socket.h"
#include "lib/events/events.h"
-#include "lib/stream/packet.h"
#include "../lib/util/dlinklist.h"
#include "../libcli/smb/smbXcli_base.h"
#include "librpc/ndr/libndr.h"
diff --git a/source4/libcli/smb2/wscript_build b/source4/libcli/smb2/wscript_build
index 4ade978..02fc5b8 100644
--- a/source4/libcli/smb2/wscript_build
+++ b/source4/libcli/smb2/wscript_build
@@ -4,7 +4,7 @@ bld.SAMBA_SUBSYSTEM('LIBCLI_SMB2',
source='transport.c request.c session.c tcon.c create.c close.c connect.c getinfo.c write.c read.c setinfo.c find.c ioctl.c logoff.c tdis.c flush.c lock.c notify.c cancel.c keepalive.c break.c util.c signing.c lease_break.c',
autoproto='smb2_proto.h',
deps='tevent-util cli_smb_common',
- public_deps='smbclient-raw LIBPACKET gensec tevent',
+ public_deps='smbclient-raw gensec samba-credentials tevent',
public_headers='smb2.h',
)
--
Samba Shared Repository
More information about the samba-cvs
mailing list