The branch, master has been updated
       via  5d8647376fb vfs: Fix whitespace in vfs_aixacl_util.c
       via  1a040c7f7ee smbd: Remove dptr_struct->expect_close
       via  a49edcd0d26 smbd: Remove dptr_struct->spid
       via  5c19e6ca756 smbd: Simplify SeekDir() with an early return
       via  a1d348fd5e1 smbd: Simplify struct dptr_struct
       via  8846b090079 lib: Fix a typo
       via  4bbf2b1127b lib: Simplify ms_has_wild() with strpbrk()
       via  6e856074b14 smbd: Use ISDOT() in dptr_create()
      from  54a8da86407 vfs_ceph: use fsp_get_pathref_fd in ceph fstatat and 
close vfs calls

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


- Log -----------------------------------------------------------------
commit 5d8647376fbfe0ad3b479be3a4479f1c9d5ecd7b
Author: Volker Lendecke <v...@samba.org>
Date:   Tue Feb 7 09:49:54 2023 +0100

    vfs: Fix whitespace in vfs_aixacl_util.c
    
    Signed-off-by: Volker Lendecke <v...@samba.org>
    Reviewed-by: Jeremy Allison <j...@samba.org>
    
    Autobuild-User(master): Jeremy Allison <j...@samba.org>
    Autobuild-Date(master): Mon Feb 13 21:23:43 UTC 2023 on atb-devel-224

commit 1a040c7f7eebb4ed549cc59f0b7bab461bf6d06d
Author: Volker Lendecke <v...@samba.org>
Date:   Mon Feb 6 21:40:38 2023 +0100

    smbd: Remove dptr_struct->expect_close
    
    This was only set but never read
    
    Signed-off-by: Volker Lendecke <v...@samba.org>
    Reviewed-by: Jeremy Allison <j...@samba.org>

commit a49edcd0d26058e41712e3d069bfe36a463b76dc
Author: Volker Lendecke <v...@samba.org>
Date:   Mon Feb 6 21:36:51 2023 +0100

    smbd: Remove dptr_struct->spid
    
    This was only set but never read
    
    Signed-off-by: Volker Lendecke <v...@samba.org>
    Reviewed-by: Jeremy Allison <j...@samba.org>

commit 5c19e6ca756fda9dd66fa2cd484e54d0e3e221f0
Author: Volker Lendecke <v...@samba.org>
Date:   Thu Feb 2 17:01:16 2023 +0100

    smbd: Simplify SeekDir() with an early return
    
    Review with git show -w
    
    Signed-off-by: Volker Lendecke <v...@samba.org>
    Reviewed-by: Jeremy Allison <j...@samba.org>

commit a1d348fd5e1b16ffc47e320d370a002dc9c9b8eb
Author: Volker Lendecke <v...@samba.org>
Date:   Thu Feb 2 12:52:32 2023 +0100

    smbd: Simplify struct dptr_struct
    
    We can access the file name via "dir_hnd"
    
    Signed-off-by: Volker Lendecke <v...@samba.org>
    Reviewed-by: Jeremy Allison <j...@samba.org>

commit 8846b0900794c717c6a9f72a743f600ae81f8406
Author: Volker Lendecke <v...@samba.org>
Date:   Thu Feb 2 12:28:56 2023 +0100

    lib: Fix a typo
    
    Signed-off-by: Volker Lendecke <v...@samba.org>
    Reviewed-by: Jeremy Allison <j...@samba.org>

commit 4bbf2b1127b93efe655360a185567de080faa943
Author: Volker Lendecke <v...@samba.org>
Date:   Thu Feb 2 12:25:05 2023 +0100

    lib: Simplify ms_has_wild() with strpbrk()
    
    Signed-off-by: Volker Lendecke <v...@samba.org>
    Reviewed-by: Jeremy Allison <j...@samba.org>

commit 6e856074b143ea595f3ab9e5184d21bec11b17ae
Author: Volker Lendecke <v...@samba.org>
Date:   Thu Feb 2 12:19:46 2023 +0100

    smbd: Use ISDOT() in dptr_create()
    
    Signed-off-by: Volker Lendecke <v...@samba.org>
    Reviewed-by: Jeremy Allison <j...@samba.org>

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

