s3:smbd: move some session specific globals to struct smbd_server_connection
authorStefan Metzmacher <metze@samba.org>
Tue, 26 May 2009 13:21:16 +0000 (15:21 +0200)
committerStefan Metzmacher <metze@samba.org>
Wed, 3 Jun 2009 15:54:37 +0000 (17:54 +0200)
metze

source3/smbd/globals.c
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 bcf01069bc46b207b2e2cdb0a7e65d952befc240..352fe3571aa670625794a561f22761b166cfaf90 100644 (file)
@@ -107,13 +107,6 @@ int num_validated_vuids = 0;
 char *my_yp_domain = NULL;
 #endif
 
-/*
- * 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 = BUFFER_SIZE;
-uint16 last_session_tag = UID_FIELD_INVALID;
 int trans_num = 0;
 pid_t mypid = 0;
 time_t last_smb_conf_reload_time = 0;
@@ -141,7 +134,6 @@ uint16_t last_flags = 0;
 struct db_context *session_db_ctx_ptr = NULL;
 
 uint32_t global_client_caps = 0;
-bool done_sesssetup = false;
 
 uint16_t fnf_handle = 257;
 
index 2b4dce7489e7c9ca58444aa380e6125b73f914cd..c538ecf64f87b03a0b5e8d5b86509ca9bf768a8d 100644 (file)
@@ -105,13 +105,6 @@ extern int num_validated_vuids;
 extern char *my_yp_domain;
 #endif
 
-/*
- * Size of data we can send to client. Set
- *  by the client for all protocols above CORE.
- *  Set by us for CORE protocol.
- */
-extern int max_send;
-extern uint16 last_session_tag;
 extern int trans_num;
 
 extern pid_t mypid;
@@ -146,7 +139,6 @@ extern uint16_t last_flags;
 extern struct db_context *session_db_ctx_ptr;
 
 extern uint32_t global_client_caps;
-extern bool done_sesssetup;
 
 extern uint16_t fnf_handle;
 
@@ -333,6 +325,16 @@ struct smbd_server_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;
+                       uint16_t last_session_tag;
+               } sessions;
                struct smb_signing_state *signing_state;
                /* List to store partial SPNEGO auth fragments. */
                struct pending_auth_data *pd_list;
index 2d5713590d8ca493d6277bd54620ebcd7695e1bf..a93fdd5ae0edbaa8bbbbc65b3414a7e8e28d9148 100644 (file)
@@ -93,6 +93,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 = smbd_server_conn;
+       int max_send = sconn->smb1.sessions.max_send;
 
        if (buffer_too_large)
                DEBUG(5,("send_trans_reply: buffer %d too large\n", ldata ));
index d6be35d29bc9cf04109772e0e59f6caa926b807c..4c216cc6bef029e87cb597b32913611b3fc27b95 100644 (file)
@@ -58,6 +58,8 @@ void send_nt_replies(connection_struct *conn,
        int params_sent_thistime, data_sent_thistime, total_sent_thistime;
        int alignment_offset = 3;
        int data_alignment_offset = 0;
+       struct smbd_server_connection *sconn = smbd_server_conn;
+       int max_send = sconn->smb1.sessions.max_send;
 
        /*
         * If there genuinely are no parameters or data to send just send
index 3bf0566097af54156514c00ff1670e19ea046dc6..f66f114c7b503c6d5c56af8c6bcecc1441d7fea5 100644 (file)
@@ -1226,6 +1226,7 @@ static connection_struct *switch_message(uint8 type, struct smb_request *req, in
        int flags;
        uint16 session_tag;
        connection_struct *conn = NULL;
+       struct smbd_server_connection *sconn = smbd_server_conn;
 
        errno = 0;
 
@@ -1269,10 +1270,10 @@ static connection_struct *switch_message(uint8 type, struct smb_request *req, in
         * JRA.
         */
 
-       if (session_tag != last_session_tag) {
+       if (session_tag != sconn->smb1.sessions.last_session_tag) {
                user_struct *vuser = NULL;
 
-               last_session_tag = session_tag;
+               sconn->smb1.sessions.last_session_tag = session_tag;
                if(session_tag != UID_FIELD_INVALID) {
                        vuser = get_valid_user_struct(session_tag);
                        if (vuser) {
@@ -2161,6 +2162,10 @@ void smbd_process(void)
 
        smbd_server_conn->smb1.negprot.max_recv = MIN(lp_maxxmit(),BUFFER_SIZE);
 
+       smbd_server_conn->smb1.sessions.done_sesssetup = false;
+       smbd_server_conn->smb1.sessions.max_send = BUFFER_SIZE;
+       smbd_server_conn->smb1.sessions.last_session_tag = UID_FIELD_INVALID;
+
        smbd_server_conn->smb1.fde = event_add_fd(smbd_event_context(),
                                                  smbd_server_conn,
                                                  smbd_server_fd(),
index f71fde1818e26e0c36350fc7f41e71bf6d7e3e1c..f93386a1e59c0b20278a005ce2d75b5f4ebbf040 100644 (file)
@@ -506,6 +506,7 @@ void reply_special(char *inbuf)
        int msg_flags = CVAL(inbuf,1);
        fstring name1,name2;
        char name_type1, name_type2;
+       struct smbd_server_connection *sconn = smbd_server_conn;
 
        /*
         * We only really use 4 bytes of the outbuf, but for the smb_setlen
index 8a517994cc4671530a3f3d6725313b234f3ebbde..be883303448c8ff79f14c5d65f81a345e23a3707 100644 (file)
@@ -1803,10 +1803,11 @@ void reply_sesssetup_and_X(struct smb_request *req)
        SSVAL(req->outbuf,smb_uid,sess_vuid);
        SSVAL(req->inbuf,smb_uid,sess_vuid);
 
-       if (!done_sesssetup)
-               max_send = MIN(max_send,smb_bufsize);
-
-       done_sesssetup = True;
+       if (!sconn->smb1.sessions.done_sesssetup) {
+               sconn->smb1.sessions.max_send =
+                       MIN(sconn->smb1.sessions.max_send,smb_bufsize);
+       }
+       sconn->smb1.sessions.done_sesssetup = true;
 
        END_PROFILE(SMBsesssetupX);
        chain_reply(req);
index d11bf088e01b58191a856e937ba83ad08c2f5f17..a8120d42fbe2d4de7fd39b6a63440f85b66a027e 100644 (file)
@@ -682,6 +682,8 @@ void send_trans2_replies(connection_struct *conn,
        int alignment_offset = 1; /* JRA. This used to be 3. Set to 1 to make netmon parse ok. */
        int data_alignment_offset = 0;
        bool overflow = False;
+       struct smbd_server_connection *sconn = smbd_server_conn;
+       int max_send = sconn->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