The branch, master has been updated
       via  25a222225db ctdb: Use str_list_add_printf() in lock_helper_args()
       via  83716809a8f ctdb: Change the ctdb_vfork_exec prototype to const 
char*const*
       via  cc76e2c7d7d smbd: We can expect the file to exist in 
is_visible_fsp()
      from  81ecdb125bf auth: Fix CID 1615191 Uninitialized scalar variable

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


- Log -----------------------------------------------------------------
commit 25a222225db1779d09d8c97aee6b5d9be1c6dbe8
Author: Volker Lendecke <v...@samba.org>
Date:   Thu Sep 19 17:32:42 2024 +0200

    ctdb: Use str_list_add_printf() in lock_helper_args()
    
    Saves lines, str_list_add_printf takes care of NULL checks
    
    Signed-off-by: Volker Lendecke <v...@samba.org>
    Reviewed-by: Martin Schwenke <mar...@meltin.net>
    
    Autobuild-User(master): Martin Schwenke <mart...@samba.org>
    Autobuild-Date(master): Sun Sep 22 10:44:59 UTC 2024 on atb-devel-224

commit 83716809a8ff0057aa5ef58b6f951b8d5197c67f
Author: Volker Lendecke <v...@samba.org>
Date:   Fri Sep 20 02:54:57 2024 +0200

    ctdb: Change the ctdb_vfork_exec prototype to const char*const*
    
    I could not find out how to cast a char ** to const char ** without
    warning. This transfers fine to the execv call as well.
    
    Signed-off-by: Volker Lendecke <v...@samba.org>
    Reviewed-by: Martin Schwenke <mar...@meltin.net>

commit cc76e2c7d7d2535a736420283a38a89f17f5c21e
Author: Volker Lendecke <v...@samba.org>
Date:   Thu Sep 19 16:09:43 2024 +0200

    smbd: We can expect the file to exist in is_visible_fsp()
    
    Another leftover from symlinks in posix context to not open an fsp
    
    Signed-off-by: Volker Lendecke <v...@samba.org>
    Reviewed-by: Jeremy Allison <j...@samba.org>

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

Summary of changes:
 ctdb/include/ctdb_private.h |  8 ++--
 ctdb/server/ctdb_fork.c     |  8 ++--
 ctdb/server/ctdb_lock.c     | 92 ++++++++++++++++-----------------------------
 source3/smbd/dir.c          |  9 -----
 4 files changed, 43 insertions(+), 74 deletions(-)


Changeset truncated at 500 lines:

diff --git a/ctdb/include/ctdb_private.h b/ctdb/include/ctdb_private.h
index 88f775ce126..b36eaa08a08 100644
--- a/ctdb/include/ctdb_private.h
+++ b/ctdb/include/ctdb_private.h
@@ -609,9 +609,11 @@ int switch_from_server_to_client(struct ctdb_context 
*ctdb);
 void ctdb_track_child(struct ctdb_context *ctdb, pid_t pid);
 
 pid_t ctdb_fork(struct ctdb_context *ctdb);
-pid_t ctdb_vfork_exec(TALLOC_CTX *mem_ctx, struct ctdb_context *ctdb,
-                     const char *helper, int helper_argc,
-                     const char **helper_argv);
+pid_t ctdb_vfork_exec(TALLOC_CTX *mem_ctx,
+                     struct ctdb_context *ctdb,
+                     const char *helper,
+                     int helper_argc,
+                     const char *const *helper_argv);
 
 struct tevent_signal *ctdb_init_sigchld(struct ctdb_context *ctdb);
 
diff --git a/ctdb/server/ctdb_fork.c b/ctdb/server/ctdb_fork.c
index 1065423199d..8f3e0896b32 100644
--- a/ctdb/server/ctdb_fork.c
+++ b/ctdb/server/ctdb_fork.c
@@ -105,9 +105,11 @@ pid_t ctdb_fork(struct ctdb_context *ctdb)
 /*
  * vfork + exec
  */
-pid_t ctdb_vfork_exec(TALLOC_CTX *mem_ctx, struct ctdb_context *ctdb,
-                     const char *helper, int helper_argc,
-                     const char **helper_argv)
+pid_t ctdb_vfork_exec(TALLOC_CTX *mem_ctx,
+                     struct ctdb_context *ctdb,
+                     const char *helper,
+                     int helper_argc,
+                     const char *const *helper_argv)
 {
        pid_t pid;
        struct timeval before;
diff --git a/ctdb/server/ctdb_lock.c b/ctdb/server/ctdb_lock.c
index d526413454e..4231313b654 100644
--- a/ctdb/server/ctdb_lock.c
+++ b/ctdb/server/ctdb_lock.c
@@ -606,68 +606,39 @@ skip_lock_debug:
                                            (void *)lock_ctx);
 }
 
