Commit 85f07774 authored by WaeCo's avatar WaeCo Committed by GitHub

fix(rename,unlink): fix STATUS_ACCESS_DENIED by passing shareAccess see #18 (#21)

Related to #18 

This sets correct ShareAccess values for rename and unlink requests.
See https://msdn.microsoft.com/en-us/library/cc246502.aspx ShareAccess.

ShareAcess was always set to 0x00. For rename and delete requests
it is required to include the 0x04 flag.
parent d4c13404
var BigInt = require('../tools/bigint'); var BigInt = require('../tools/bigint');
var SMB2Request = require('../tools/smb2-forge').request; var SMB2Request = require('../tools/smb2-forge').request;
var FILE_OPEN = require('../structures/constants').FILE_OPEN; var constants = require('../structures/constants');
/* /*
* rename * rename
...@@ -31,7 +31,7 @@ module.exports = function rename(oldPath, newPath, options, cb) { ...@@ -31,7 +31,7 @@ module.exports = function rename(oldPath, newPath, options, cb) {
if (err) if (err)
SMB2Request( SMB2Request(
'create', 'create',
{ path: oldPath, createDisposition: FILE_OPEN }, { path: oldPath, createDisposition: constants.FILE_OPEN, shareAccess: constants.FILE_SHARE_DELETE },
connection, connection,
function(err, file) { function(err, file) {
if (err) cb && cb(err); if (err) cb && cb(err);
......
var SMB2Forge = require('../tools/smb2-forge'); var SMB2Forge = require('../tools/smb2-forge');
var SMB2Request = SMB2Forge.request; var SMB2Request = SMB2Forge.request;
var BigInt = require('../tools/bigint'); var BigInt = require('../tools/bigint');
var constants = require('../structures/constants');
/* /*
* unlink * unlink
* ====== * ======
...@@ -19,7 +19,7 @@ module.exports = function unlink(path, cb) { ...@@ -19,7 +19,7 @@ module.exports = function unlink(path, cb) {
var connection = this; var connection = this;
// SMB2 open file // SMB2 open file
SMB2Request('create', { path: path }, connection, function(err, file) { SMB2Request('create', { path: path, shareAccess: constants.FILE_SHARE_DELETE }, connection, function(err, file) {
if (err) cb && cb(err); if (err) cb && cb(err);
// SMB2 query directory // SMB2 query directory
else else
......
...@@ -20,6 +20,7 @@ module.exports = message({ ...@@ -20,6 +20,7 @@ module.exports = message({
generate: function(connection, params) { generate: function(connection, params) {
var buffer = Buffer.from(params.path, 'ucs2'); var buffer = Buffer.from(params.path, 'ucs2');
var createDisposition = params.createDisposition; var createDisposition = params.createDisposition;
var shareAccess = params.shareAccess;
/* See: https://msdn.microsoft.com/en-us/library/cc246502.aspx /* See: https://msdn.microsoft.com/en-us/library/cc246502.aspx
6 values for CreateDisposition. */ 6 values for CreateDisposition. */
...@@ -27,6 +28,12 @@ module.exports = message({ ...@@ -27,6 +28,12 @@ module.exports = message({
createDisposition = constants.FILE_OVERWRITE_IF; createDisposition = constants.FILE_OVERWRITE_IF;
} }
/* See: https://msdn.microsoft.com/en-us/library/cc246502.aspx
7 possible values for ShareAccess. */
if (!(shareAccess >= 0 && shareAccess <= 7)) {
shareAccess = constants.FILE_SHARE_NONE;
}
return new SMB2Message({ return new SMB2Message({
headers: { headers: {
Command: 'CREATE', Command: 'CREATE',
...@@ -38,7 +45,7 @@ module.exports = message({ ...@@ -38,7 +45,7 @@ module.exports = message({
Buffer: buffer, Buffer: buffer,
DesiredAccess: desiredAccess, DesiredAccess: desiredAccess,
FileAttributes: 0x00000080, FileAttributes: 0x00000080,
ShareAccess: 0x00000000, ShareAccess: shareAccess,
CreateDisposition: createDisposition, CreateDisposition: createDisposition,
CreateOptions: 0x00000044, CreateOptions: 0x00000044,
NameOffset: 0x0078, NameOffset: 0x0078,
......
...@@ -14,6 +14,11 @@ module.exports = { ...@@ -14,6 +14,11 @@ module.exports = {
MAX_READ_LENGTH: 0x00010000, MAX_READ_LENGTH: 0x00010000,
MAX_WRITE_LENGTH: 0x00010000 - 0x71, MAX_WRITE_LENGTH: 0x00010000 - 0x71,
FILE_SHARE_NONE: 0x00000000,
FILE_SHARE_READ: 0x00000001,
FILE_SHARE_WRITE: 0x00000002,
FILE_SHARE_DELETE: 0x00000004,
/** /**
* 2.2.13.1.1 SMB2 File_Pipe_Printer_Access_Mask * 2.2.13.1.1 SMB2 File_Pipe_Printer_Access_Mask
* https://docs.microsoft.com/en-us/openspecs/windows_protocols/ms-smb2/77b36d0f-6016-458a-a7a0-0f4a72ae1534 * https://docs.microsoft.com/en-us/openspecs/windows_protocols/ms-smb2/77b36d0f-6016-458a-a7a0-0f4a72ae1534
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment