Fix bug #8293 - SMB2 doesn't rotate the log files often enough.
authorJeremy Allison <jra@samba.org>
Thu, 7 Jul 2011 21:59:41 +0000 (14:59 -0700)
committerKarolin Seeger <kseeger@samba.org>
Tue, 12 Jul 2011 19:07:41 +0000 (21:07 +0200)
Move the num_requests field out of the smb1 struct into the generic
struct smbd_server_connection struct. Use it to count SMB2 requests
as well as SMB1 and ensure that check_log_size() is called every 50
SMB2 requests.

source3/smbd/globals.h
source3/smbd/process.c
source3/smbd/smb2_server.c

index 97d75fd4137e46bb7de4e92c4ff575890b37019d..d9a54d214d8e839205997162c734a46fb90aea46 100644 (file)
@@ -483,6 +483,8 @@ struct smbd_server_connection {
                int dirhandles_open;
        } searches;
 
+       uint64_t num_requests;
+
        struct {
                struct fd_event *fde;
 
@@ -510,7 +512,6 @@ struct smbd_server_connection {
                        int ref_count;
                } echo_handler;
 
-               uint64_t num_requests;
                struct {
                        bool encrypted_passwords;
                        bool spnego;
index ea4c36bdcb55fe5eed733be7ae4da0ed6baf2003..c03ca459c0ead12bb89fa39f4b08266f3f63ce0e 100644 (file)
@@ -1689,7 +1689,7 @@ static void process_smb(struct smbd_server_connection *sconn,
        sconn->trans_num++;
 
 done:
-       sconn->smb1.num_requests++;
+       sconn->num_requests++;
 
        /* The timeout_processing function isn't run nearly
           often enough to implement 'max log size' without
@@ -1698,7 +1698,7 @@ done:
           level 10.  Checking every 50 SMBs is a nice
           tradeoff of performance vs log file size overrun. */
 
-       if ((sconn->smb1.num_requests % 50) == 0 &&
+       if ((sconn->num_requests % 50) == 0 &&
            need_to_check_log_size()) {
                change_to_root_user();
                check_log_size();
index 0944e5715656ead3cd98a025ff902ba27a196d03..416e3c1224ef7334d5c36eb9d748a6b7ccf43098 100644 (file)
@@ -2214,6 +2214,8 @@ void smbd_smb2_first_negprot(struct smbd_server_connection *sconn,
                return;
        }
        tevent_req_set_callback(subreq, smbd_smb2_request_incoming, sconn);
+
+       sconn->num_requests++;
 }
 
 static void smbd_smb2_request_incoming(struct tevent_req *subreq)
@@ -2270,4 +2272,19 @@ next:
                return;
        }
        tevent_req_set_callback(subreq, smbd_smb2_request_incoming, sconn);
+
+       sconn->num_requests++;
+
+       /* The timeout_processing function isn't run nearly
+          often enough to implement 'max log size' without
+          overrunning the size of the file by many megabytes.
+          This is especially true if we are running at debug
+          level 10.  Checking every 50 SMB2s is a nice
+          tradeoff of performance vs log file size overrun. */
+
+       if ((sconn->num_requests % 50) == 0 &&
+           need_to_check_log_size()) {
+               change_to_root_user();
+               check_log_size();
+       }
 }