s3:smbd: move sconn->smb1.sessions.* to xconn->smb1.sessions.*
authorStefan Metzmacher <metze@samba.org>
Wed, 21 May 2014 08:56:26 +0000 (10:56 +0200)
committerMichael Adam <obnox@samba.org>
Wed, 6 Aug 2014 07:51:11 +0000 (09:51 +0200)
This prepares the structures for multi-channel support.

Signed-off-by: Stefan Metzmacher <metze@samba.org>
Reviewed-by: Volker Lendecke <vl@samba.org>
Reviewed-by: Michael Adam <obnox@samba.org>
source3/smbd/globals.h
source3/smbd/ipc.c
source3/smbd/nttrans.c
source3/smbd/process.c
source3/smbd/reply.c
source3/smbd/sesssetup.c
source3/smbd/trans2.c

index 625bff690b93e71b3cc835ec844f9be206542724..e077133d25d06032eb7a4b4d6e5434461ef670ac 100644 (file)
@@ -365,6 +365,16 @@ struct smbXsrv_connection {
                         */
                        int max_recv;
                } negprot;
+
+               struct {
+                       bool done_sesssetup;
+                       /*
+                        * Size of data we can send to client. Set
+                        *  by the client for all protocols above CORE.
+                        *  Set by us for CORE protocol.
+                        */
+                       int max_send;
+               } sessions;
        } smb1;
        struct {
                struct {
@@ -754,15 +764,6 @@ struct smbd_server_connection {
                        uint32_t client_cap_high;
                } unix_info;
 
-               struct {
-                       bool done_sesssetup;
-                       /*
-                        * Size of data we can send to client. Set
-                        *  by the client for all protocols above CORE.
-                        *  Set by us for CORE protocol.
-                        */
-                       int max_send;
-               } sessions;
                struct smb_signing_state *signing_state;
 
                struct notify_mid_map *notify_mid_maps;
index dbb259cedc2b1f52bee6dda668af8c7630f4c888..1c8033d6fa9759ed9a2f3837989285b2907940ce 100644 (file)
@@ -108,7 +108,8 @@ void send_trans_reply(connection_struct *conn,
        int ldata  = rdata  ? rdata_len : 0;
        int lparam = rparam ? rparam_len : 0;
        struct smbd_server_connection *sconn = req->sconn;
-       int max_send = sconn->smb1.sessions.max_send;
+       struct smbXsrv_connection *xconn = sconn->conn;
+       int max_send = xconn->smb1.sessions.max_send;
        /* HACK: make sure we send at least 128 byte in one go */
        int hdr_overhead = SMB_BUFFER_SIZE_MIN - 128;
 
index bca4cd8ab54df7baa4f078adfe93e59b47e32afc..018a89db7440de9c0eb4b0a2099e8b5c623dc717 100644 (file)
@@ -68,7 +68,8 @@ static void send_nt_replies(connection_struct *conn,
        int alignment_offset = 1;
        int data_alignment_offset = 0;
        struct smbd_server_connection *sconn = req->sconn;
-       int max_send = sconn->smb1.sessions.max_send;
+       struct smbXsrv_connection *xconn = sconn->conn;
+       int max_send = xconn->smb1.sessions.max_send;
 
        /*
         * If there genuinely are no parameters or data to send just send
index 3c5d025704fe18ff1f628d0d6e0b5a704755a76f..c78915723ecd9aed88b29603749b6c493463d6fc 100644 (file)
@@ -3830,8 +3830,8 @@ void smbd_process(struct tevent_context *ev_ctx,
 
        conn->smb1.negprot.max_recv = tmp;
 
-       sconn->smb1.sessions.done_sesssetup = false;
-       sconn->smb1.sessions.max_send = SMB_BUFFER_SIZE_MAX;
+       conn->smb1.sessions.done_sesssetup = false;
+       conn->smb1.sessions.max_send = SMB_BUFFER_SIZE_MAX;
 
        if (!init_dptrs(sconn)) {
                exit_server("init_dptrs() failed");
index 72f493194a022c230057d0f03b44b33c53caa8da..f15e69953a9bbd709475e131d49d60170231f314 100644 (file)
@@ -1556,6 +1556,7 @@ void reply_search(struct smb_request *req)
        bool ask_sharemode = lp_parm_bool(SNUM(conn), "smbd", "search ask sharemode", true);
        struct dptr_struct *dirptr = NULL;
        struct smbd_server_connection *sconn = req->sconn;
+       struct smbXsrv_connection *xconn = sconn->conn;
 
        START_PROFILE(SMBsearch);
 
@@ -1705,7 +1706,7 @@ void reply_search(struct smb_request *req)
        } else {
                unsigned int i;
                size_t hdr_size = ((uint8_t *)smb_buf(req->outbuf) + 3 - req->outbuf);
-               size_t available_space = sconn->smb1.sessions.max_send - hdr_size;
+               size_t available_space = xconn->smb1.sessions.max_send - hdr_size;
 
                maxentries = MIN(maxentries, available_space/DIR_STRUCT_SIZE);
 
@@ -3477,6 +3478,7 @@ void reply_lockread(struct smb_request *req)
        struct byte_range_lock *br_lck = NULL;
        char *p = NULL;
        struct smbd_server_connection *sconn = req->sconn;
+       struct smbXsrv_connection *xconn = sconn->conn;
 
        START_PROFILE(SMBlockread);
 
@@ -3531,13 +3533,13 @@ void reply_lockread(struct smb_request *req)
        /*
         * However the requested READ size IS affected by max_send. Insanity.... JRA.
         */
-       maxtoread = sconn->smb1.sessions.max_send - (smb_size + 5*2 + 3);
+       maxtoread = xconn->smb1.sessions.max_send - (smb_size + 5*2 + 3);
 
        if (numtoread > maxtoread) {
                DEBUG(0,("reply_lockread: requested read size (%u) is greater than maximum allowed (%u/%u). \
 Returning short read of maximum allowed for compatibility with Windows 2000.\n",
                        (unsigned int)numtoread, (unsigned int)maxtoread,
-                       (unsigned int)sconn->smb1.sessions.max_send));
+                       (unsigned int)xconn->smb1.sessions.max_send));
                numtoread = maxtoread;
        }
 
@@ -3586,6 +3588,7 @@ void reply_read(struct smb_request *req)
        files_struct *fsp;
        struct lock_struct lock;
        struct smbd_server_connection *sconn = req->sconn;
+       struct smbXsrv_connection *xconn = sconn->conn;
 
        START_PROFILE(SMBread);
 
@@ -3614,13 +3617,13 @@ void reply_read(struct smb_request *req)
        /*
         * The requested read size cannot be greater than max_send. JRA.
         */
-       maxtoread = sconn->smb1.sessions.max_send - (smb_size + 5*2 + 3);
+       maxtoread = xconn->smb1.sessions.max_send - (smb_size + 5*2 + 3);
 
        if (numtoread > maxtoread) {
                DEBUG(0,("reply_read: requested read size (%u) is greater than maximum allowed (%u/%u). \
 Returning short read of maximum allowed for compatibility with Windows 2000.\n",
                        (unsigned int)numtoread, (unsigned int)maxtoread,
-                       (unsigned int)sconn->smb1.sessions.max_send));
+                       (unsigned int)xconn->smb1.sessions.max_send));
                numtoread = maxtoread;
        }
 
