diff options
author | Gerald Carter <jerry@samba.org> | 2005-03-11 10:52:54 +0000 |
---|---|---|
committer | Gerald Carter <jerry@samba.org> | 2005-03-11 10:52:54 +0000 |
commit | 061a07f6b476428c622618d83a5a1e54c5f05fe5 (patch) | |
tree | 5e926c06e720253210687391b68aa82f553c9ad3 /source/smbd/posix_acls.c | |
parent | 6c30768e14f5639328e06a73940f133f9078b90e (diff) | |
download | samba-061a07f6b476428c622618d83a5a1e54c5f05fe5.tar.gz |
r5739: sync for 3.0.12rc1 (current with SAMBA_3_0 r5738)
Diffstat (limited to 'source/smbd/posix_acls.c')
-rw-r--r-- | source/smbd/posix_acls.c | 16 |
1 files changed, 16 insertions, 0 deletions
diff --git a/source/smbd/posix_acls.c b/source/smbd/posix_acls.c index d02edc5ea06..c5f96db85c1 100644 --- a/source/smbd/posix_acls.c +++ b/source/smbd/posix_acls.c @@ -3903,10 +3903,26 @@ BOOL can_delete_file_in_directory(connection_struct *conn, const char *fname) if (current_user.uid == sbuf.st_uid) { return (sbuf.st_mode & S_IWUSR) ? True : False; } + +#ifdef S_ISVTX + /* sticky bit means delete only by owner or root. */ + if (sbuf.st_mode & S_ISVTX) { + SMB_STRUCT_STAT sbuf_file; + if(SMB_VFS_STAT(conn, fname, &sbuf_file) != 0) { + return False; + } + if (current_user.uid == sbuf_file.st_uid) { + return True; + } + return False; + } +#endif + /* Check group ownership. */ ret = check_posix_acl_group_write(conn, dname, &sbuf); if (ret == 0 || ret == 1) { return ret ? True : False; } + return (sbuf.st_mode & S_IWOTH) ? True : False; } |