r23792: convert Samba4 to GPLv3
[samba.git] / source4 / libcli / smb2 / close.c
index 4429cd557b5af208eb073e11def141616b8594d0..e83f81b63005fb2a111d482c86d1902e21b09bdb 100644 (file)
@@ -1,13 +1,13 @@
 /* 
    Unix SMB/CIFS implementation.
 
-   SMB2 client tree handling
+   SMB2 client close handling
 
    Copyright (C) Andrew Tridgell 2005
    
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 2 of the License, or
+   the Free Software Foundation; either version 3 of the License, or
    (at your option) any later version.
    
    This program is distributed in the hope that it will be useful,
@@ -16,8 +16,7 @@
    GNU General Public License for more details.
    
    You should have received a copy of the GNU General Public License
-   along with this program; if not, write to the Free Software
-   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+   along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */
 
 #include "includes.h"
@@ -32,13 +31,12 @@ struct smb2_request *smb2_close_send(struct smb2_tree *tree, struct smb2_close *
 {
        struct smb2_request *req;
 
-       req = smb2_request_init_tree(tree, SMB2_OP_CLOSE, 0x18);
+       req = smb2_request_init_tree(tree, SMB2_OP_CLOSE, 0x18, False, 0);
        if (req == NULL) return NULL;
 
-       SIVAL(req->out.body, 0x00, io->in.unknown1);
-       SIVAL(req->out.body, 0x04, io->in.unknown2);
-       SBVAL(req->out.body, 0x08, io->in.handle.data[0]);
-       SBVAL(req->out.body, 0x10, io->in.handle.data[1]);
+       SSVAL(req->out.body, 0x02, io->in.flags);
+       SIVAL(req->out.body, 0x04, 0); /* pad */
+       smb2_push_handle(req->out.body+0x08, &io->in.file.handle);
 
        smb2_transport_send(req);
 
@@ -52,16 +50,14 @@ struct smb2_request *smb2_close_send(struct smb2_tree *tree, struct smb2_close *
 NTSTATUS smb2_close_recv(struct smb2_request *req, struct smb2_close *io)
 {
        if (!smb2_request_receive(req) || 
-           smb2_request_is_error(req)) {
+           !smb2_request_is_ok(req)) {
                return smb2_request_destroy(req);
        }
 
-       if (req->in.body_size < 0x3C) {
-               return NT_STATUS_BUFFER_TOO_SMALL;
-       }
+       SMB2_CHECK_PACKET_RECV(req, 0x3C, False);
 
-       io->out.unknown1 = IVAL(req->in.body, 0x00);
-       io->out.unknown2 = IVAL(req->in.body, 0x04);
+       io->out.flags       = SVAL(req->in.body, 0x02);
+       io->out._pad        = IVAL(req->in.body, 0x04);
        io->out.create_time = smbcli_pull_nttime(req->in.body, 0x08);
        io->out.access_time = smbcli_pull_nttime(req->in.body, 0x10);
        io->out.write_time  = smbcli_pull_nttime(req->in.body, 0x18);