The branch, master has been updated
       via  36b4b56 pass 'rdonly' or 'directory' flag to open a directory file.
      from  621349d s3/rpc_server: Character Encode Spotlight Queries

https://git.samba.org/?p=samba.git;a=shortlog;h=master


- Log -----------------------------------------------------------------
commit 36b4b5655400df48f539d882b7c820ae109b3605
Author: Pooja Mahadik <pooja.maha...@veritas.com>
Date:   Tue Jul 10 11:17:42 2018 +0530

    pass 'rdonly' or 'directory' flag to open a directory file.
    
    Signed-off-by: Pooja Mahadik <pooja.maha...@veritas.com>
    Reviewed-by: Jeremy Allison <j...@samba.org>
    Reviewed-by: Ralph Boehme <s...@samba.org>
    
    Autobuild-User(master): Ralph Böhme <s...@samba.org>
    Autobuild-Date(master): Wed Jul 11 02:22:18 CEST 2018 on sn-devel-144

-----------------------------------------------------------------------

Summary of changes:
 source3/modules/lib_vxfs.c | 20 +++++++++++++++-----
 source3/modules/vfs_vxfs.c |  8 +++++---
 source3/modules/vfs_vxfs.h |  4 ++--
 3 files changed, 22 insertions(+), 10 deletions(-)


Changeset truncated at 500 lines:

diff --git a/source3/modules/lib_vxfs.c b/source3/modules/lib_vxfs.c
index f9394d6..dcb5cb3 100644
--- a/source3/modules/lib_vxfs.c
+++ b/source3/modules/lib_vxfs.c
@@ -224,11 +224,15 @@ int vxfs_setwxattr_fd(int fd)
        return ret;
 }
 
-int vxfs_setwxattr_path(const char *path)
+int vxfs_setwxattr_path(const char *path, bool is_dir)
 {
        int ret, fd = -1;
 
-       fd = open(path, O_WRONLY);
+       if (is_dir) {
+               fd = open(path, O_RDONLY|O_DIRECTORY);
+       } else {
+               fd = open(path, O_WRONLY);
+       }
        if (fd == -1) {
                DBG_DEBUG("file %s not opened, errno:%s\n",
                           path, strerror(errno));
@@ -259,11 +263,16 @@ int vxfs_clearwxattr_fd(int fd)
        return ret;
 }
 
-int vxfs_clearwxattr_path(const char *path)
+int vxfs_clearwxattr_path(const char *path, bool is_dir)
 {
        int ret, fd = -1;
 
-       fd = open(path, O_WRONLY);
+       if (is_dir) {
+               fd = open(path, O_RDONLY|O_DIRECTORY);
+       } else {
+               fd = open(path, O_WRONLY);
+       }
+
        if (fd == -1) {
                DBG_DEBUG("file %s not opened, errno:%s\n",
                           path, strerror(errno));
@@ -297,7 +306,8 @@ int vxfs_checkwxattr_path(const char *path)
 {
        int ret, fd = -1;
 
-       fd = open(path, O_WRONLY);
+       fd = open(path, O_RDONLY);
+
        if (fd == -1) {
                DBG_DEBUG("file %s not opened, errno:%s\n",
                           path, strerror(errno));
diff --git a/source3/modules/vfs_vxfs.c b/source3/modules/vfs_vxfs.c
index 3bf3adc..1295c75 100644
--- a/source3/modules/vfs_vxfs.c
+++ b/source3/modules/vfs_vxfs.c
@@ -833,11 +833,13 @@ static NTSTATUS vxfs_set_ea_dos_attributes(struct 
vfs_handle_struct *handle,
                                           uint32_t dosmode)
 {
        NTSTATUS        err;
-       int             ret = 0;
+       int                     ret = 0;
        bool            attrset = false;
+       bool            is_dir = false;
 
        DBG_DEBUG("Entered function\n");
 
+       is_dir = S_ISDIR(smb_fname->st.st_ex_mode);
        if (!(dosmode & FILE_ATTRIBUTE_READONLY)) {
                ret = vxfs_checkwxattr_path(smb_fname->base_name);
                if (ret == -1) {
@@ -848,7 +850,7 @@ static NTSTATUS vxfs_set_ea_dos_attributes(struct 
vfs_handle_struct *handle,
                }
        }
        if (dosmode & FILE_ATTRIBUTE_READONLY) {
-               ret = vxfs_setwxattr_path(smb_fname->base_name);
+               ret = vxfs_setwxattr_path(smb_fname->base_name, is_dir);
                DBG_DEBUG("ret:%d\n", ret);
                if (ret == -1) {
                        if ((errno != EOPNOTSUPP) && (errno != EINVAL)) {
@@ -861,7 +863,7 @@ static NTSTATUS vxfs_set_ea_dos_attributes(struct 
vfs_handle_struct *handle,
        err = SMB_VFS_NEXT_SET_DOS_ATTRIBUTES(handle, smb_fname, dosmode);
        if (!NT_STATUS_IS_OK(err)) {
                if (attrset) {
-                       ret = vxfs_clearwxattr_path(smb_fname->base_name);
+                       ret = vxfs_clearwxattr_path(smb_fname->base_name, 
is_dir);
                        DBG_DEBUG("ret:%d\n", ret);
                        if ((ret == -1) && (errno != ENOENT)) {
                                return map_nt_error_from_unix(errno);
diff --git a/source3/modules/vfs_vxfs.h b/source3/modules/vfs_vxfs.h
index f438bad..1975590 100644
--- a/source3/modules/vfs_vxfs.h
+++ b/source3/modules/vfs_vxfs.h
@@ -31,10 +31,10 @@ int vxfs_removexattr_fd(int, const char *);
 int vxfs_listxattr_path(const char *, char *, size_t);
 int vxfs_listxattr_fd(int, char *, size_t);
 
-int vxfs_setwxattr_path(const char *);
+int vxfs_setwxattr_path(const char *, bool);
 int vxfs_setwxattr_fd(int);
 
-int vxfs_clearwxattr_path(const char *);
+int vxfs_clearwxattr_path(const char *, bool);
 int vxfs_clearwxattr_fd(int);
 
 int vxfs_checkwxattr_path(const char *);


-- 
Samba Shared Repository

Reply via email to