s3:pylibsmb: Add FILE_READ_ATTRIBUTES access to .loadfile() API
authorTim Beale <timbeale@catalyst.net.nz>
Fri, 11 Jan 2019 01:25:32 +0000 (14:25 +1300)
committerKarolin Seeger <kseeger@samba.org>
Mon, 4 Feb 2019 08:50:08 +0000 (09:50 +0100)
Add FILE_READ_ATTRIBUTES when opening the file handle, as we need to
read the file's size.

The .loadfile() API can end up calling cli_qfileinfo_basic() to get the
file size. This can end up doing a 'FILE_ALL_INFORMATION' SMBv2 request
underneath, which the MS-SMB2 spec (section 3.3.5.20.1 Handling
SMB2_0_INFO_FILE) says the file handle must have FILE_READ_ATTRIBUTES
access granted.

I noticed this problem when running .loadfile() against the NTVFS
server.

BUG: https://bugzilla.samba.org/show_bug.cgi?id=13676

Signed-off-by: Tim Beale <timbeale@catalyst.net.nz>
Reviewed-by: Jeremy Allison <jra@samba.org>
(cherry picked from commit 0304b08de5ba1b4a6e08568a559c52f7d9e943d3)

source3/libsmb/pylibsmb.c

index ee1d91b90ed482594dc6dce98a28e157f899a0be..b4903a9b8c54f2d726ce925f9a4b7cf9a2261325 100644 (file)
@@ -928,7 +928,8 @@ static PyObject *py_smb_loadfile(struct py_cli_state *self, PyObject *args,
 
        /* get a read file handle */
        req = cli_ntcreate_send(NULL, self->ev, self->cli, filename, 0,
-                               FILE_READ_DATA, FILE_ATTRIBUTE_NORMAL,
+                               FILE_READ_DATA | FILE_READ_ATTRIBUTES,
+                               FILE_ATTRIBUTE_NORMAL,
                                FILE_SHARE_READ, FILE_OPEN, 0,
                                SMB2_IMPERSONATION_IMPERSONATION, 0);
        if (!py_tevent_req_wait_exc(self, req)) {