[PATCH] Help debugging SMB2 and SMB2 credits
Jeremy Allison
jra at samba.org
Wed Mar 21 20:21:38 UTC 2018
On Wed, Mar 21, 2018 at 01:09:43PM -0700, Jeremy Allison wrote:
> Hi all,
>
> I am helping out a vendor who is having SMB2 crediting
> issues (don't ask :-). One of the problems is that they
> are flooded with debug level 10 logs trying to get the
> data showing what the client is doing.
>
> It turns out it wasn't too hard to add 2 new debug classes
> that I think will be generally useful for all vendors.
>
> So here is a small patchset that adds 2 new debug
> classes, "smb2" and "smb2_credits", and marks the
> relevent files/debug statements with them. This allows
> the vendor to debug these issues separately.
>
> Reviews welcome. Do we want this for 4.8.next ?
> If so I'll log a bug report and back-port once
> it's gone in (with bugID attached of course).
>
> Cheers,
>
> Jeremy.
Updated version (I'd missed the debug statements
in smbd_smb2_request_verify_creditcharge(), they're
now tagged correctly as DBGC_SMB2_CREDITS).
Thanks,
Jeremy.
-------------- next part --------------
From f658e7c17786810cc621cd3afb99dc49001ee0a8 Mon Sep 17 00:00:00 2001
From: Jeremy Allison <jra at samba.org>
Date: Wed, 21 Mar 2018 12:01:05 -0700
Subject: [PATCH 1/4] s3: debug: smb2: Create a new DBGC_SMB2 debug class and
mark all smbd/smb2_*.c files with it.
Will allow easier smb2-specific debugging.
Signed-off-by: Jeremy Allison <jra at samba.org>
---
lib/util/debug.c | 1 +
lib/util/debug.h | 1 +
source3/smbd/smb2_break.c | 3 +++
source3/smbd/smb2_close.c | 3 +++
source3/smbd/smb2_create.c | 3 +++
source3/smbd/smb2_flush.c | 3 +++
source3/smbd/smb2_getinfo.c | 3 +++
source3/smbd/smb2_glue.c | 3 +++
source3/smbd/smb2_ioctl.c | 3 +++
source3/smbd/smb2_ioctl_dfs.c | 3 +++
source3/smbd/smb2_ioctl_filesys.c | 3 +++
source3/smbd/smb2_ioctl_named_pipe.c | 3 +++
source3/smbd/smb2_ioctl_network_fs.c | 3 +++
source3/smbd/smb2_keepalive.c | 3 +++
source3/smbd/smb2_lock.c | 3 +++
source3/smbd/smb2_negprot.c | 3 +++
source3/smbd/smb2_notify.c | 3 +++
source3/smbd/smb2_query_directory.c | 3 +++
source3/smbd/smb2_read.c | 3 +++
source3/smbd/smb2_server.c | 3 +++
source3/smbd/smb2_sesssetup.c | 3 +++
source3/smbd/smb2_setinfo.c | 3 +++
source3/smbd/smb2_tcon.c | 3 +++
source3/smbd/smb2_write.c | 3 +++
24 files changed, 68 insertions(+)
diff --git a/lib/util/debug.c b/lib/util/debug.c
index 64285506d1b..47590403e1d 100644
--- a/lib/util/debug.c
+++ b/lib/util/debug.c
@@ -541,6 +541,7 @@ static const char *default_classname_table[] = {
[DBGC_AUTH_AUDIT_JSON] = "auth_json_audit",
[DBGC_KERBEROS] = "kerberos",
[DBGC_DRS_REPL] = "drs_repl",
+ [DBGC_SMB2] = "smb2",
};
/*
diff --git a/lib/util/debug.h b/lib/util/debug.h
index e82553aaf71..47280da1a78 100644
--- a/lib/util/debug.h
+++ b/lib/util/debug.h
@@ -93,6 +93,7 @@ bool dbghdr( int level, const char *location, const char *func);
#define DBGC_AUTH_AUDIT_JSON 25
#define DBGC_KERBEROS 26
#define DBGC_DRS_REPL 27
+#define DBGC_SMB2 28
/* So you can define DBGC_CLASS before including debug.h */
#ifndef DBGC_CLASS
diff --git a/source3/smbd/smb2_break.c b/source3/smbd/smb2_break.c
index 4c5d62e73d6..86529ed2e1f 100644
--- a/source3/smbd/smb2_break.c
+++ b/source3/smbd/smb2_break.c
@@ -26,6 +26,9 @@
#include "../lib/util/tevent_ntstatus.h"
#include "locking/leases_db.h"
+#undef DBGC_CLASS
+#define DBGC_CLASS DBGC_SMB2
+
static NTSTATUS smbd_smb2_request_process_lease_break(
struct smbd_smb2_request *req);
diff --git a/source3/smbd/smb2_close.c b/source3/smbd/smb2_close.c
index 5830228ed6f..992b52929ec 100644
--- a/source3/smbd/smb2_close.c
+++ b/source3/smbd/smb2_close.c
@@ -25,6 +25,9 @@
#include "../lib/util/tevent_ntstatus.h"
#include "lib/tevent_wait.h"
+#undef DBGC_CLASS
+#define DBGC_CLASS DBGC_SMB2
+
static struct tevent_req *smbd_smb2_close_send(TALLOC_CTX *mem_ctx,
struct tevent_context *ev,
struct smbd_smb2_request *smb2req,
diff --git a/source3/smbd/smb2_create.c b/source3/smbd/smb2_create.c
index d34a5f7d448..3f38af5dde2 100644
--- a/source3/smbd/smb2_create.c
+++ b/source3/smbd/smb2_create.c
@@ -29,6 +29,9 @@
#include "../lib/util/tevent_ntstatus.h"
#include "messages.h"
+#undef DBGC_CLASS
+#define DBGC_CLASS DBGC_SMB2
+
int map_smb2_oplock_levels_to_samba(uint8_t in_oplock_level)
{
switch(in_oplock_level) {
diff --git a/source3/smbd/smb2_flush.c b/source3/smbd/smb2_flush.c
index 51584ca876f..d1ab3a09839 100644
--- a/source3/smbd/smb2_flush.c
+++ b/source3/smbd/smb2_flush.c
@@ -24,6 +24,9 @@
#include "../libcli/smb/smb_common.h"
#include "../lib/util/tevent_ntstatus.h"
+#undef DBGC_CLASS
+#define DBGC_CLASS DBGC_SMB2
+
static struct tevent_req *smbd_smb2_flush_send(TALLOC_CTX *mem_ctx,
struct tevent_context *ev,
struct smbd_smb2_request *smb2req,
diff --git a/source3/smbd/smb2_getinfo.c b/source3/smbd/smb2_getinfo.c
index 7f44868bade..694e9f83b75 100644
--- a/source3/smbd/smb2_getinfo.c
+++ b/source3/smbd/smb2_getinfo.c
@@ -26,6 +26,9 @@
#include "trans2.h"
#include "../lib/util/tevent_ntstatus.h"
+#undef DBGC_CLASS
+#define DBGC_CLASS DBGC_SMB2
+
static struct tevent_req *smbd_smb2_getinfo_send(TALLOC_CTX *mem_ctx,
struct tevent_context *ev,
struct smbd_smb2_request *smb2req,
diff --git a/source3/smbd/smb2_glue.c b/source3/smbd/smb2_glue.c
index bf2ea5a9138..6a73ec050e2 100644
--- a/source3/smbd/smb2_glue.c
+++ b/source3/smbd/smb2_glue.c
@@ -23,6 +23,9 @@
#include "smbd/globals.h"
#include "../libcli/smb/smb_common.h"
+#undef DBGC_CLASS
+#define DBGC_CLASS DBGC_SMB2
+
struct smb_request *smbd_smb2_fake_smb_request(struct smbd_smb2_request *req)
{
struct smb_request *smbreq;
diff --git a/source3/smbd/smb2_ioctl.c b/source3/smbd/smb2_ioctl.c
index 993682ffdbb..be70e3a0912 100644
--- a/source3/smbd/smb2_ioctl.c
+++ b/source3/smbd/smb2_ioctl.c
@@ -27,6 +27,9 @@
#include "smb2_ioctl_private.h"
#include "librpc/gen_ndr/ioctl.h"
+#undef DBGC_CLASS
+#define DBGC_CLASS DBGC_SMB2
+
static struct tevent_req *smbd_smb2_ioctl_send(TALLOC_CTX *mem_ctx,
struct tevent_context *ev,
struct smbd_smb2_request *smb2req,
diff --git a/source3/smbd/smb2_ioctl_dfs.c b/source3/smbd/smb2_ioctl_dfs.c
index f4dd189f355..72893ca4237 100644
--- a/source3/smbd/smb2_ioctl_dfs.c
+++ b/source3/smbd/smb2_ioctl_dfs.c
@@ -26,6 +26,9 @@
#include "include/ntioctl.h"
#include "smb2_ioctl_private.h"
+#undef DBGC_CLASS
+#define DBGC_CLASS DBGC_SMB2
+
static NTSTATUS fsctl_dfs_get_refers(TALLOC_CTX *mem_ctx,
struct tevent_context *ev,
struct connection_struct *conn,
diff --git a/source3/smbd/smb2_ioctl_filesys.c b/source3/smbd/smb2_ioctl_filesys.c
index 79c50219643..8a9c8c64ec9 100644
--- a/source3/smbd/smb2_ioctl_filesys.c
+++ b/source3/smbd/smb2_ioctl_filesys.c
@@ -31,6 +31,9 @@
#include "librpc/gen_ndr/ndr_ioctl.h"
#include "smb2_ioctl_private.h"
+#undef DBGC_CLASS
+#define DBGC_CLASS DBGC_SMB2
+
/*
* XXX this may reduce dup_extents->byte_count so that it's less than the
* target file size.
diff --git a/source3/smbd/smb2_ioctl_named_pipe.c b/source3/smbd/smb2_ioctl_named_pipe.c
index 13c4982d640..f9e3dec049c 100644
--- a/source3/smbd/smb2_ioctl_named_pipe.c
+++ b/source3/smbd/smb2_ioctl_named_pipe.c
@@ -27,6 +27,9 @@
#include "include/ntioctl.h"
#include "smb2_ioctl_private.h"
+#undef DBGC_CLASS
+#define DBGC_CLASS DBGC_SMB2
+
static void smbd_smb2_ioctl_pipe_write_done(struct tevent_req *subreq);
static void smbd_smb2_ioctl_pipe_read_done(struct tevent_req *subreq);
diff --git a/source3/smbd/smb2_ioctl_network_fs.c b/source3/smbd/smb2_ioctl_network_fs.c
index 4006ccf3162..c0d175609ec 100644
--- a/source3/smbd/smb2_ioctl_network_fs.c
+++ b/source3/smbd/smb2_ioctl_network_fs.c
@@ -31,6 +31,9 @@
#include "smb2_ioctl_private.h"
#include "../lib/tsocket/tsocket.h"
+#undef DBGC_CLASS
+#define DBGC_CLASS DBGC_SMB2
+
static void copychunk_pack_limits(struct srv_copychunk_rsp *cc_rsp)
{
cc_rsp->chunks_written = COPYCHUNK_MAX_CHUNKS;
diff --git a/source3/smbd/smb2_keepalive.c b/source3/smbd/smb2_keepalive.c
index b16ff6bd983..fac567c1ce9 100644
--- a/source3/smbd/smb2_keepalive.c
+++ b/source3/smbd/smb2_keepalive.c
@@ -23,6 +23,9 @@
#include "smbd/globals.h"
#include "../libcli/smb/smb_common.h"
+#undef DBGC_CLASS
+#define DBGC_CLASS DBGC_SMB2
+
NTSTATUS smbd_smb2_request_process_keepalive(struct smbd_smb2_request *req)
{
DATA_BLOB outbody;
diff --git a/source3/smbd/smb2_lock.c b/source3/smbd/smb2_lock.c
index 45b833cbca6..a05470e52e4 100644
--- a/source3/smbd/smb2_lock.c
+++ b/source3/smbd/smb2_lock.c
@@ -26,6 +26,9 @@
#include "../lib/util/tevent_ntstatus.h"
#include "messages.h"
+#undef DBGC_CLASS
+#define DBGC_CLASS DBGC_SMB2
+
struct smbd_smb2_lock_element {
uint64_t offset;
uint64_t length;
diff --git a/source3/smbd/smb2_negprot.c b/source3/smbd/smb2_negprot.c
index f8133b239af..2b725f30f75 100644
--- a/source3/smbd/smb2_negprot.c
+++ b/source3/smbd/smb2_negprot.c
@@ -27,6 +27,9 @@
#include "../librpc/ndr/libndr.h"
#include "../libcli/smb/smb_signing.h"
+#undef DBGC_CLASS
+#define DBGC_CLASS DBGC_SMB2
+
extern fstring remote_proto;
/*
diff --git a/source3/smbd/smb2_notify.c b/source3/smbd/smb2_notify.c
index 573635b89d1..24241562556 100644
--- a/source3/smbd/smb2_notify.c
+++ b/source3/smbd/smb2_notify.c
@@ -25,6 +25,9 @@
#include "../libcli/smb/smb_common.h"
#include "../lib/util/tevent_ntstatus.h"
+#undef DBGC_CLASS
+#define DBGC_CLASS DBGC_SMB2
+
struct smbd_smb2_notify_state {
struct smbd_smb2_request *smb2req;
struct smb_request *smbreq;
diff --git a/source3/smbd/smb2_query_directory.c b/source3/smbd/smb2_query_directory.c
index 888473853d4..700f43e3126 100644
--- a/source3/smbd/smb2_query_directory.c
+++ b/source3/smbd/smb2_query_directory.c
@@ -26,6 +26,9 @@
#include "../lib/util/tevent_ntstatus.h"
#include "system/filesys.h"
+#undef DBGC_CLASS
+#define DBGC_CLASS DBGC_SMB2
+
static struct tevent_req *smbd_smb2_query_directory_send(TALLOC_CTX *mem_ctx,
struct tevent_context *ev,
struct smbd_smb2_request *smb2req,
diff --git a/source3/smbd/smb2_read.c b/source3/smbd/smb2_read.c
index 273c56cf352..a7d2496bc6f 100644
--- a/source3/smbd/smb2_read.c
+++ b/source3/smbd/smb2_read.c
@@ -28,6 +28,9 @@
#include "rpc_server/srv_pipe_hnd.h"
#include "lib/util/sys_rw_data.h"
+#undef DBGC_CLASS
+#define DBGC_CLASS DBGC_SMB2
+
static struct tevent_req *smbd_smb2_read_send(TALLOC_CTX *mem_ctx,
struct tevent_context *ev,
struct smbd_smb2_request *smb2req,
diff --git a/source3/smbd/smb2_server.c b/source3/smbd/smb2_server.c
index a731880e98e..c44f9cda850 100644
--- a/source3/smbd/smb2_server.c
+++ b/source3/smbd/smb2_server.c
@@ -32,6 +32,9 @@
#include "auth.h"
#include "lib/crypto/sha512.h"
+#undef DBGC_CLASS
+#define DBGC_CLASS DBGC_SMB2
+
static void smbd_smb2_connection_handler(struct tevent_context *ev,
struct tevent_fd *fde,
uint16_t flags,
diff --git a/source3/smbd/smb2_sesssetup.c b/source3/smbd/smb2_sesssetup.c
index eda538f17f6..5e1e8b4ec57 100644
--- a/source3/smbd/smb2_sesssetup.c
+++ b/source3/smbd/smb2_sesssetup.c
@@ -33,6 +33,9 @@
#include "lib/crypto/aes_ccm_128.h"
#include "lib/crypto/aes_gcm_128.h"
+#undef DBGC_CLASS
+#define DBGC_CLASS DBGC_SMB2
+
static struct tevent_req *smbd_smb2_session_setup_wrap_send(TALLOC_CTX *mem_ctx,
struct tevent_context *ev,
struct smbd_smb2_request *smb2req,
diff --git a/source3/smbd/smb2_setinfo.c b/source3/smbd/smb2_setinfo.c
index 996e4f24632..9cd4fdf9202 100644
--- a/source3/smbd/smb2_setinfo.c
+++ b/source3/smbd/smb2_setinfo.c
@@ -29,6 +29,9 @@
#include "source3/lib/dbwrap/dbwrap_watch.h"
#include "messages.h"
+#undef DBGC_CLASS
+#define DBGC_CLASS DBGC_SMB2
+
static struct tevent_req *smbd_smb2_setinfo_send(TALLOC_CTX *mem_ctx,
struct tevent_context *ev,
struct smbd_smb2_request *smb2req,
diff --git a/source3/smbd/smb2_tcon.c b/source3/smbd/smb2_tcon.c
index 914eb87aa8c..07e01cddd46 100644
--- a/source3/smbd/smb2_tcon.c
+++ b/source3/smbd/smb2_tcon.c
@@ -27,6 +27,9 @@
#include "lib/param/loadparm.h"
#include "../lib/util/tevent_ntstatus.h"
+#undef DBGC_CLASS
+#define DBGC_CLASS DBGC_SMB2
+
static struct tevent_req *smbd_smb2_tree_connect_send(TALLOC_CTX *mem_ctx,
struct tevent_context *ev,
struct smbd_smb2_request *smb2req,
diff --git a/source3/smbd/smb2_write.c b/source3/smbd/smb2_write.c
index 5657c6618d2..ee95bd317ae 100644
--- a/source3/smbd/smb2_write.c
+++ b/source3/smbd/smb2_write.c
@@ -25,6 +25,9 @@
#include "../lib/util/tevent_ntstatus.h"
#include "rpc_server/srv_pipe_hnd.h"
+#undef DBGC_CLASS
+#define DBGC_CLASS DBGC_SMB2
+
static struct tevent_req *smbd_smb2_write_send(TALLOC_CTX *mem_ctx,
struct tevent_context *ev,
struct smbd_smb2_request *smb2req,
--
2.17.0.rc0.231.g781580f067-goog
From b1de53f17725ad6d474ba8bde95f0c0a650de75a Mon Sep 17 00:00:00 2001
From: Jeremy Allison <jra at samba.org>
Date: Wed, 21 Mar 2018 12:40:50 -0700
Subject: [PATCH 2/4] lib: debug: Add DBGC_XXX versions of the macros to allow
class-specific messages.
Signed-off-by: Jeremy Allison <jra at samba.org>
---
lib/util/debug.h | 30 ++++++++++++++++++++++++++++++
1 file changed, 30 insertions(+)
diff --git a/lib/util/debug.h b/lib/util/debug.h
index 47280da1a78..1b17fad9694 100644
--- a/lib/util/debug.h
+++ b/lib/util/debug.h
@@ -217,6 +217,14 @@ extern int *DEBUGLEVEL_CLASS;
&& (dbgtext("%s: ", __func__)) \
&& (dbgtext body) )
+/* Prefix messages with the function name - class specific */
+#define DBGC_PREFIX(dbgc_class, level, body ) \
+ (void)( ((level) <= MAX_DEBUG_LEVEL) && \
+ unlikely(DEBUGLEVEL_CLASS[ dbgc_class ] >= (level)) \
+ && (dbghdrclass(level, dbgc_class, __location__, __func__ )) \
+ && (dbgtext("%s: ", __func__)) \
+ && (dbgtext body) )
+
/*
* Debug levels matching RFC 3164
*/
@@ -232,12 +240,34 @@ extern int *DEBUGLEVEL_CLASS;
#define DBG_INFO(...) DBG_PREFIX(DBGLVL_INFO, (__VA_ARGS__))
#define DBG_DEBUG(...) DBG_PREFIX(DBGLVL_DEBUG, (__VA_ARGS__))
+#define DBGC_ERR(dbgc_class, ...) DBGC_PREFIX(dbgc_class, \
+ DBGLVL_ERR, (__VA_ARGS__))
+#define DBGC_WARNING(dbgc_class, ...) DBGC_PREFIX(dbgc_class, \
+ DBGLVL_WARNING, (__VA_ARGS__))
+#define DBGC_NOTICE(dbgc_class, ...) DBGC_PREFIX(dbgc_class, \
+ DBGLVL_NOTICE, (__VA_ARGS__))
+#define DBGC_INFO(dbgc_class, ...) DBGC_PREFIX(dbgc_class, \
+ DBGLVL_INFO, (__VA_ARGS__))
+#define DBGC_DEBUG(dbgc_class, ...) DBGC_PREFIX(dbgc_class, \
+ DBGLVL_DEBUG, (__VA_ARGS__))
+
#define D_ERR(...) DEBUG(DBGLVL_ERR, (__VA_ARGS__))
#define D_WARNING(...) DEBUG(DBGLVL_WARNING, (__VA_ARGS__))
#define D_NOTICE(...) DEBUG(DBGLVL_NOTICE, (__VA_ARGS__))
#define D_INFO(...) DEBUG(DBGLVL_INFO, (__VA_ARGS__))
#define D_DEBUG(...) DEBUG(DBGLVL_DEBUG, (__VA_ARGS__))
+#define DC_ERR(...) DEBUGC(dbgc_class, \
+ DBGLVL_ERR, (__VA_ARGS__))
+#define DC_WARNING(...) DEBUGC(dbgc_class, \
+ DBGLVL_WARNING, (__VA_ARGS__))
+#define DC_NOTICE(...) DEBUGC(dbgc_class, \
+ DBGLVL_NOTICE, (__VA_ARGS__))
+#define DC_INFO(...) DEBUGC(dbgc_class, \
+ DBGLVL_INFO, (__VA_ARGS__))
+#define DC_DEBUG(...) DEBUGC(dbgc_class, \
+ DBGLVL_DEBUG, (__VA_ARGS__))
+
/* The following definitions come from lib/debug.c */
/** Possible destinations for the debug log (in order of precedence -
--
2.17.0.rc0.231.g781580f067-goog
From 8eb7bad7bc55d9eb934f2c82600b7936d4944cdb Mon Sep 17 00:00:00 2001
From: Jeremy Allison <jra at samba.org>
Date: Wed, 21 Mar 2018 12:52:49 -0700
Subject: [PATCH 3/4] s3: smbd: SMB2: Add DBGC_SMB2_CREDITS class to
specifically debug credit issues.
Signed-off-by: Jeremy Allison <jra at samba.org>
---
lib/util/debug.c | 1 +
lib/util/debug.h | 1 +
source3/smbd/smb2_server.c | 48 ++++++++++++++++++++++++--------------
3 files changed, 32 insertions(+), 18 deletions(-)
diff --git a/lib/util/debug.c b/lib/util/debug.c
index 47590403e1d..d010b724203 100644
--- a/lib/util/debug.c
+++ b/lib/util/debug.c
@@ -542,6 +542,7 @@ static const char *default_classname_table[] = {
[DBGC_KERBEROS] = "kerberos",
[DBGC_DRS_REPL] = "drs_repl",
[DBGC_SMB2] = "smb2",
+ [DBGC_SMB2_CREDITS] = "smb2_credits",
};
/*
diff --git a/lib/util/debug.h b/lib/util/debug.h
index 1b17fad9694..1e184b47de9 100644
--- a/lib/util/debug.h
+++ b/lib/util/debug.h
@@ -94,6 +94,7 @@ bool dbghdr( int level, const char *location, const char *func);
#define DBGC_KERBEROS 26
#define DBGC_DRS_REPL 27
#define DBGC_SMB2 28
+#define DBGC_SMB2_CREDITS 29
/* So you can define DBGC_CLASS before including debug.h */
#ifndef DBGC_CLASS
diff --git a/source3/smbd/smb2_server.c b/source3/smbd/smb2_server.c
index c44f9cda850..ee03a8eb0bb 100644
--- a/source3/smbd/smb2_server.c
+++ b/source3/smbd/smb2_server.c
@@ -616,34 +616,37 @@ static bool smb2_validate_sequence_number(struct smbXsrv_connection *xconn,
seq_tmp = xconn->smb2.credits.seq_low;
if (seq_id < seq_tmp) {
- DEBUG(0,("smb2_validate_sequence_number: bad message_id "
+ DBGC_ERR(DBGC_SMB2_CREDITS,
+ "smb2_validate_sequence_number: bad message_id "
"%llu (sequence id %llu) "
"(granted = %u, low = %llu, range = %u)\n",
(unsigned long long)message_id,
(unsigned long long)seq_id,
(unsigned int)xconn->smb2.credits.granted,
(unsigned long long)xconn->smb2.credits.seq_low,
- (unsigned int)xconn->smb2.credits.seq_range));
+ (unsigned int)xconn->smb2.credits.seq_range);
return false;
}
seq_tmp += xconn->smb2.credits.seq_range;
if (seq_id >= seq_tmp) {
- DEBUG(0,("smb2_validate_sequence_number: bad message_id "
+ DBGC_ERR(DBGC_SMB2_CREDITS,
+ "smb2_validate_sequence_number: bad message_id "
"%llu (sequence id %llu) "
"(granted = %u, low = %llu, range = %u)\n",
(unsigned long long)message_id,
(unsigned long long)seq_id,
(unsigned int)xconn->smb2.credits.granted,
(unsigned long long)xconn->smb2.credits.seq_low,
- (unsigned int)xconn->smb2.credits.seq_range));
+ (unsigned int)xconn->smb2.credits.seq_range);
return false;
}
offset = seq_id % xconn->smb2.credits.max;
if (bitmap_query(credits_bm, offset)) {
- DEBUG(0,("smb2_validate_sequence_number: duplicate message_id "
+ DBGC_ERR(DBGC_SMB2_CREDITS,
+ "smb2_validate_sequence_number: duplicate message_id "
"%llu (sequence id %llu) "
"(granted = %u, low = %llu, range = %u) "
"(bm offset %u)\n",
@@ -652,7 +655,7 @@ static bool smb2_validate_sequence_number(struct smbXsrv_connection *xconn,
(unsigned int)xconn->smb2.credits.granted,
(unsigned long long)xconn->smb2.credits.seq_low,
(unsigned int)xconn->smb2.credits.seq_range,
- offset));
+ offset);
return false;
}
@@ -668,10 +671,11 @@ static bool smb2_validate_sequence_number(struct smbXsrv_connection *xconn,
* already seen.
*/
while (bitmap_query(credits_bm, offset)) {
- DEBUG(10,("smb2_validate_sequence_number: clearing "
+ DBGC_DEBUG(DBGC_SMB2_CREDITS,
+ "smb2_validate_sequence_number: clearing "
"id %llu (position %u) from bitmap\n",
(unsigned long long)(xconn->smb2.credits.seq_low),
- offset));
+ offset);
bitmap_clear(credits_bm, offset);
xconn->smb2.credits.seq_low += 1;
@@ -700,7 +704,9 @@ static bool smb2_validate_message_id(struct smbXsrv_connection *xconn,
credit_charge = MAX(credit_charge, 1);
}
- DEBUG(11, ("smb2_validate_message_id: mid %llu (charge %llu), "
+ DEBUGC(11,
+ DBGC_SMB2_CREDITS,
+ ("smb2_validate_message_id: mid %llu (charge %llu), "
"credits_granted %llu, "
"seqnum low/range: %llu/%llu\n",
(unsigned long long) message_id,
@@ -710,7 +716,8 @@ static bool smb2_validate_message_id(struct smbXsrv_connection *xconn,
(unsigned long long) xconn->smb2.credits.seq_range));
if (xconn->smb2.credits.granted < credit_charge) {
- DEBUG(0, ("smb2_validate_message_id: client used more "
+ DBGC_ERR(DBGC_SMB2_CREDITS,
+ "smb2_validate_message_id: client used more "
"credits than granted, mid %llu, charge %llu, "
"credits_granted %llu, "
"seqnum low/range: %llu/%llu\n",
@@ -718,7 +725,7 @@ static bool smb2_validate_message_id(struct smbXsrv_connection *xconn,
(unsigned long long) credit_charge,
(unsigned long long) xconn->smb2.credits.granted,
(unsigned long long) xconn->smb2.credits.seq_low,
- (unsigned long long) xconn->smb2.credits.seq_range));
+ (unsigned long long) xconn->smb2.credits.seq_range);
return false;
}
@@ -734,7 +741,9 @@ static bool smb2_validate_message_id(struct smbXsrv_connection *xconn,
uint64_t id = message_id + i;
bool ok;
- DEBUG(11, ("Iterating mid %llu charge %u (sequence %llu)\n",
+ DEBUGC(11,
+ DBGC_SMB2_CREDITS,
+ ("Iterating mid %llu charge %u (sequence %llu)\n",
(unsigned long long)message_id,
credit_charge,
(unsigned long long)id));
@@ -912,7 +921,8 @@ static void smb2_set_operation_credit(struct smbXsrv_connection *xconn,
xconn->smb2.credits.granted += credits_granted;
xconn->smb2.credits.seq_range += credits_granted;
- DEBUG(10,("smb2_set_operation_credit: requested %u, charge %u, "
+ DBGC_DEBUG(DBGC_SMB2_CREDITS,
+ "smb2_set_operation_credit: requested %u, charge %u, "
"granted %u, current possible/max %u/%u, "
"total granted/max/low/range %u/%u/%llu/%u\n",
(unsigned int)credits_requested,
@@ -923,7 +933,7 @@ static void smb2_set_operation_credit(struct smbXsrv_connection *xconn,
(unsigned int)xconn->smb2.credits.granted,
(unsigned int)xconn->smb2.credits.max,
(unsigned long long)xconn->smb2.credits.seq_low,
- (unsigned int)xconn->smb2.credits.seq_range));
+ (unsigned int)xconn->smb2.credits.seq_range);
}
static void smb2_calculate_credits(const struct smbd_smb2_request *inreq,
@@ -1981,13 +1991,15 @@ NTSTATUS smbd_smb2_request_verify_creditcharge(struct smbd_smb2_request *req,
needed_charge = (data_length - 1)/ 65536 + 1;
- DEBUG(10, ("mid %llu, CreditCharge: %d, NeededCharge: %d\n",
+ DBGC_DEBUG(DBGC_SMB2_CREDITS,
+ "mid %llu, CreditCharge: %d, NeededCharge: %d\n",
(unsigned long long) BVAL(inhdr, SMB2_HDR_MESSAGE_ID),
- credit_charge, needed_charge));
+ credit_charge, needed_charge);
if (needed_charge > credit_charge) {
- DEBUG(2, ("CreditCharge too low, given %d, needed %d\n",
- credit_charge, needed_charge));
+ DBGC_WARNING(DBGC_SMB2_CREDITS,
+ "CreditCharge too low, given %d, needed %d\n",
+ credit_charge, needed_charge);
return NT_STATUS_INVALID_PARAMETER;
}
--
2.17.0.rc0.231.g781580f067-goog
From 2091f0b390a10c83e696a695083ee3cb9b0ed5db Mon Sep 17 00:00:00 2001
From: Jeremy Allison <jra at samba.org>
Date: Wed, 21 Mar 2018 12:56:12 -0700
Subject: [PATCH 4/4] s3: docs: Add documentation for "smb2" and "smb2_credits"
debug classes.
Signed-off-by: Jeremy Allison <jra at samba.org>
---
docs-xml/smbdotconf/logging/loglevel.xml | 2 ++
1 file changed, 2 insertions(+)
diff --git a/docs-xml/smbdotconf/logging/loglevel.xml b/docs-xml/smbdotconf/logging/loglevel.xml
index 1a3767d1472..d3b5c457d0c 100644
--- a/docs-xml/smbdotconf/logging/loglevel.xml
+++ b/docs-xml/smbdotconf/logging/loglevel.xml
@@ -22,6 +22,8 @@
<listitem><para><parameter moreinfo="none">printdrivers</parameter></para></listitem>
<listitem><para><parameter moreinfo="none">lanman</parameter></para></listitem>
<listitem><para><parameter moreinfo="none">smb</parameter></para></listitem>
+ <listitem><para><parameter moreinfo="none">smb2</parameter></para></listitem>
+ <listitem><para><parameter moreinfo="none">smb2_credits</parameter></para></listitem>
<listitem><para><parameter moreinfo="none">rpc_parse</parameter></para></listitem>
<listitem><para><parameter moreinfo="none">rpc_srv</parameter></para></listitem>
<listitem><para><parameter moreinfo="none">rpc_cli</parameter></para></listitem>
--
2.17.0.rc0.231.g781580f067-goog
More information about the samba-technical
mailing list