[SCM] Samba Shared Repository - branch master updated
Jeremy Allison
jra at samba.org
Mon Feb 23 17:02:05 MST 2015
The branch, master has been updated
via 84d4270 nmblookup: Warn user if netbios name is too long.
via a782ae1 nss-wins: Do not lookup invalid netbios names
via a5e3a19 libsmb: Do not lookup invalid netbios names.
via eb05766 Revert "s3: smbd: signing. Ensure we respond correctly to an SMB2 negprot with SMB2_NEGOTIATE_SIGNING_REQUIRED."
from c0a463d waf: Only build the wrappers if we enable selftest
https://git.samba.org/?p=samba.git;a=shortlog;h=master
- Log -----------------------------------------------------------------
commit 84d4270c8e4ec18e9f83722d6df1a07f70acaade
Author: Andreas Schneider <asn at samba.org>
Date: Fri Jan 30 14:37:06 2015 +0100
nmblookup: Warn user if netbios name is too long.
Signed-off-by: Andreas Schneider <asn at samba.org>
Reviewed-by: Jeremy Allison <jra at samba.org>
Autobuild-User(master): Jeremy Allison <jra at samba.org>
Autobuild-Date(master): Tue Feb 24 01:01:10 CET 2015 on sn-devel-104
commit a782ae1da463433b6f5199acd0d093583780dd20
Author: Andreas Schneider <asn at samba.org>
Date: Fri Jan 30 14:29:26 2015 +0100
nss-wins: Do not lookup invalid netbios names
Signed-off-by: Andreas Schneider <asn at samba.org>
Reviewed-by: Jeremy Allison <jra at samba.org>
commit a5e3a198d0a1c36a3798935595e4844588caba68
Author: Andreas Schneider <asn at samba.org>
Date: Fri Jan 30 14:28:48 2015 +0100
libsmb: Do not lookup invalid netbios names.
Signed-off-by: Andreas Schneider <asn at samba.org>
Reviewed-by: Jeremy Allison <jra at samba.org>
commit eb05766a8c539b1b7d8de8481686556f6bdcc6db
Author: Jeremy Allison <jra at samba.org>
Date: Mon Feb 23 10:15:05 2015 -0800
Revert "s3: smbd: signing. Ensure we respond correctly to an SMB2 negprot with SMB2_NEGOTIATE_SIGNING_REQUIRED."
Even though the MS-SMB2 spec says so, Windows doesn't behave
like this.
This reverts commit 1cea6e5b6f8c0e28d5ba2d296c831c4878fca304.
Signed-off-by: Jeremy Allison <jra at samba.org>
Reviewed-by: "Stefan (metze) Metzmacher" <metze at samba.org>
-----------------------------------------------------------------------
Summary of changes:
libcli/nbt/tools/nmblookup.c | 13 +++++++++++++
nsswitch/wins.c | 14 +++++++++++++-
source3/libsmb/namequery.c | 17 ++++++++++++++---
source3/smbd/smb2_negprot.c | 3 +--
source3/smbd/smb2_sesssetup.c | 4 +---
source3/utils/nmblookup.c | 9 +++++++++
6 files changed, 51 insertions(+), 9 deletions(-)
Changeset truncated at 500 lines:
diff --git a/libcli/nbt/tools/nmblookup.c b/libcli/nbt/tools/nmblookup.c
index 9b875b0..afb81c7 100644
--- a/libcli/nbt/tools/nmblookup.c
+++ b/libcli/nbt/tools/nmblookup.c
@@ -32,6 +32,10 @@
#include "../libcli/nbt/libnbt.h"
#include "param/param.h"
+#include <string.h>
+
+#define MAX_NETBIOSNAME_LEN 16
+
/* command line options */
static struct {
const char *broadcast_address;
@@ -190,6 +194,7 @@ static bool process_one(struct loadparm_context *lp_ctx, struct tevent_context *
struct socket_address *all_zero_addr;
struct nbt_name_socket *nbtsock;
NTSTATUS status = NT_STATUS_OK;
+ size_t nbt_len;
bool ret = true;
if (!options.case_sensitive) {
@@ -212,6 +217,14 @@ static bool process_one(struct loadparm_context *lp_ctx, struct tevent_context *
node_name = talloc_strdup(tmp_ctx, name);
}
+ nbt_len = strlen(node_name);
+ if (nbt_len > MAX_NETBIOSNAME_LEN - 1) {
+ printf("The specified netbios name [%s] is too long.\n",
+ node_name);
+ talloc_free(tmp_ctx);
+ return false;
+ }
+
nbtsock = nbt_name_socket_init(tmp_ctx, ev);
if (options.root_port) {
diff --git a/nsswitch/wins.c b/nsswitch/wins.c
index d63968b..5127ee4 100644
--- a/nsswitch/wins.c
+++ b/nsswitch/wins.c
@@ -59,10 +59,12 @@ static void nss_wins_init(void)
static struct in_addr *lookup_byname_backend(const char *name, int *count)
{
- TALLOC_CTX *frame = talloc_stackframe();
+ TALLOC_CTX *frame;
struct sockaddr_storage *address = NULL;
struct in_addr *ret = NULL;
NTSTATUS status;
+ const char *p;
+ size_t nbt_len;
int j;
if (!initialised) {
@@ -71,6 +73,16 @@ static struct in_addr *lookup_byname_backend(const char *name, int *count)
*count = 0;
+ nbt_len = strlen(name);
+ if (nbt_len > MAX_NETBIOSNAME_LEN - 1) {
+ return NULL;
+ }
+ p = strchr(name, '.');
+ if (p != NULL) {
+ return NULL;
+ }
+
+ frame = talloc_stackframe();
/* always try with wins first */
status = resolve_wins(name, 0x00, talloc_tos(),
&address, count);
diff --git a/source3/libsmb/namequery.c b/source3/libsmb/namequery.c
index c80e255..85af6ed 100644
--- a/source3/libsmb/namequery.c
+++ b/source3/libsmb/namequery.c
@@ -2566,6 +2566,8 @@ NTSTATUS internal_resolve_name(const char *name,
NTSTATUS status = NT_STATUS_UNSUCCESSFUL;
int i;
TALLOC_CTX *frame = NULL;
+ bool do_nbt_lookup = true;
+ size_t nbt_len;
*return_iplist = NULL;
*return_count = 0;
@@ -2626,6 +2628,15 @@ NTSTATUS internal_resolve_name(const char *name,
}
/* iterate through the name resolution backends */
+ nbt_len = strlen(name);
+ if (nbt_len > MAX_NETBIOSNAME_LEN - 1) {
+ do_nbt_lookup = false;
+ } else {
+ const char *p = strchr(name, '.');
+ if (p != NULL) {
+ do_nbt_lookup = false;
+ }
+ }
frame = talloc_stackframe();
for (i=0; resolve_order[i]; i++) {
@@ -2656,13 +2667,13 @@ NTSTATUS internal_resolve_name(const char *name,
if (NT_STATUS_IS_OK(status)) {
goto done;
}
- } else if(strequal( tok, "lmhosts")) {
+ } else if (do_nbt_lookup && strequal(tok, "lmhosts")) {
status = resolve_lmhosts(name, name_type,
return_iplist, return_count);
if (NT_STATUS_IS_OK(status)) {
goto done;
}
- } else if(strequal( tok, "wins")) {
+ } else if (do_nbt_lookup && strequal(tok, "wins")) {
/* don't resolve 1D via WINS */
struct sockaddr_storage *ss_list;
if (name_type != 0x1D) {
@@ -2679,7 +2690,7 @@ NTSTATUS internal_resolve_name(const char *name,
goto done;
}
}
- } else if(strequal( tok, "bcast")) {
+ } else if (do_nbt_lookup && strequal(tok, "bcast")) {
struct sockaddr_storage *ss_list;
status = name_resolve_bcast(
name, name_type, talloc_tos(),
diff --git a/source3/smbd/smb2_negprot.c b/source3/smbd/smb2_negprot.c
index 02f6882..9a1ca9c 100644
--- a/source3/smbd/smb2_negprot.c
+++ b/source3/smbd/smb2_negprot.c
@@ -221,8 +221,7 @@ NTSTATUS smbd_smb2_request_process_negprot(struct smbd_smb2_request *req)
}
security_mode = SMB2_NEGOTIATE_SIGNING_ENABLED;
- if (lp_server_signing() == SMB_SIGNING_REQUIRED ||
- (in_security_mode & SMB2_NEGOTIATE_SIGNING_REQUIRED)) {
+ if (lp_server_signing() == SMB_SIGNING_REQUIRED) {
security_mode |= SMB2_NEGOTIATE_SIGNING_REQUIRED;
}
diff --git a/source3/smbd/smb2_sesssetup.c b/source3/smbd/smb2_sesssetup.c
index f918328..2f58e44 100644
--- a/source3/smbd/smb2_sesssetup.c
+++ b/source3/smbd/smb2_sesssetup.c
@@ -186,9 +186,7 @@ static NTSTATUS smbd_smb2_auth_generic_return(struct smbXsrv_session *session,
struct smbXsrv_connection *xconn = smb2req->xconn;
if ((in_security_mode & SMB2_NEGOTIATE_SIGNING_REQUIRED) ||
- lp_server_signing() == SMB_SIGNING_REQUIRED ||
- (xconn->smb2.server.security_mode &
- SMB2_NEGOTIATE_SIGNING_REQUIRED)) {
+ lp_server_signing() == SMB_SIGNING_REQUIRED) {
x->global->signing_required = true;
}
diff --git a/source3/utils/nmblookup.c b/source3/utils/nmblookup.c
index 78548e9..a119b3e 100644
--- a/source3/utils/nmblookup.c
+++ b/source3/utils/nmblookup.c
@@ -320,6 +320,7 @@ int main(int argc, const char *argv[])
while(poptPeekArg(pc)) {
char *p;
struct in_addr ip;
+ size_t nbt_len;
fstrcpy(lookup,poptGetArg(pc));
@@ -349,6 +350,14 @@ int main(int argc, const char *argv[])
sscanf(++p,"%x",&lookup_type);
}
+ nbt_len = strlen(lookup);
+ if (nbt_len > MAX_NETBIOSNAME_LEN - 1) {
+ d_printf("The specified netbios name [%s] is too long!\n",
+ lookup);
+ continue;
+ }
+
+
if (!query_one(lookup, lookup_type)) {
rc = 1;
d_printf( "name_query failed to find name %s", lookup );
--
Samba Shared Repository
More information about the samba-cvs
mailing list