Summary of changes:
 source3/lib/util.c                  |  17 +----
 source3/modules/vfs_aixacl_util.c   |  42 ++++++-------
 source3/smbd/dir.c                  | 120 +++++++++++++++++-------------------
 source3/smbd/proto.h                |   2 -
 source3/smbd/smb1_reply.c           |   2 -
 source3/smbd/smb1_trans2.c          |   2 -
 source3/smbd/smb2_query_directory.c |   2 -
 7 files changed, 79 insertions(+), 108 deletions(-)


Changeset truncated at 500 lines:

diff --git a/source3/lib/util.c b/source3/lib/util.c
index 83707b31e38..b010d035cdd 100644
--- a/source3/lib/util.c
+++ b/source3/lib/util.c
@@ -1443,19 +1443,8 @@ bool parent_dirname(TALLOC_CTX *mem_ctx, const char 
*dir, char **parent,
 
 bool ms_has_wild(const char *s)
 {
-       char c;
-
-       while ((c = *s++)) {
-               switch (c) {
-               case '*':
-               case '?':
-               case '<':
-               case '>':
-               case '"':
-                       return True;
-               }
-       }
-       return False;
+       const char *found = strpbrk(s, "*?<>\"");
+       return (found != NULL);
 }
 
 bool ms_has_wild_w(const smb_ucs2_t *s)
@@ -1492,7 +1481,7 @@ bool mask_match(const char *string, const char *pattern, 
bool is_case_sensitive)
 
 /*******************************************************************
  A wrapper that handles case sensitivity and the special handling
- of the ".." name. Varient that is only called by old search code which 
requires
+ of the ".." name. Variant that is only called by old search code which 
requires
  pattern translation.
 *******************************************************************/
 
diff --git a/source3/modules/vfs_aixacl_util.c 
b/source3/modules/vfs_aixacl_util.c
index 1194d27df22..38b53eb3f53 100644
--- a/source3/modules/vfs_aixacl_util.c
+++ b/source3/modules/vfs_aixacl_util.c
@@ -26,20 +26,18 @@ SMB_ACL_T aixacl_to_smbacl(struct acl *file_acl, TALLOC_CTX 
*mem_ctx)
 {
        struct acl_entry *acl_entry;
        struct ace_id *idp;
-       
+
        struct smb_acl_t *result = sys_acl_init(mem_ctx);
        struct smb_acl_entry *ace;
        int i;
-       
+
        if (result == NULL) {
                return NULL;
        }
-       
+
        /* Point to the first acl entry in the acl */
        acl_entry =  file_acl->acl_ext;
 
-
-       
        DEBUG(10,("acl_entry is %p\n",(void *)acl_entry));
        DEBUG(10,("acl_last(file_acl) id %p\n",(void *)acl_last(file_acl)));
 
@@ -62,20 +60,19 @@ SMB_ACL_T aixacl_to_smbacl(struct acl *file_acl, TALLOC_CTX 
*mem_ctx)
 
                        idp = acl_entry->ace_id;
                        DEBUG(10,("idp->id_data is %d\n",idp->id_data[0]));
-                       
+
                        result->acl = talloc_realloc(result, result->acl, 
struct smb_acl_entry, result->count+1);
                        if (result == NULL) {
                                DEBUG(0, ("talloc_realloc failed\n"));
                                errno = ENOMEM;
                                return NULL;
                        }
-                       
 
                        DEBUG(10,("idp->id_type is %d\n",idp->id_type));
                        ace = &result->acl[result->count];
-                       
+
                        ace->a_type = idp->id_type;
-                                                       
+
                        switch(ace->a_type) {
                        case ACEID_USER: {
                        ace->info.user.uid = idp->id_data[0];
@@ -83,7 +80,7 @@ SMB_ACL_T aixacl_to_smbacl(struct acl *file_acl, TALLOC_CTX 
*mem_ctx)
                        ace->a_type = SMB_ACL_USER;
                        break;
                        }
-               
+
                        case ACEID_GROUP: {
                        ace->info.group.gid = idp->id_data[0];
                        DEBUG(10,("case ACEID_GROUP ace->info.group.gid is 
%d\n",ace->info.group.gid));
@@ -117,16 +114,16 @@ SMB_ACL_T aixacl_to_smbacl(struct acl *file_acl, 
TALLOC_CTX *mem_ctx)
                                TALLOC_FREE(result);
                                return(0);
                        }
-               
+
                        result->count++;
                        ace->a_perm |= (ace->a_perm & S_IRUSR) ? SMB_ACL_READ : 
0;
                        ace->a_perm |= (ace->a_perm & S_IWUSR) ? SMB_ACL_WRITE 
: 0;
                        ace->a_perm |= (ace->a_perm & S_IXUSR) ? 
SMB_ACL_EXECUTE : 0;
                        DEBUG(10,("ace->a_perm is %d\n",ace->a_perm));
-                       
+
                        DEBUG(10,("acl_entry = %p\n",(void *)acl_entry));
                        DEBUG(10,("The ace_type is %d\n",acl_entry->ace_type));
- 
+
                        acl_entry = acl_nxt(acl_entry);
                }
        } /* end of if enabled */
@@ -146,13 +143,13 @@ SMB_ACL_T aixacl_to_smbacl(struct acl *file_acl, 
TALLOC_CTX *mem_ctx)
                        DEBUG(0,("Error in AIX sys_acl_get_file is 
%d\n",errno));
                        return NULL;
                }
-                       
+
                ace = &result->acl[result->count];
-               
+
                ace->info.user.uid = 0;
                ace->info.group.gid = 0;
                DEBUG(10,("ace->info.user.uid = %d\n",ace->info.user.uid));
-               
+
                switch(i) {
                case 2:
                        ace->a_perm = file_acl->g_access << 6;
@@ -163,12 +160,12 @@ SMB_ACL_T aixacl_to_smbacl(struct acl *file_acl, 
TALLOC_CTX *mem_ctx)
                        ace->a_perm = file_acl->o_access << 6;
                        ace->a_type = SMB_ACL_OTHER;
                        break;
- 
+
                case 1:
                        ace->a_perm = file_acl->u_access << 6;
                        ace->a_type = SMB_ACL_USER_OBJ;
                        break;
- 
+
                default:
                        return(NULL);
 
@@ -176,17 +173,14 @@ SMB_ACL_T aixacl_to_smbacl(struct acl *file_acl, 
TALLOC_CTX *mem_ctx)
                ace->a_perm |= ((ace->a_perm & S_IRUSR) ? SMB_ACL_READ : 0);
                ace->a_perm |= ((ace->a_perm & S_IWUSR) ? SMB_ACL_WRITE : 0);
                ace->a_perm |= ((ace->a_perm & S_IXUSR) ? SMB_ACL_EXECUTE : 0);
-               
+
                memcpy(&result->acl[result->count],ace,sizeof(struct 
smb_acl_entry));
                result->count++;
                DEBUG(10,("ace->a_perm = %d\n",ace->a_perm));
                DEBUG(10,("ace->a_type = %d\n",ace->a_type));
        }
 
-
        return result;
-
-
 }
 
 static ushort aixacl_smb_to_aixperm(SMB_ACL_PERM_T a_perm)
@@ -211,7 +205,7 @@ struct acl *aixacl_smb_to_aixacl(SMB_ACL_TYPE_T acltype, 
SMB_ACL_T theacl)
        unsigned int id_type;
        unsigned int acl_length;
        int     i;
- 
+
        DEBUG(10,("Entering aixacl_smb_to_aixacl\n"));
        /* AIX has no default ACL */
        if(acltype == SMB_ACL_TYPE_DEFAULT)
@@ -226,7 +220,7 @@ struct acl *aixacl_smb_to_aixacl(SMB_ACL_TYPE_T acltype, 
SMB_ACL_T theacl)
        }
 
        memset(file_acl,0,BUFSIZ);
- 
+
        file_acl->acl_len = ACL_SIZ;
        file_acl->acl_mode = S_IXACL;
 
diff --git a/source3/smbd/dir.c b/source3/smbd/dir.c
index eb263132adf..859c8f0dc83 100644
--- a/source3/smbd/dir.c
+++ b/source3/smbd/dir.c
@@ -67,13 +67,10 @@ struct smb_Dir {
 struct dptr_struct {
        struct dptr_struct *next, *prev;
        int dnum;
-       uint16_t spid;
        struct connection_struct *conn;
        struct smb_Dir *dir_hnd;
-       bool expect_close;
        char *wcard;
        uint32_t attr;
-       struct smb_filename *smb_dname;
        bool has_wild; /* Set to true if the wcard entry has MS wildcard 
characters in it. */
        bool did_stat; /* Optimisation for non-wcard searches. */
        bool priv;     /* Directory handle opened with privilege. */
@@ -144,7 +141,7 @@ const char *dptr_path(struct smbd_server_connection *sconn, 
int key)
 {
        struct dptr_struct *dptr = dptr_get(sconn, key);
        if (dptr)
-               return(dptr->smb_dname->base_name);
+               return(dptr->dir_hnd->dir_smb_fname->base_name);
        return(NULL);
 }
 
@@ -211,8 +208,6 @@ NTSTATUS dptr_create(connection_struct *conn,
                struct smb_request *req,
                files_struct *fsp,
                bool old_handle,
-               bool expect_close,
-               uint16_t spid,
                const char *wcard,
                uint32_t attr,
                struct dptr_struct **dptr_ret)
@@ -251,24 +246,15 @@ NTSTATUS dptr_create(connection_struct *conn,
                return NT_STATUS_NO_MEMORY;
        }
 
-       dptr->smb_dname = cp_smb_filename(dptr, fsp->fsp_name);
-       if (dptr->smb_dname == NULL) {
-               TALLOC_FREE(dptr);
-               TALLOC_FREE(dir_hnd);
-               return NT_STATUS_NO_MEMORY;
-       }
        dptr->conn = conn;
        dptr->dir_hnd = dir_hnd;
-       dptr->spid = spid;
-       dptr->expect_close = expect_close;
        dptr->wcard = talloc_strdup(dptr, wcard);
        if (!dptr->wcard) {
                TALLOC_FREE(dptr);
                TALLOC_FREE(dir_hnd);
                return NT_STATUS_NO_MEMORY;
        }
-       if ((req != NULL && req->posix_pathnames) ||
-                       (wcard[0] == '.' && wcard[1] == 0)) {
+       if ((req != NULL && req->posix_pathnames) || ISDOT(wcard)) {
                dptr->has_wild = True;
        } else {
                dptr->has_wild = ms_has_wild(dptr->wcard);
@@ -323,8 +309,8 @@ NTSTATUS dptr_create(connection_struct *conn,
        DLIST_ADD(sconn->searches.dirptrs, dptr);
 
 done:
-       DBG_INFO("creating new dirptr [%d] for path [%s], expect_close = %d\n",
-                dptr->dnum, fsp_str_dbg(fsp), expect_close);
+       DBG_INFO("creating new dirptr [%d] for path [%s]\n",
+                dptr->dnum, fsp_str_dbg(fsp));
 
        *dptr_ret = dptr;
 
@@ -460,7 +446,7 @@ static char *dptr_ReadDirName(TALLOC_CTX *ctx,
 
        pathreal = talloc_asprintf(ctx,
                                "%s/%s",
-                               dptr->smb_dname->base_name,
+                               dptr->dir_hnd->dir_smb_fname->base_name,
                                dptr->wcard);
        if (!pathreal)
                return NULL;
@@ -469,7 +455,7 @@ static char *dptr_ReadDirName(TALLOC_CTX *ctx,
        smb_fname_base = (struct smb_filename) {
                .base_name = pathreal,
                .flags = dptr->dir_hnd->fsp->fsp_name->flags,
-               .twrp = dptr->smb_dname->twrp,
+               .twrp = dptr->dir_hnd->fsp->fsp_name->twrp,
        };
 
        if (vfs_stat(dptr->conn, &smb_fname_base) == 0) {
@@ -708,8 +694,10 @@ files_struct *dptr_fetch_fsp(struct smbd_server_connection 
*sconn,
        wire_offset = IVAL(buf,1);
        seekoff = map_wire_to_dir_offset(dptr, wire_offset);
        SeekDir(dptr->dir_hnd,seekoff);
-       DEBUG(3,("fetching dirptr %d for path %s at offset %d\n",
-               key, dptr->smb_dname->base_name, (int)seekoff));
+       DBG_NOTICE("fetching dirptr %d for path %s at offset %ld\n",
+                  key,
+                  dptr->dir_hnd->dir_smb_fname->base_name,
+                  seekoff);
        return dptr->dir_hnd->fsp;
 }
 
@@ -730,8 +718,8 @@ files_struct *dptr_fetch_lanman2_fsp(struct 
smbd_server_connection *sconn,
                return NULL;
        }
        DBG_NOTICE("fetching dirptr %d for path %s\n",
-               dptr_num,
-               dptr->smb_dname->base_name);
+                  dptr_num,
+                  dptr->dir_hnd->dir_smb_fname->base_name);
        return dptr->dir_hnd->fsp;
 }
 
@@ -775,7 +763,7 @@ bool smbd_dirptr_get_entry(TALLOC_CTX *ctx,
        connection_struct *conn = dirptr->conn;
        size_t slashlen;
        size_t pathlen;
-       const char *dpath = dirptr->smb_dname->base_name;
+       const char *dpath = dirptr->dir_hnd->dir_smb_fname->base_name;
        bool dirptr_path_is_dot = ISDOT(dpath);
        NTSTATUS status;
        int ret;
@@ -806,7 +794,8 @@ bool smbd_dirptr_get_entry(TALLOC_CTX *ctx,
                dname = dptr_ReadDirName(ctx, dirptr, &cur_offset, &sbuf);
 
                DBG_DEBUG("dir [%s] dirptr [0x%lx] offset [%ld] => dname 
[%s]\n",
-                         smb_fname_str_dbg(dirptr->smb_dname), (long)dirptr,
+                         smb_fname_str_dbg(dirptr->dir_hnd->dir_smb_fname),
+                         (long)dirptr,
                          cur_offset, dname ? dname : "(finished)");
 
                if (dname == NULL) {
@@ -866,12 +855,13 @@ bool smbd_dirptr_get_entry(TALLOC_CTX *ctx,
                }
 
                /* Create smb_fname with NULL stream_name. */
-               smb_fname = synthetic_smb_fname(talloc_tos(),
-                                               pathreal,
-                                               NULL,
-                                               &sbuf,
-                                               dirptr->smb_dname->twrp,
-                                               dirptr->smb_dname->flags);
+               smb_fname = synthetic_smb_fname(
+                       talloc_tos(),
+                       pathreal,
+                       NULL,
+                       &sbuf,
+                       dirptr->dir_hnd->dir_smb_fname->twrp,
+                       dirptr->dir_hnd->dir_smb_fname->flags);
                TALLOC_FREE(pathreal);
                if (smb_fname == NULL) {
                        TALLOC_FREE(dname);
@@ -896,12 +886,13 @@ bool smbd_dirptr_get_entry(TALLOC_CTX *ctx,
                }
 
                /* Create smb_fname with NULL stream_name. */
-               atname = synthetic_smb_fname(talloc_tos(),
-                                            dname,
-                                            NULL,
-                                            &smb_fname->st,
-                                            dirptr->smb_dname->twrp,
-                                            dirptr->smb_dname->flags);
+               atname = synthetic_smb_fname(
+                       talloc_tos(),
+                       dname,
+                       NULL,
+                       &smb_fname->st,
+                       dirptr->dir_hnd->dir_smb_fname->twrp,
+                       dirptr->dir_hnd->dir_smb_fname->flags);
                if (atname == NULL) {
                        TALLOC_FREE(dname);
                        TALLOC_FREE(fname);
@@ -1689,31 +1680,36 @@ void RewindDir(struct smb_Dir *dir_hnd, long *poffset)
 
 void SeekDir(struct smb_Dir *dirp, long offset)
 {
-       if (offset != dirp->offset) {
-               if (offset == START_OF_DIRECTORY_OFFSET) {
-                       RewindDir(dirp, &offset);
-                       /*
-                        * Ok we should really set the file number here
-                        * to 1 to enable ".." to be returned next. Trouble
-                        * is I'm worried about callers using SeekDir(dirp,0)
-                        * as equivalent to RewindDir(). So leave this alone
-                        * for now.
-                        */
-               } else if  (offset == DOT_DOT_DIRECTORY_OFFSET) {
-                       RewindDir(dirp, &offset);
-                       /*
-                        * Set the file number to 2 - we want to get the first
-                        * real file entry (the one we return after "..")
-                        * on the next ReadDir.
-                        */
-                       dirp->file_number = 2;
-               } else if (offset == END_OF_DIRECTORY_OFFSET) {
-                       ; /* Don't seek in this case. */
-               } else {
-                       SMB_VFS_SEEKDIR(dirp->conn, dirp->dir, offset);
-               }
-               dirp->offset = offset;
+       if (offset == dirp->offset) {
+               /*
+                * Nothing to do
+                */
+               return;
+       }
+
+       if (offset == START_OF_DIRECTORY_OFFSET) {
+               RewindDir(dirp, &offset);
+               /*
+                * Ok we should really set the file number here
+                * to 1 to enable ".." to be returned next. Trouble
+                * is I'm worried about callers using SeekDir(dirp,0)
+                * as equivalent to RewindDir(). So leave this alone
+                * for now.
+                */
+       } else if  (offset == DOT_DOT_DIRECTORY_OFFSET) {
+               RewindDir(dirp, &offset);
+               /*
+                * Set the file number to 2 - we want to get the first
+                * real file entry (the one we return after "..")
+                * on the next ReadDir.
+                */
+               dirp->file_number = 2;
+       } else if (offset == END_OF_DIRECTORY_OFFSET) {
+               ; /* Don't seek in this case. */
+       } else {
+               SMB_VFS_SEEKDIR(dirp->conn, dirp->dir, offset);
        }
+       dirp->offset = offset;
 }
 
 /*******************************************************************
diff --git a/source3/smbd/proto.h b/source3/smbd/proto.h
index 32e5c33896b..486d136bfbb 100644
--- a/source3/smbd/proto.h
+++ b/source3/smbd/proto.h
@@ -187,8 +187,6 @@ NTSTATUS dptr_create(connection_struct *conn,
                struct smb_request *req,
                files_struct *fsp,
                bool old_handle,
-               bool expect_close,
-               uint16_t spid,
                const char *wcard,
                uint32_t attr,
                struct dptr_struct **dptr_ret);
diff --git a/source3/smbd/smb1_reply.c b/source3/smbd/smb1_reply.c
index de6b4d99f79..1041e4f843b 100644
--- a/source3/smbd/smb1_reply.c
+++ b/source3/smbd/smb1_reply.c
@@ -1179,8 +1179,6 @@ void reply_search(struct smb_request *req)
                                        NULL, /* req */
                                        fsp, /* fsp */
                                        True,
-                                       expect_close,
-                                       req->smbpid,
                                        mask,
                                        dirtype,
                                        &fsp->dptr);
diff --git a/source3/smbd/smb1_trans2.c b/source3/smbd/smb1_trans2.c
index 336024c9456..87c5ec697b5 100644
--- a/source3/smbd/smb1_trans2.c
+++ b/source3/smbd/smb1_trans2.c
@@ -1059,8 +1059,6 @@ total_data=%u (should be %u)\n", (unsigned 
int)total_data, (unsigned int)IVAL(pd
                                req,
                                fsp, /* fsp */
                                False,
-                               True,
-                               req->smbpid,
                                mask,
                                dirtype,
                                &fsp->dptr);
diff --git a/source3/smbd/smb2_query_directory.c 
b/source3/smbd/smb2_query_directory.c
index 2d58741738c..250b56633bb 100644
--- a/source3/smbd/smb2_query_directory.c
+++ b/source3/smbd/smb2_query_directory.c
@@ -426,8 +426,6 @@ static struct tevent_req 
*smbd_smb2_query_directory_send(TALLOC_CTX *mem_ctx,
                                     NULL, /* req */
                                     fsp,
                                     false, /* old_handle */
-                                    false, /* expect_close */
-                                    0, /* spid */
                                     state->in_file_name, /* wcard */
                                     state->dirtype,
                                     &fsp->dptr);


-- 
Samba Shared Repository

Reply via email to