Author: tridge Date: 2007-07-04 04:16:16 +0000 (Wed, 04 Jul 2007) New Revision: 23697
WebSVN: http://websvn.samba.org/cgi-bin/viewcvs.cgi?view=rev&root=samba&rev=23697 Log: use the file perm options in the posix backend Modified: branches/SAMBA_4_0/source/ntvfs/posix/pvfs_fileinfo.c branches/SAMBA_4_0/source/ntvfs/posix/vfs_posix.c branches/SAMBA_4_0/source/ntvfs/posix/vfs_posix.h Changeset: Modified: branches/SAMBA_4_0/source/ntvfs/posix/pvfs_fileinfo.c =================================================================== --- branches/SAMBA_4_0/source/ntvfs/posix/pvfs_fileinfo.c 2007-07-04 04:15:07 UTC (rev 23696) +++ branches/SAMBA_4_0/source/ntvfs/posix/pvfs_fileinfo.c 2007-07-04 04:16:16 UTC (rev 23697) @@ -88,34 +88,39 @@ */ 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 (!(pvfs->flags & PVFS_FLAG_XATTR_ENABLE) && + (attrib & FILE_ATTRIBUTE_READONLY)) { + mode &= ~(S_IWUSR | S_IWGRP | S_IWOTH); } - if (!(attrib & FILE_ATTRIBUTE_READONLY) || - (pvfs->flags & PVFS_FLAG_XATTR_ENABLE)) { - mode |= S_IWUSR; - } - if (!(pvfs->flags & PVFS_FLAG_XATTR_ENABLE)) { if ((attrib & FILE_ATTRIBUTE_ARCHIVE) && (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; } + Modified: branches/SAMBA_4_0/source/ntvfs/posix/vfs_posix.c =================================================================== --- branches/SAMBA_4_0/source/ntvfs/posix/vfs_posix.c 2007-07-04 04:15:07 UTC (rev 23696) +++ branches/SAMBA_4_0/source/ntvfs/posix/vfs_posix.c 2007-07-04 04:16:16 UTC (rev 23697) @@ -60,6 +60,19 @@ if (share_bool_option(scfg, PVFS_AIO, False)) pvfs->flags |= PVFS_FLAG_LINUX_AIO; + /* file perm options */ + pvfs->options.create_mask = share_int_option(scfg, + SHARE_CREATE_MASK, + SHARE_CREATE_MASK_DEFAULT); + pvfs->options.dir_mask = share_int_option(scfg, + SHARE_DIR_MASK, + SHARE_DIR_MASK_DEFAULT); + pvfs->options.force_dir_mode = share_int_option(scfg, + SHARE_FORCE_DIR_MODE, + SHARE_FORCE_DIR_MODE_DEFAULT); + pvfs->options.force_create_mode = share_int_option(scfg, + SHARE_FORCE_CREATE_MODE, + SHARE_FORCE_CREATE_MODE_DEFAULT); /* this must be a power of 2 */ pvfs->alloc_size_rounding = share_int_option(scfg, PVFS_ALLOCATION_ROUNDING, Modified: branches/SAMBA_4_0/source/ntvfs/posix/vfs_posix.h =================================================================== --- branches/SAMBA_4_0/source/ntvfs/posix/vfs_posix.h 2007-07-04 04:15:07 UTC (rev 23696) +++ branches/SAMBA_4_0/source/ntvfs/posix/vfs_posix.h 2007-07-04 04:16:16 UTC (rev 23697) @@ -86,6 +86,14 @@ /* the acl backend */ const struct pvfs_acl_ops *acl_ops; + + /* non-flag share options */ + struct { + mode_t dir_mask; + mode_t force_dir_mode; + mode_t create_mask; + mode_t force_create_mode; + } options; }; /* this is the basic information needed about a file from the filesystem */
