summaryrefslogtreecommitdiff
path: root/source4/ntvfs/posix/pvfs_fileinfo.c
diff options
context:
space:
mode:
authorAndrew Tridgell <tridge@samba.org>2007-07-04 04:16:16 +0000
committerGerald (Jerry) Carter <jerry@samba.org>2007-10-10 14:59:03 -0500
commit879e1e0ec746d9d06c3bef1c91d1d2cd6f916442 (patch)
tree3efbc2cd73aa40c73e32cb4ac4e7f99ac7ff6b9c /source4/ntvfs/posix/pvfs_fileinfo.c
parentb540bc85ff8140424e9e925aa73f1f1cacfbd64a (diff)
downloadsamba-879e1e0ec746d9d06c3bef1c91d1d2cd6f916442.tar.gz
samba-879e1e0ec746d9d06c3bef1c91d1d2cd6f916442.tar.bz2
samba-879e1e0ec746d9d06c3bef1c91d1d2cd6f916442.zip
r23697: use the file perm options in the posix backend
(This used to be commit 701d06ac016c69fcd9ac92b5afefa2346c9bc26f)
Diffstat (limited to 'source4/ntvfs/posix/pvfs_fileinfo.c')
-rw-r--r--source4/ntvfs/posix/pvfs_fileinfo.c25
1 files changed, 15 insertions, 10 deletions
diff --git a/source4/ntvfs/posix/pvfs_fileinfo.c b/source4/ntvfs/posix/pvfs_fileinfo.c
index 8226b66d1f..b244019d56 100644
--- a/source4/ntvfs/posix/pvfs_fileinfo.c
+++ b/source4/ntvfs/posix/pvfs_fileinfo.c
@@ -88,15 +88,11 @@ NTSTATUS pvfs_fill_dos_info(struct pvfs_state *pvfs, struct pvfs_filename *name,
*/
mode_t pvfs_fileperms(struct pvfs_state *pvfs, uint32_t attrib)
{
- mode_t mode = S_IRUSR;
+ mode_t mode = (S_IRUSR | S_IRGRP | S_IROTH | S_IWUSR | S_IWGRP | S_IWOTH);
- if (attrib & FILE_ATTRIBUTE_DIRECTORY) {
- mode |= S_IXUSR;
- }
-
- if (!(attrib & FILE_ATTRIBUTE_READONLY) ||
- (pvfs->flags & PVFS_FLAG_XATTR_ENABLE)) {
- mode |= S_IWUSR;
+ if (!(pvfs->flags & PVFS_FLAG_XATTR_ENABLE) &&
+ (attrib & FILE_ATTRIBUTE_READONLY)) {
+ mode &= ~(S_IWUSR | S_IWGRP | S_IWOTH);
}
if (!(pvfs->flags & PVFS_FLAG_XATTR_ENABLE)) {
@@ -104,18 +100,27 @@ mode_t pvfs_fileperms(struct pvfs_state *pvfs, uint32_t attrib)
(pvfs->flags & PVFS_FLAG_MAP_ARCHIVE)) {
mode |= S_IXUSR;
}
-
if ((attrib & FILE_ATTRIBUTE_SYSTEM) &&
(pvfs->flags & PVFS_FLAG_MAP_SYSTEM)) {
mode |= S_IXGRP;
}
-
if ((attrib & FILE_ATTRIBUTE_HIDDEN) &&
(pvfs->flags & PVFS_FLAG_MAP_HIDDEN)) {
mode |= S_IXOTH;
}
}
+ if (attrib & FILE_ATTRIBUTE_DIRECTORY) {
+ mode |= (S_IFDIR | S_IWUSR);
+ mode |= (S_IXUSR | S_IXGRP | S_IXOTH);
+ mode &= pvfs->options.dir_mask;
+ mode |= pvfs->options.force_dir_mode;
+ } else {
+ mode &= pvfs->options.create_mask;
+ mode |= pvfs->options.force_create_mode;
+ }
+
return mode;
}
+