Fix signing bug found by Volker. That one was *subtle*.
[samba.git] / source / libsmb / clitrans.c
index d7492b31c351a3da13aee30070d6d3d67a939973..f43a2aa0284a6c5ccdf2d0444f369eafc45419a7 100644 (file)
@@ -44,7 +44,7 @@ BOOL cli_send_trans(struct cli_state *cli, int trans,
        this_ldata = MIN(ldata,cli->max_xmit - (500+lsetup*2+this_lparam));
 
        memset(cli->outbuf,'\0',smb_size);
-       set_message(NULL,cli->outbuf,14+lsetup,0,True);
+       set_message(cli->outbuf,14+lsetup,0,True);
        SCVAL(cli->outbuf,smb_com,trans);
        SSVAL(cli->outbuf,smb_tid, cli->cnum);
        cli_setup_packet(cli);
@@ -95,14 +95,9 @@ BOOL cli_send_trans(struct cli_state *cli, int trans,
                return False;
        }
 
-       /* Note we're in a trans state. Save the sequence
-        * numbers for replies. */
-       client_set_trans_sign_state_on(cli, mid);
-
        if (this_ldata < ldata || this_lparam < lparam) {
                /* receive interim response */
                if (!cli_receive_smb(cli) || cli_is_error(cli)) {
-                       client_set_trans_sign_state_off(cli, mid);
                        return(False);
                }
 
@@ -113,7 +108,7 @@ BOOL cli_send_trans(struct cli_state *cli, int trans,
                        this_lparam = MIN(lparam-tot_param,cli->max_xmit - 500); /* hack */
                        this_ldata = MIN(ldata-tot_data,cli->max_xmit - (500+this_lparam));
 
-                       set_message(NULL,cli->outbuf,trans==SMBtrans?8:9,0,True);
+                       set_message(cli->outbuf,trans==SMBtrans?8:9,0,True);
                        SCVAL(cli->outbuf,smb_com,(trans==SMBtrans ? SMBtranss : SMBtranss2));
                        
                        outparam = smb_buf(cli->outbuf);
@@ -144,7 +139,6 @@ BOOL cli_send_trans(struct cli_state *cli, int trans,
 
                        show_msg(cli->outbuf);
                        if (!cli_send_smb(cli)) {
-                               client_set_trans_sign_state_off(cli, mid);
                                return False;
                        }
 
@@ -194,22 +188,13 @@ BOOL cli_receive_trans(struct cli_state *cli,int trans,
         * to a trans call. This is not an error and should not
         * be treated as such. Note that STATUS_NO_MORE_FILES is
         * returned when a trans2 findfirst/next finishes.
-        * When setting up an encrypted transport we can also
-        * see NT_STATUS_MORE_PROCESSING_REQUIRED here.
-         *
-         * Vista returns NT_STATUS_INACCESSIBLE_SYSTEM_SHORTCUT if the folder
-         * "<share>/Users/All Users" is enumerated.  This is a special pseudo
-         * folder, and the response does not have parameters (nor a parameter
-         * length).
         */
        status = cli_nt_error(cli);
        
-       if (!NT_STATUS_EQUAL(status, NT_STATUS_MORE_PROCESSING_REQUIRED)) {
-               if (NT_STATUS_IS_ERR(status) ||
-                    NT_STATUS_EQUAL(status,STATUS_NO_MORE_FILES) ||
-                    NT_STATUS_EQUAL(status,NT_STATUS_INACCESSIBLE_SYSTEM_SHORTCUT)) {
-                       goto out;
-               }
+       if (NT_STATUS_IS_ERR(status) ||
+            NT_STATUS_EQUAL(status,STATUS_NO_MORE_FILES) ||
+            NT_STATUS_EQUAL(status,STATUS_INACCESSIBLE_SYSTEM_SHORTCUT)) {
+               goto out;
        }
 
        /* parse out the lengths */
@@ -314,10 +299,8 @@ BOOL cli_receive_trans(struct cli_state *cli,int trans,
                                 CVAL(cli->inbuf,smb_com)));
                        goto out;
                }
-               if (!NT_STATUS_EQUAL(status, NT_STATUS_MORE_PROCESSING_REQUIRED)) {
-                       if (NT_STATUS_IS_ERR(cli_nt_error(cli))) {
-                               goto out;
-                       }
+               if (NT_STATUS_IS_ERR(cli_nt_error(cli))) {
+                       goto out;
                }
 
                /* parse out the total lengths again - they can shrink! */
@@ -334,7 +317,6 @@ BOOL cli_receive_trans(struct cli_state *cli,int trans,
 
   out:
 
-       client_set_trans_sign_state_off(cli, SVAL(cli->inbuf,smb_mid));
        return ret;
 }
 
@@ -359,7 +341,7 @@ BOOL cli_send_nt_trans(struct cli_state *cli,
        this_ldata = MIN(ldata,cli->max_xmit - (500+lsetup*2+this_lparam));
 
        memset(cli->outbuf,'\0',smb_size);
-       set_message(NULL,cli->outbuf,19+lsetup,0,True);
+       set_message(cli->outbuf,19+lsetup,0,True);
        SCVAL(cli->outbuf,smb_com,SMBnttrans);
        SSVAL(cli->outbuf,smb_tid, cli->cnum);
        cli_setup_packet(cli);
@@ -402,14 +384,9 @@ BOOL cli_send_nt_trans(struct cli_state *cli,
                return False;
        }       
 
-       /* Note we're in a trans state. Save the sequence
-        * numbers for replies. */
-       client_set_trans_sign_state_on(cli, mid);
-
        if (this_ldata < ldata || this_lparam < lparam) {
                /* receive interim response */
                if (!cli_receive_smb(cli) || cli_is_error(cli)) {
-                       client_set_trans_sign_state_off(cli, mid);
                        return(False);
                }
 
@@ -420,7 +397,7 @@ BOOL cli_send_nt_trans(struct cli_state *cli,
                        this_lparam = MIN(lparam-tot_param,cli->max_xmit - 500); /* hack */
                        this_ldata = MIN(ldata-tot_data,cli->max_xmit - (500+this_lparam));
 
-                       set_message(NULL,cli->outbuf,18,0,True);
+                       set_message(cli->outbuf,18,0,True);
                        SCVAL(cli->outbuf,smb_com,SMBnttranss);
 
                        /* XXX - these should probably be aligned */
@@ -451,7 +428,6 @@ BOOL cli_send_nt_trans(struct cli_state *cli,
                        show_msg(cli->outbuf);
 
                        if (!cli_send_smb(cli)) {
-                               client_set_trans_sign_state_off(cli, mid);
                                return False;
                        }
                        
@@ -651,6 +627,5 @@ BOOL cli_receive_nt_trans(struct cli_state *cli,
 
   out:
 
-       client_set_trans_sign_state_off(cli, SVAL(cli->inbuf,smb_mid));
        return ret;
 }