-static bool lock_helper_args(TALLOC_CTX *mem_ctx,
-                            struct lock_context *lock_ctx, int fd,
-                            int *argc, const char ***argv)
+static char **lock_helper_args(TALLOC_CTX *mem_ctx,
+                              struct lock_context *lock_ctx,
+                              int fd)
 {
-       const char **args = NULL;
-       int nargs = 0, i;
-
-       switch (lock_ctx->type) {
-       case LOCK_RECORD:
-               nargs = 6;
-               break;
-
-       case LOCK_DB:
-               nargs = 5;
-               break;
-       }
-
-       /* Add extra argument for null termination */
-       nargs++;
+       int tdb_flags = tdb_get_flags(lock_ctx->ctdb_db->ltdb->tdb);
+       char **args = str_list_make_empty(mem_ctx);
 
-       args = talloc_array(mem_ctx, const char *, nargs);
-       if (args == NULL) {
-               return false;
-       }
+       str_list_add_printf(&args, "%d", getpid());
+       str_list_add_printf(&args, "%d", fd);
+       str_list_add_printf(&args,
+                           "%s",
+                           (lock_ctx->type == LOCK_RECORD) ? "RECORD" : "DB");
 
-       args[0] = talloc_asprintf(args, "%d", getpid());
-       args[1] = talloc_asprintf(args, "%d", fd);
+       str_list_add_printf(&args, "%s", lock_ctx->ctdb_db->db_path);
+       str_list_add_printf(&args, "0x%x", tdb_flags);
 
-       switch (lock_ctx->type) {
-       case LOCK_RECORD:
-               args[2] = talloc_strdup(args, "RECORD");
-               args[3] = talloc_strdup(args, lock_ctx->ctdb_db->db_path);
-               args[4] = talloc_asprintf(args, "0x%x",
-                               tdb_get_flags(lock_ctx->ctdb_db->ltdb->tdb));
+       if (lock_ctx->type == LOCK_RECORD) {
                if (lock_ctx->key.dsize == 0) {
-                       args[5] = talloc_strdup(args, "NULL");
+                       str_list_add_printf(&args, "NULL");
                } else {
-                       args[5] = hex_encode_talloc(args, lock_ctx->key.dptr, 
lock_ctx->key.dsize);
-               }
-               break;
-
-       case LOCK_DB:
-               args[2] = talloc_strdup(args, "DB");
-               args[3] = talloc_strdup(args, lock_ctx->ctdb_db->db_path);
-               args[4] = talloc_asprintf(args, "0x%x",
-                               tdb_get_flags(lock_ctx->ctdb_db->ltdb->tdb));
-               break;
-       }
-
-       /* Make sure last argument is NULL */
-       args[nargs-1] = NULL;
-
-       for (i=0; i<nargs-1; i++) {
-               if (args[i] == NULL) {
-                       talloc_free(args);
-                       return false;
+                       char *hex = hex_encode_talloc(mem_ctx,
+                                                     lock_ctx->key.dptr,
+                                                     lock_ctx->key.dsize);
+                       if (hex == NULL) {
+                               TALLOC_FREE(args);
+                               return NULL;
+                       }
+                       str_list_add_printf(&args, "%s", hex);
+                       TALLOC_FREE(hex);
                }
        }
 
-       *argc = nargs;
-       *argv = args;
-       return true;
+       return args;
 }
 
 /*
@@ -733,10 +704,10 @@ static struct lock_context *ctdb_find_lock_context(struct 
ctdb_context *ctdb)
 static void ctdb_lock_schedule(struct ctdb_context *ctdb)
 {
        struct lock_context *lock_ctx;
-       int ret, argc;
+       int ret;
        TALLOC_CTX *tmp_ctx;
        static char prog[PATH_MAX+1] = "";
-       const char **args;
+       char **args = NULL;
 
        if (!ctdb_set_helper("lock helper",
                             prog, sizeof(prog),
@@ -779,8 +750,8 @@ static void ctdb_lock_schedule(struct ctdb_context *ctdb)
        }
 
        /* Create arguments for lock helper */
-       if (!lock_helper_args(tmp_ctx, lock_ctx, lock_ctx->fd[1],
-                             &argc, &args)) {
+       args = lock_helper_args(tmp_ctx, lock_ctx, lock_ctx->fd[1]);
+       if (args == NULL) {
                DEBUG(DEBUG_ERR, ("Failed to create lock helper args\n"));
                close(lock_ctx->fd[0]);
                close(lock_ctx->fd[1]);
@@ -788,8 +759,11 @@ static void ctdb_lock_schedule(struct ctdb_context *ctdb)
                return;
        }
 
-       lock_ctx->child = ctdb_vfork_exec(lock_ctx, ctdb, prog, argc,
-                                         (const char **)args);
+       lock_ctx->child = ctdb_vfork_exec(lock_ctx,
+                                         ctdb,
+                                         prog,
+                                         talloc_array_length(args),
+                                         (const char *const *)args);
        if (lock_ctx->child == -1) {
                DEBUG(DEBUG_ERR, ("Failed to create a child in 
ctdb_lock_schedule\n"));
                close(lock_ctx->fd[0]);
diff --git a/source3/smbd/dir.c b/source3/smbd/dir.c
index 147515fe2f5..406db604f8e 100644
--- a/source3/smbd/dir.c
+++ b/source3/smbd/dir.c
@@ -921,15 +921,6 @@ bool is_visible_fsp(struct files_struct *fsp)
        int hide_new_files_timeout = 0;
        const char *last_component = NULL;
 
-       /*
-        * If the file does not exist, there's no point checking
-        * the configuration options. We succeed, on the basis that the
-        * checks *might* have passed if the file was present.
-        */
-       if (fsp == NULL) {
-               return true;
-       }
-
        hide_unreadable = lp_hide_unreadable(SNUM(fsp->conn));
        hide_unwriteable = lp_hide_unwriteable_files(SNUM(fsp->conn));
        hide_special = lp_hide_special_files(SNUM(fsp->conn));


-- 
Samba Shared Repository

Reply via email to