1
0
mirror of https://github.com/samba-team/samba.git synced 2025-08-03 04:22:09 +03:00

r21638: Change POSIX_UNLINK to allow clients to differentiate

between unlink/rmdir calls.
Jeremy.
This commit is contained in:
Jeremy Allison
2007-03-01 21:01:22 +00:00
committed by Gerald (Jerry) Carter
parent f3a8048a62
commit f0c8488d38
2 changed files with 22 additions and 2 deletions

View File

@ -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

View File

@ -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,