diff options
author | Stefan Metzmacher <metze@samba.org> | 2014-05-21 10:56:26 +0200 |
---|---|---|
committer | Michael Adam <obnox@samba.org> | 2014-08-06 09:51:11 +0200 |
commit | 7cf7fd77f746ca3c8225c8cadfff61f9314f919c (patch) | |
tree | d44e3126981e42612f25b6a0c66cdd485cba2036 | |
parent | cd8105484c55341972ae7ef980446f99313d3cd2 (diff) | |
download | samba-7cf7fd77f746ca3c8225c8cadfff61f9314f919c.tar.gz samba-7cf7fd77f746ca3c8225c8cadfff61f9314f919c.tar.xz samba-7cf7fd77f746ca3c8225c8cadfff61f9314f919c.zip |
s3:smbd: move sconn->smb1.sessions.* to xconn->smb1.sessions.*
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>
-rw-r--r-- | source3/smbd/globals.h | 19 | ||||
-rw-r--r-- | source3/smbd/ipc.c | 3 | ||||
-rw-r--r-- | source3/smbd/nttrans.c | 3 | ||||
-rw-r--r-- | source3/smbd/process.c | 4 | ||||
-rw-r--r-- | source3/smbd/reply.c | 23 | ||||
-rw-r--r-- | source3/smbd/sesssetup.c | 17 | ||||
-rw-r--r-- | source3/smbd/trans2.c | 3 |
7 files changed, 41 insertions, 31 deletions
diff --git a/source3/smbd/globals.h b/source3/smbd/globals.h index 625bff690b..e077133d25 100644 --- a/source3/smbd/globals.h +++ b/source3/smbd/globals.h @@ -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; diff --git a/source3/smbd/ipc.c b/source3/smbd/ipc.c index dbb259cedc..1c8033d6fa 100644 --- a/source3/smbd/ipc.c +++ b/source3/smbd/ipc.c @@ -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; diff --git a/source3/smbd/nttrans.c b/source3/smbd/nttrans.c index bca4cd8ab5..018a89db74 100644 --- a/source3/smbd/nttrans.c +++ b/source3/smbd/nttrans.c @@ -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 diff --git a/source3/smbd/process.c b/source3/smbd/process.c index 3c5d025704..c78915723e 100644 --- a/source3/smbd/process.c +++ b/source3/smbd/process.c @@ -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"); diff --git a/source3/smbd/reply.c b/source3/smbd/reply.c index 72f493194a..f15e69953a 100644 --- a/source3/smbd/reply.c +++ b/source3/smbd/reply.c @@ -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)) { diff --git a/source3/smbd/sesssetup.c b/source3/smbd/sesssetup.c index a908f69c78..75da143a28 100644 --- a/source3/smbd/sesssetup.c +++ b/source3/smbd/sesssetup.c @@ -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); diff --git a/source3/smbd/trans2.c b/source3/smbd/trans2.c index 5304052f59..76e410f87b 100644 --- a/source3/smbd/trans2.c +++ b/source3/smbd/trans2.c @@ -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 |