[SCM] Samba Shared Repository - branch master updated
Stefan Metzmacher
metze at samba.org
Thu Jul 24 13:33:04 MDT 2014
The branch, master has been updated
via 3f6926d s3:smbd: remove unused client_get_tcp_info()
via 7ca5e83 s3:smbd: avoid using client_get_tcp_info()
via 017db6d torture: Add FSCTL_QUERY_NETWORK_INTERFACE_INFO torture test case to source4/torture/smb2/ioctl.c
via 09fb44d librpc: Add NETWORK_INTERFACE_INFO IDL data structure
via dbc1ad2 torture4: Use sizeof(char-array) instead of constant
via 1250d62 s4:torture/smb2: add smb2.session.bind1
via 720189f s4:libcli/smb2: add smb2_session_channel()
via 78e46d7 s4:libcli/smb2: remove unused 'primary' argument of smb2_session_init()
from cd95937 s3: remove stat_ex.vfs_private completely
http://gitweb.samba.org/?p=samba.git;a=shortlog;h=master
- Log -----------------------------------------------------------------
commit 3f6926d94e536d05f4efe8cb44d0da71f6f74807
Author: Stefan Metzmacher <metze at samba.org>
Date: Fri May 23 12:40:31 2014 +0200
s3:smbd: remove unused client_get_tcp_info()
Signed-off-by: Stefan Metzmacher <metze at samba.org>
Reviewed-by: Volker Lendecke <vl at samba.org>
Autobuild-User(master): Stefan Metzmacher <metze at samba.org>
Autobuild-Date(master): Thu Jul 24 21:32:17 CEST 2014 on sn-devel-104
commit 7ca5e83cad61a246aee6e415d604a97aa8729739
Author: Stefan Metzmacher <metze at samba.org>
Date: Fri May 23 12:37:14 2014 +0200
s3:smbd: avoid using client_get_tcp_info()
We already have the required information as stack variable
in the current function. There's no need to call get[peer|sock]name()
twice.
Signed-off-by: Stefan Metzmacher <metze at samba.org>
Reviewed-by: Volker Lendecke <vl at samba.org>
commit 017db6d0f893a4169627c4e182ab84f4a6adb533
Author: Anubhav Rakshit <anubhav.rakshit at gmail.com>
Date: Wed Jun 18 22:04:14 2014 +0530
torture: Add FSCTL_QUERY_NETWORK_INTERFACE_INFO torture test case to source4/torture/smb2/ioctl.c
Pair-Programmed-With: Stefan Metzmacher <metze at samba.org>
Signed-off-by: Anubhav Rakshit <anubhav.rakshit at gmail.com>
Signed-off-by: Stefan Metzmacher <metze at samba.org>
Reviewed-by: Volker Lendecke <vl at samba.org>
commit 09fb44d1224bedee1f7a92d2bca1518ad62b3ba4
Author: Anubhav Rakshit <anubhav.rakshit at gmail.com>
Date: Mon Jun 16 15:30:18 2014 +0530
librpc: Add NETWORK_INTERFACE_INFO IDL data structure
This is in preparation for adding NETWORK_INTERFACE_INFO Ioctl smbtorture test
case. This data structure is described in MS-SMB2 Sec. 2.2.32.5
Pair-Programmed-With: Stefan Metzmacher <metze at samba.org>
Signed-off-by: Anubhav Rakshit <anubhav.rakshit at gmail.com>
Signed-off-by: Stefan Metzmacher <metze at samba.org>
Reviewed-by: Volker Lendecke <vl at samba.org>
commit dbc1ad2965b7535bb5b41a994d7188dc23d18770
Author: Volker Lendecke <vl at samba.org>
Date: Wed Jul 23 11:37:28 2014 +0000
torture4: Use sizeof(char-array) instead of constant
Signed-off-by: Volker Lendecke <vl at samba.org>
Reviewed-by: Stefan Metzmacher <metze at samba.org>
commit 1250d62f696b7209d605f51e7b047ea1e2ea7dc6
Author: Stefan Metzmacher <metze at samba.org>
Date: Tue Jun 24 06:40:29 2014 +0200
s4:torture/smb2: add smb2.session.bind1
This is a very simple multi-channel test
Signed-off-by: Stefan Metzmacher <metze at samba.org>
Reviewed-by: Volker Lendecke <vl at samba.org>
commit 720189f246c33c763882731e626c5b0fe558d0f9
Author: Stefan Metzmacher <metze at samba.org>
Date: Tue Jun 24 00:22:30 2014 +0200
s4:libcli/smb2: add smb2_session_channel()
Signed-off-by: Stefan Metzmacher <metze at samba.org>
Reviewed-by: Volker Lendecke <vl at samba.org>
commit 78e46d7349b5839993c001a5afc2060a48244d15
Author: Stefan Metzmacher <metze at samba.org>
Date: Thu Jul 10 08:21:22 2014 +0200
s4:libcli/smb2: remove unused 'primary' argument of smb2_session_init()
This also gets rid of a talloc_reference() usage.
Signed-off-by: Stefan Metzmacher <metze at samba.org>
Reviewed-by: Volker Lendecke <vl at samba.org>
-----------------------------------------------------------------------
Summary of changes:
librpc/idl/ioctl.idl | 45 ++++++++++++
librpc/ndr/ndr_ioctl.c | 40 ++++++++++
librpc/wscript_build | 2 +-
source3/smbd/process.c | 57 +++++----------
source4/libcli/smb2/connect.c | 2 +-
source4/libcli/smb2/session.c | 91 +++++++++++++++++++----
source4/libcli/smb2/smb2.h | 1 +
source4/torture/smb2/ioctl.c | 47 ++++++++++++
source4/torture/smb2/session.c | 154 +++++++++++++++++++++++++++++++++++++---
source4/torture/smb2/util.c | 2 +-
10 files changed, 371 insertions(+), 70 deletions(-)
create mode 100644 librpc/ndr/ndr_ioctl.c
Changeset truncated at 500 lines:
diff --git a/librpc/idl/ioctl.idl b/librpc/idl/ioctl.idl
index b4485e0..a0a9950 100644
--- a/librpc/idl/ioctl.idl
+++ b/librpc/idl/ioctl.idl
@@ -99,3 +99,48 @@ interface compression
uint16 format;
} compression_state;
}
+
+interface netinterface
+{
+ typedef [bitmap32bit] bitmap {
+ FSCTL_NET_IFACE_RSS_CAPABLE = 0x00000001,
+ FSCTL_NET_IFACE_RDMA_CAPABLE = 0x00000002
+ } fsctl_net_iface_capability;
+
+ typedef [enum16bit] enum {
+ FSCTL_NET_IFACE_AF_INET = 0x0002,
+ FSCTL_NET_IFACE_AF_INET6 = 0x0017
+ } fsctl_sockaddr_af;
+
+ typedef [flag(NDR_NOALIGN)] struct {
+ [value(0)] uint16 port;
+ [flag(NDR_BIG_ENDIAN)] ipv4address ipv4;
+ [value(0)] hyper reserved;
+ } fsctl_sockaddr_in;
+
+ typedef [flag(NDR_NOALIGN)] struct {
+ [value(0)] uint16 port;
+ [value(0)] uint32 flowinfo;
+ [flag(NDR_BIG_ENDIAN)] ipv6address ipv6;
+ [value(0)] uint32 scopeid;
+ } fsctl_sockaddr_in6;
+
+ typedef [nodiscriminant,flag(NDR_NOALIGN)] union {
+ [case (FSCTL_NET_IFACE_AF_INET)] fsctl_sockaddr_in saddr_in;
+ [case (FSCTL_NET_IFACE_AF_INET6)] fsctl_sockaddr_in6 saddr_in6;
+ } fsctl_sockaddr_union;
+
+ typedef [flag(NDR_NOALIGN)] struct {
+ fsctl_sockaddr_af family;
+ [subcontext(0),subcontext_size(126),switch_is(family)] fsctl_sockaddr_union saddr;
+ } fsctl_sockaddr_storage;
+
+ typedef [public,relative_base,noprint] struct {
+ [relative] fsctl_net_iface_info *next;
+ uint32 ifindex;
+ fsctl_net_iface_capability capability;
+ [value(0)] uint32 reserved;
+ hyper linkspeed;
+ fsctl_sockaddr_storage sockaddr;
+ } fsctl_net_iface_info;
+}
diff --git a/librpc/ndr/ndr_ioctl.c b/librpc/ndr/ndr_ioctl.c
new file mode 100644
index 0000000..7e76abc
--- /dev/null
+++ b/librpc/ndr/ndr_ioctl.c
@@ -0,0 +1,40 @@
+/*
+ Unix SMB/CIFS implementation.
+
+ Manually parsed structures for IOCTL/FSCTL
+
+ Copyright (C) Stefan Metzmacher 2014
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#include "includes.h"
+#include "librpc/gen_ndr/ndr_ioctl.h"
+
+_PUBLIC_ void ndr_print_fsctl_net_iface_info(struct ndr_print *ndr, const char *name, const struct fsctl_net_iface_info *r)
+{
+ ndr_print_struct(ndr, name, "fsctl_net_iface_info");
+ if (r == NULL) { ndr_print_null(ndr); return; }
+ ndr->depth++;
+ ndr_print_ptr(ndr, "next", r->next);
+ ndr_print_uint32(ndr, "ifindex", r->ifindex);
+ ndr_print_fsctl_net_iface_capability(ndr, "capability", r->capability);
+ ndr_print_uint32(ndr, "reserved", (ndr->flags & LIBNDR_PRINT_SET_VALUES)?0:r->reserved);
+ ndr_print_hyper(ndr, "linkspeed", r->linkspeed);
+ ndr_print_fsctl_sockaddr_storage(ndr, "sockaddr", &r->sockaddr);
+ ndr->depth--;
+ if (r->next) {
+ ndr_print_fsctl_net_iface_info(ndr, "next", r->next);
+ }
+}
diff --git a/librpc/wscript_build b/librpc/wscript_build
index b21619e..0a60b62 100644
--- a/librpc/wscript_build
+++ b/librpc/wscript_build
@@ -616,7 +616,7 @@ bld.SAMBA_SUBSYSTEM('RPC_NDR_DNSSERVER',
)
bld.SAMBA_SUBSYSTEM('NDR_IOCTL',
- source='gen_ndr/ndr_ioctl.c',
+ source='gen_ndr/ndr_ioctl.c ndr/ndr_ioctl.c',
public_deps='ndr'
)
diff --git a/source3/smbd/process.c b/source3/smbd/process.c
index dd931e0..127bbb3 100644
--- a/source3/smbd/process.c
+++ b/source3/smbd/process.c
@@ -2670,21 +2670,6 @@ static NTSTATUS smbd_register_ips(struct smbd_server_connection *sconn,
return ctdbd_register_ips(cconn, srv, clnt, release_ip, state);
}
-static int client_get_tcp_info(int sock, struct sockaddr_storage *server,
- struct sockaddr_storage *client)
-{
- socklen_t length;
- length = sizeof(*server);
- if (getsockname(sock, (struct sockaddr *)server, &length) != 0) {
- return -1;
- }
- length = sizeof(*client);
- if (getpeername(sock, (struct sockaddr *)client, &length) != 0) {
- return -1;
- }
- return 0;
-}
-
static void msg_kill_client_ip(struct messaging_context *msg_ctx,
void *private_data, uint32_t msg_type,
struct server_id server_id, DATA_BLOB *data)
@@ -3512,8 +3497,12 @@ void smbd_process(struct tevent_context *ev_ctx,
TALLOC_CTX *frame = talloc_stackframe();
struct smbXsrv_connection *conn;
struct smbd_server_connection *sconn;
- struct sockaddr_storage ss;
- struct sockaddr *sa = NULL;
+ struct sockaddr_storage ss_srv;
+ void *sp_srv = (void *)&ss_srv;
+ struct sockaddr *sa_srv = (struct sockaddr *)sp_srv;
+ struct sockaddr_storage ss_clnt;
+ void *sp_clnt = (void *)&ss_clnt;
+ struct sockaddr *sa_clnt = (struct sockaddr *)sp_clnt;
socklen_t sa_socklen;
struct tsocket_address *local_address = NULL;
struct tsocket_address *remote_address = NULL;
@@ -3580,16 +3569,15 @@ void smbd_process(struct tevent_context *ev_ctx,
set_socket_options(sconn->sock, "SO_KEEPALIVE");
set_socket_options(sconn->sock, lp_socket_options());
- sa = (struct sockaddr *)(void *)&ss;
- sa_socklen = sizeof(ss);
- ret = getpeername(sconn->sock, sa, &sa_socklen);
+ sa_socklen = sizeof(ss_clnt);
+ ret = getpeername(sock_fd, sa_clnt, &sa_socklen);
if (ret != 0) {
int level = (errno == ENOTCONN)?2:0;
DEBUG(level,("getpeername() failed - %s\n", strerror(errno)));
exit_server_cleanly("getpeername() failed.\n");
}
ret = tsocket_address_bsd_from_sockaddr(sconn,
- sa, sa_socklen,
+ sa_clnt, sa_socklen,
&remote_address);
if (ret != 0) {
DEBUG(0,("%s: tsocket_address_bsd_from_sockaddr remote failed - %s\n",
@@ -3597,16 +3585,15 @@ void smbd_process(struct tevent_context *ev_ctx,
exit_server_cleanly("tsocket_address_bsd_from_sockaddr remote failed.\n");
}
- sa = (struct sockaddr *)(void *)&ss;
- sa_socklen = sizeof(ss);
- ret = getsockname(sconn->sock, sa, &sa_socklen);
+ sa_socklen = sizeof(ss_srv);
+ ret = getsockname(sock_fd, sa_srv, &sa_socklen);
if (ret != 0) {
int level = (errno == ENOTCONN)?2:0;
DEBUG(level,("getsockname() failed - %s\n", strerror(errno)));
exit_server_cleanly("getsockname() failed.\n");
}
ret = tsocket_address_bsd_from_sockaddr(sconn,
- sa, sa_socklen,
+ sa_srv, sa_socklen,
&local_address);
if (ret != 0) {
DEBUG(0,("%s: tsocket_address_bsd_from_sockaddr remote failed - %s\n",
@@ -3792,22 +3779,12 @@ void smbd_process(struct tevent_context *ev_ctx,
* tickle acks, triggering a reconnection by the
* client.
*/
+ NTSTATUS status;
- struct sockaddr_storage srv, clnt;
-
- if (client_get_tcp_info(sconn->sock, &srv, &clnt) == 0) {
- NTSTATUS status;
- status = smbd_register_ips(sconn, &srv, &clnt);
- if (!NT_STATUS_IS_OK(status)) {
- DEBUG(0, ("ctdbd_register_ips failed: %s\n",
- nt_errstr(status)));
- }
- } else {
- int level = (errno == ENOTCONN)?2:0;
- DEBUG(level,("Unable to get tcp info for "
- "smbd_register_ips: %s\n",
- strerror(errno)));
- exit_server_cleanly("client_get_tcp_info() failed.\n");
+ status = smbd_register_ips(sconn, &ss_srv, &ss_clnt);
+ if (!NT_STATUS_IS_OK(status)) {
+ DEBUG(0, ("ctdbd_register_ips failed: %s\n",
+ nt_errstr(status)));
}
}
diff --git a/source4/libcli/smb2/connect.c b/source4/libcli/smb2/connect.c
index 18977d8..7a69b3e 100644
--- a/source4/libcli/smb2/connect.c
+++ b/source4/libcli/smb2/connect.c
@@ -172,7 +172,7 @@ static void smb2_connect_negprot_done(struct tevent_req *subreq)
/* This is a hack... */
smb2cli_conn_set_max_credits(transport->conn, 30);
- state->session = smb2_session_init(transport, state->gensec_settings, state, true);
+ state->session = smb2_session_init(transport, state->gensec_settings, state);
if (tevent_req_nomem(state->session, req)) {
return;
}
diff --git a/source4/libcli/smb2/session.c b/source4/libcli/smb2/session.c
index dfc607e..9ab96a3 100644
--- a/source4/libcli/smb2/session.c
+++ b/source4/libcli/smb2/session.c
@@ -36,7 +36,7 @@
*/
struct smb2_session *smb2_session_init(struct smb2_transport *transport,
struct gensec_settings *settings,
- TALLOC_CTX *parent_ctx, bool primary)
+ TALLOC_CTX *parent_ctx)
{
struct smb2_session *session;
NTSTATUS status;
@@ -45,11 +45,7 @@ struct smb2_session *smb2_session_init(struct smb2_transport *transport,
if (!session) {
return NULL;
}
- if (primary) {
- session->transport = talloc_steal(session, transport);
- } else {
- session->transport = talloc_reference(session, transport);
- }
+ session->transport = talloc_steal(session, transport);
session->smbXcli = smbXcli_session_create(session, transport->conn);
if (session->smbXcli == NULL) {
@@ -70,11 +66,54 @@ struct smb2_session *smb2_session_init(struct smb2_transport *transport,
return session;
}
+/*
+ * Note: that the caller needs to keep 'transport' around as
+ * long as the returned session is active!
+ */
+struct smb2_session *smb2_session_channel(struct smb2_transport *transport,
+ struct gensec_settings *settings,
+ TALLOC_CTX *parent_ctx,
+ struct smb2_session *base_session)
+{
+ struct smb2_session *session;
+ NTSTATUS status;
+
+ session = talloc_zero(parent_ctx, struct smb2_session);
+ if (!session) {
+ return NULL;
+ }
+ session->transport = transport;
+
+ status = smb2cli_session_create_channel(session,
+ base_session->smbXcli,
+ transport->conn,
+ &session->smbXcli);
+ if (!NT_STATUS_IS_OK(status)) {
+ talloc_free(session);
+ return NULL;
+ }
+
+ session->needs_bind = true;
+
+ /* prepare a gensec context for later use */
+ status = gensec_client_start(session, &session->gensec,
+ settings);
+ if (!NT_STATUS_IS_OK(status)) {
+ talloc_free(session);
+ return NULL;
+ }
+
+ gensec_want_feature(session->gensec, GENSEC_FEATURE_SESSION_KEY);
+
+ return session;
+}
+
struct smb2_session_setup_spnego_state {
struct tevent_context *ev;
struct smb2_session *session;
struct cli_credentials *credentials;
uint64_t previous_session_id;
+ bool session_bind;
bool reauth;
NTSTATUS gensec_status;
DATA_BLOB in_secblob;
@@ -102,6 +141,7 @@ struct tevent_req *smb2_session_setup_spnego_send(
const DATA_BLOB *server_gss_blob;
DATA_BLOB negprot_secblob = data_blob_null;
uint32_t timeout_msec;
+ uint8_t in_flags = 0;
timeout_msec = session->transport->options.request_timeout * 1000;
@@ -116,10 +156,11 @@ struct tevent_req *smb2_session_setup_spnego_send(
state->previous_session_id = previous_session_id;
current_session_id = smb2cli_session_current_id(state->session->smbXcli);
- if (current_session_id != 0) {
+ if (state->session->needs_bind) {
+ state->session_bind = true;
+ } else if (current_session_id != 0) {
state->reauth = true;
}
-
server_gss_blob = smbXcli_conn_server_gss_blob(session->transport->conn);
if (server_gss_blob) {
negprot_secblob = *server_gss_blob;
@@ -162,11 +203,15 @@ struct tevent_req *smb2_session_setup_spnego_send(
}
state->gensec_status = status;
+ if (state->session_bind) {
+ in_flags |= SMB2_SESSION_FLAG_BINDING;
+ }
+
subreq = smb2cli_session_setup_send(state, state->ev,
session->transport->conn,
timeout_msec,
session->smbXcli,
- 0, /* in_flags */
+ in_flags,
0, /* in_capabilities */
0, /* in_channel */
state->previous_session_id,
@@ -195,6 +240,7 @@ static void smb2_session_setup_spnego_done(struct tevent_req *subreq)
NTSTATUS status;
struct iovec *recv_iov;
uint32_t timeout_msec;
+ uint8_t in_flags = 0;
timeout_msec = session->transport->options.request_timeout * 1000;
@@ -250,22 +296,35 @@ static void smb2_session_setup_spnego_done(struct tevent_req *subreq)
return;
}
- status = smb2cli_session_set_session_key(session->smbXcli,
- session_key,
- recv_iov);
- if (tevent_req_nterror(req, status)) {
- return;
+ if (state->session_bind) {
+ status = smb2cli_session_set_channel_key(session->smbXcli,
+ session_key,
+ recv_iov);
+ if (tevent_req_nterror(req, status)) {
+ return;
+ }
+ session->needs_bind = false;
+ } else {
+ status = smb2cli_session_set_session_key(session->smbXcli,
+ session_key,
+ recv_iov);
+ if (tevent_req_nterror(req, status)) {
+ return;
+ }
}
-
tevent_req_done(req);
return;
}
+ if (state->session_bind) {
+ in_flags |= SMB2_SESSION_FLAG_BINDING;
+ }
+
subreq = smb2cli_session_setup_send(state, state->ev,
session->transport->conn,
timeout_msec,
session->smbXcli,
- 0, /* in_flags */
+ in_flags,
0, /* in_capabilities */
0, /* in_channel */
state->previous_session_id,
diff --git a/source4/libcli/smb2/smb2.h b/source4/libcli/smb2/smb2.h
index 101ef73..73e117a 100644
--- a/source4/libcli/smb2/smb2.h
+++ b/source4/libcli/smb2/smb2.h
@@ -116,6 +116,7 @@ struct smb2_session {
struct smb2_transport *transport;
struct gensec_security *gensec;
struct smbXcli_session *smbXcli;
+ bool needs_bind;
};
diff --git a/source4/torture/smb2/ioctl.c b/source4/torture/smb2/ioctl.c
index 3ccd1d0..053a7c8 100644
--- a/source4/torture/smb2/ioctl.c
+++ b/source4/torture/smb2/ioctl.c
@@ -25,6 +25,7 @@
#include "libcli/smb2/smb2_calls.h"
#include "torture/torture.h"
#include "torture/smb2/proto.h"
+#include "../libcli/smb/smbXcli_base.h"
#include "librpc/gen_ndr/ndr_ioctl.h"
#define FNAME "testfsctl.dat"
@@ -2413,6 +2414,49 @@ static bool test_ioctl_compress_perms(struct torture_context *torture,
}
/*
+ basic testing of the SMB2 FSCTL_QUERY_NETWORK_INTERFACE_INFO ioctl
+*/
+static bool test_ioctl_network_interface_info(struct torture_context *torture,
+ struct smb2_tree *tree)
+{
+ union smb_ioctl ioctl;
+ struct smb2_handle fh;
+ NTSTATUS status;
+ TALLOC_CTX *tmp_ctx = talloc_new(tree);
+ struct fsctl_net_iface_info net_iface;
+ enum ndr_err_code ndr_ret;
+ uint32_t caps;
+
+ caps = smb2cli_conn_server_capabilities(tree->session->transport->conn);
+ if (!(caps & SMB2_CAP_MULTI_CHANNEL)) {
+ torture_skip(torture, "server doesn't support SMB2_CAP_MULTI_CHANNEL\n");
+ }
+
+ ZERO_STRUCT(ioctl);
+ ioctl.smb2.level = RAW_IOCTL_SMB2;
+ fh.data[0] = UINT64_MAX;
+ fh.data[1] = UINT64_MAX;
+ ioctl.smb2.in.file.handle = fh;
+ ioctl.smb2.in.function = FSCTL_QUERY_NETWORK_INTERFACE_INFO;
+ ioctl.smb2.in.max_response_size = 0x10000; /* Windows client sets this to 64KiB */
+ ioctl.smb2.in.flags = SMB2_IOCTL_FLAG_IS_FSCTL;
+
+ status = smb2_ioctl(tree, tmp_ctx, &ioctl.smb2);
+ torture_assert_ntstatus_ok(torture, status, "FSCTL_QUERY_NETWORK_INTERFACE_INFO");
+
+ ndr_ret = ndr_pull_struct_blob(&ioctl.smb2.out.out, tmp_ctx, &net_iface,
+ (ndr_pull_flags_fn_t)ndr_pull_fsctl_net_iface_info);
+ torture_assert_ndr_success(torture, ndr_ret,
+ "ndr_pull_fsctl_net_iface_info");
+
+ ndr_print_debug((ndr_print_fn_t)ndr_print_fsctl_net_iface_info
+ , "Network Interface Info", &net_iface);
+
+ talloc_free(tmp_ctx);
+ return true;
+}
+
+/*
basic testing of SMB2 ioctls
*/
struct torture_suite *torture_smb2_ioctl_init(void)
@@ -2477,6 +2521,9 @@ struct torture_suite *torture_smb2_ioctl_init(void)
test_ioctl_compress_set_file_attr);
torture_suite_add_1smb2_test(suite, "compress_perms",
test_ioctl_compress_perms);
+ torture_suite_add_1smb2_test(suite, "network_interface_info",
+ test_ioctl_network_interface_info);
+
suite->description = talloc_strdup(suite, "SMB2-IOCTL tests");
diff --git a/source4/torture/smb2/session.c b/source4/torture/smb2/session.c
index 2b90c3f..ee51d55 100644
--- a/source4/torture/smb2/session.c
+++ b/source4/torture/smb2/session.c
@@ -75,7 +75,7 @@ bool test_session_reconnect1(struct torture_context *tctx, struct smb2_tree *tre
union smb_fileinfo qfinfo;
/* Add some random component to the file name. */
- snprintf(fname, 256, "session_reconnect_%s.dat",
+ snprintf(fname, sizeof(fname), "session_reconnect_%s.dat",
generate_random_str(tctx, 8));
--
Samba Shared Repository
More information about the samba-cvs
mailing list