@@ -3899,16 +3902,18 @@ nosendfile_read:
 
 static size_t calc_max_read_pdu(const struct smb_request *req)
 {
+       struct smbXsrv_connection *xconn = req->sconn->conn;
+
        if (req->sconn->conn->protocol < PROTOCOL_NT1) {
-               return req->sconn->smb1.sessions.max_send;
+               return xconn->smb1.sessions.max_send;
        }
 
        if (!lp_large_readwrite()) {
-               return req->sconn->smb1.sessions.max_send;
+               return xconn->smb1.sessions.max_send;
        }
 
        if (req_is_in_chain(req)) {
-               return req->sconn->smb1.sessions.max_send;
+               return xconn->smb1.sessions.max_send;
        }
 
        if (req->encrypted) {
@@ -3917,7 +3922,7 @@ static size_t calc_max_read_pdu(const struct smb_request *req)
                 * limit. There are padding considerations
                 * that make that tricky.
                 */
-               return req->sconn->smb1.sessions.max_send;
+               return xconn->smb1.sessions.max_send;
        }
 
        if (srv_is_signing_active(req->sconn)) {
index a908f69c78a05fc4b25460516b77b2983c8c1b5c..75da143a28d4435bcb6740748cafb112f90cd2c8 100644 (file)
@@ -132,6 +132,7 @@ static void reply_sesssetup_and_X_spnego(struct smb_request *req)
        uint64_t vuid = req->vuid;
        NTSTATUS status = NT_STATUS_OK;
        struct smbd_server_connection *sconn = req->sconn;
+       struct smbXsrv_connection *xconn = sconn->conn;
        uint16_t action = 0;
        NTTIME now = timeval_to_nttime(&req->request_time);
        struct smbXsrv_session *session = NULL;
@@ -140,7 +141,7 @@ static void reply_sesssetup_and_X_spnego(struct smb_request *req)
 
        DEBUG(3,("Doing spnego session setup\n"));
 
-       if (!sconn->smb1.sessions.done_sesssetup) {
+       if (!xconn->smb1.sessions.done_sesssetup) {
                global_client_caps = client_caps;
 
                if (!(global_client_caps & CAP_STATUS32)) {
@@ -381,13 +382,13 @@ static void reply_sesssetup_and_X_spnego(struct smb_request *req)
                        return;
                }
 
-               if (!sconn->smb1.sessions.done_sesssetup) {
+               if (!xconn->smb1.sessions.done_sesssetup) {
                        if (smb_bufsize < SMB_BUFFER_SIZE_MIN) {
                                reply_force_doserror(req, ERRSRV, ERRerror);
                                return;
                        }
-                       sconn->smb1.sessions.max_send = smb_bufsize;
-                       sconn->smb1.sessions.done_sesssetup = true;
+                       xconn->smb1.sessions.max_send = smb_bufsize;
+                       xconn->smb1.sessions.done_sesssetup = true;
                }
 
                /* current_user_info is changed on new vuid */
@@ -683,7 +684,7 @@ void reply_sesssetup_and_X(struct smb_request *req)
                const uint8_t *save_p = req->buf;
                uint16 byte_count;
 
-               if (!sconn->smb1.sessions.done_sesssetup) {
+               if (!xconn->smb1.sessions.done_sesssetup) {
                        global_client_caps = IVAL(req->vwv+11, 0);
 
                        if (!(global_client_caps & CAP_STATUS32)) {
@@ -1090,14 +1091,14 @@ void reply_sesssetup_and_X(struct smb_request *req)
        SSVAL(discard_const_p(char, req->inbuf),smb_uid,sess_vuid);
        req->vuid = sess_vuid;
 
-       if (!sconn->smb1.sessions.done_sesssetup) {
+       if (!xconn->smb1.sessions.done_sesssetup) {
                if (smb_bufsize < SMB_BUFFER_SIZE_MIN) {
                        reply_force_doserror(req, ERRSRV, ERRerror);
                        END_PROFILE(SMBsesssetupX);
                        return;
                }
-               sconn->smb1.sessions.max_send = smb_bufsize;
-               sconn->smb1.sessions.done_sesssetup = true;
+               xconn->smb1.sessions.max_send = smb_bufsize;
+               xconn->smb1.sessions.done_sesssetup = true;
        }
 
        END_PROFILE(SMBsesssetupX);
index 5304052f59ec52dc4aca0b5534e244e7d024dc8c..76e410f87b14572e5a593766066e778dbda36e01 100644 (file)
@@ -860,7 +860,8 @@ void send_trans2_replies(connection_struct *conn,
        int data_alignment_offset = 0;
        bool overflow = False;
        struct smbd_server_connection *sconn = req->sconn;
-       int max_send = sconn->smb1.sessions.max_send;
+       struct smbXsrv_connection *xconn = sconn->conn;
+       int max_send = xconn->smb1.sessions.max_send;
 
        /* Modify the data_to_send and datasize and set the error if
           we're trying to send more than max_data_bytes. We still send