diff options
author | Jeremy Allison <jra@samba.org> | 2007-03-01 21:01:22 +0000 |
---|---|---|
committer | Gerald (Jerry) Carter <jerry@samba.org> | 2007-10-10 12:18:19 -0500 |
commit | 81cce1332129b97a5538f35c70367858f460935c (patch) | |
tree | 0ad848b2c517174212670cbde61b0f3461d2b7c3 /source3 | |
parent | efd510fa185a75cad9ae2b5352f72f84113b950f (diff) | |
download | samba-81cce1332129b97a5538f35c70367858f460935c.tar.gz samba-81cce1332129b97a5538f35c70367858f460935c.tar.bz2 samba-81cce1332129b97a5538f35c70367858f460935c.zip |
r21638: Change POSIX_UNLINK to allow clients to differentiate
between unlink/rmdir calls.
Jeremy.
(This used to be commit f0c8488d382ada32fabe79399f64ba1c6486d009)
Diffstat (limited to 'source3')
-rw-r--r-- | source3/include/trans2.h | 12 | ||||
-rw-r--r-- | source3/smbd/trans2.c | 12 |
2 files changed, 22 insertions, 2 deletions
diff --git a/source3/include/trans2.h b/source3/include/trans2.h index fb8e7716ab..89227c39d9 100644 --- a/source3/include/trans2.h +++ b/source3/include/trans2.h @@ -604,7 +604,7 @@ number of entries sent will be zero. #define SMB_POSIX_IGNORE_ACE_ENTRIES 0xFFFF -/* Definition of parameter block of SMB_SET_POSIX_LOCK */ +/* Definition of data block of SMB_SET_POSIX_LOCK */ /* [2 bytes] lock_type - 0 = Read, 1 = Write, 2 = Unlock [2 bytes] lock_flags - 1 = Wait (only valid for setlock) @@ -643,7 +643,7 @@ number of entries sent will be zero. #define SMB_O_NOFOLLOW 0x400 #define SMB_O_DIRECT 0x800 -/* Definition of request parameter block for SMB_POSIX_PATH_OPEN */ +/* Definition of request data block for SMB_POSIX_PATH_OPEN */ /* [4 bytes] flags (as smb_ntcreate_Flags). [4 bytes] open_mode @@ -660,4 +660,12 @@ number of entries sent will be zero. [n bytes] - info level reply - if available. */ +/* Definition of request data block for SMB_POSIX_UNLINK */ +/* + [2 bytes] flags (defined below). +*/ + +#define SMB_POSIX_UNLINK_FILE_TARGET 0 +#define SMB_POSIX_UNLINK_DIRECTORY_TARGET 1 + #endif diff --git a/source3/smbd/trans2.c b/source3/smbd/trans2.c index 5bbd618231..2952c9b1dc 100644 --- a/source3/smbd/trans2.c +++ b/source3/smbd/trans2.c @@ -5132,12 +5132,24 @@ static NTSTATUS smb_posix_unlink(connection_struct *conn, { NTSTATUS status = NT_STATUS_OK; files_struct *fsp = NULL; + uint16 flags = 0; int info = 0; + if (total_data < 2) { + return NT_STATUS_INVALID_PARAMETER; + } + + flags = SVAL(pdata,0); + if (!VALID_STAT(*psbuf)) { return NT_STATUS_OBJECT_NAME_NOT_FOUND; } + if ((flags == SMB_POSIX_UNLINK_DIRECTORY_TARGET) && + !VALID_STAT_OF_DIR(*psbuf)) { + return NT_STATUS_NOT_A_DIRECTORY; + } + if (VALID_STAT_OF_DIR(*psbuf)) { status = open_directory(conn, fname, |