mirror of https://gitee.com/openkylin/linux.git
[CIFS] Fix set file size to zero when doing chmod to Samba 3.0.26pre
In fixing a bug Samba 3.0.26pre allowed some clients (including Linux cifs client) to change file size to zero in SET_FILE_UNIX_BASIC (which Linux cifs client uses for chmod). The server has been "fixed" now but that also fixes the client to net send file size zero on chmod. Fixes Samba bugzilla bug # 4418. Fixed with help from Jeremy Allison Signed-off-by: Jeremy Allison <jra@samba.org> Signed-off-by: Steve French <sfrench@us.ibm.com>
This commit is contained in:
parent
99ee4dbd7c
commit
c7af1857ef
|
@ -220,6 +220,9 @@
|
||||||
*/
|
*/
|
||||||
#define CIFS_NO_HANDLE 0xFFFF
|
#define CIFS_NO_HANDLE 0xFFFF
|
||||||
|
|
||||||
|
#define NO_CHANGE_64 0xFFFFFFFFFFFFFFFFULL
|
||||||
|
#define NO_CHANGE_32 0xFFFFFFFFUL
|
||||||
|
|
||||||
/* IPC$ in ASCII */
|
/* IPC$ in ASCII */
|
||||||
#define CIFS_IPC_RESOURCE "\x49\x50\x43\x24"
|
#define CIFS_IPC_RESOURCE "\x49\x50\x43\x24"
|
||||||
|
|
||||||
|
|
|
@ -4803,6 +4803,16 @@ CIFSSMBUnixSetPerms(const int xid, struct cifsTconInfo *tcon,
|
||||||
pSMB->InformationLevel = cpu_to_le16(SMB_SET_FILE_UNIX_BASIC);
|
pSMB->InformationLevel = cpu_to_le16(SMB_SET_FILE_UNIX_BASIC);
|
||||||
pSMB->Reserved4 = 0;
|
pSMB->Reserved4 = 0;
|
||||||
pSMB->hdr.smb_buf_length += byte_count;
|
pSMB->hdr.smb_buf_length += byte_count;
|
||||||
|
/* Samba server ignores set of file size to zero due to bugs in some
|
||||||
|
older clients, but we should be precise - we use SetFileSize to
|
||||||
|
set file size and do not want to truncate file size to zero
|
||||||
|
accidently as happened on one Samba server beta by putting
|
||||||
|
zero instead of -1 here */
|
||||||
|
data_offset->EndOfFile = NO_CHANGE_64;
|
||||||
|
data_offset->NumOfBytes = NO_CHANGE_64;
|
||||||
|
data_offset->LastStatusChange = NO_CHANGE_64;
|
||||||
|
data_offset->LastAccessTime = NO_CHANGE_64;
|
||||||
|
data_offset->LastModificationTime = NO_CHANGE_64;
|
||||||
data_offset->Uid = cpu_to_le64(uid);
|
data_offset->Uid = cpu_to_le64(uid);
|
||||||
data_offset->Gid = cpu_to_le64(gid);
|
data_offset->Gid = cpu_to_le64(gid);
|
||||||
/* better to leave device as zero when it is */
|
/* better to leave device as zero when it is */
|
||||||
|
|
Loading…
Reference in New Issue