]> git.ipfire.org Git - thirdparty/samba.git/commitdiff
smbd: Add vfs_ChDir_shareroot() wrapper
authorVolker Lendecke <vl@samba.org>
Thu, 12 Feb 2026 19:01:48 +0000 (20:01 +0100)
committerVolker Lendecke <vl@samba.org>
Sun, 1 Mar 2026 20:19:35 +0000 (20:19 +0000)
Clarify where we just change to the root of the export.

Signed-off-by: Volker Lendecke <vl@samba.org>
Reviewed-by: Anoop C S <anoopcs@samba.org>
source3/modules/vfs_default.c
source3/rpc_server/mdssvc/mdssvc.c
source3/smbd/msdfs.c
source3/smbd/proto.h
source3/smbd/smb2_service.c
source3/smbd/vfs.c

index 21fab6c5d31560bb1358e5cbd0ac948b5d70f213..a82958120fd531b895261eddc31296241b8145bf 100644 (file)
@@ -242,13 +242,7 @@ static NTSTATUS vfswrap_get_dfs_referrals(struct vfs_handle_struct *handle,
                                   handle->conn->sconn->remote_address,
                                   handle->conn->sconn->local_address,
                                   junction, &consumedcnt, &self_referral);
-
-       {
-               struct smb_filename connectpath_fname = {
-                       .base_name = handle->conn->connectpath
-               };
-               vfs_ChDir(handle->conn, &connectpath_fname);
-       }
+       vfs_ChDir_shareroot(handle->conn);
 
        if (!NT_STATUS_IS_OK(status)) {
                return status;
index 8704623a30f624b1d80322aab45a69b1db7b7cc3..d2286819eca48948e6672a086f4f6d1d46e1a9aa 100644 (file)
@@ -1647,7 +1647,6 @@ NTSTATUS mds_init_ctx(TALLOC_CTX *mem_ctx,
 {
        const struct loadparm_substitution *lp_sub =
                loadparm_s3_global_substitution();
-       struct smb_filename conn_basedir;
        struct mds_ctx *mds_ctx;
        int backend;
        int ret;
@@ -1752,14 +1751,11 @@ NTSTATUS mds_init_ctx(TALLOC_CTX *mem_ctx,
                goto error;
        }
 
-       conn_basedir = (struct smb_filename) {
-               .base_name = mds_ctx->conn->connectpath,
-       };
-
-       ret = vfs_ChDir(mds_ctx->conn, &conn_basedir);
+       ret = vfs_ChDir_shareroot(mds_ctx->conn);
        if (ret != 0) {
-               DBG_ERR("vfs_ChDir [%s] failed: %s\n",
-                       conn_basedir.base_name, strerror(errno));
+               DBG_ERR("vfs_ChDir_shareroot [%s] failed: %s\n",
+                       mds_ctx->conn->connectpath,
+                       strerror(errno));
                status = map_nt_error_from_unix(errno);
                goto error;
        }
@@ -1800,9 +1796,6 @@ bool mds_dispatch(struct mds_ctx *mds_ctx,
        DALLOC_CTX *reply = NULL;
        char *rpccmd;
        const struct slrpc_cmd *slcmd;
-       const struct smb_filename conn_basedir = {
-               .base_name = mds_ctx->conn->connectpath,
-       };
        NTSTATUS status;
 
        if (CHECK_DEBUGLVL(10)) {
@@ -1855,10 +1848,11 @@ bool mds_dispatch(struct mds_ctx *mds_ctx,
                goto cleanup;
        }
 
-       ret = vfs_ChDir(mds_ctx->conn, &conn_basedir);
+       ret = vfs_ChDir_shareroot(mds_ctx->conn);
        if (ret != 0) {
-               DBG_ERR("vfs_ChDir [%s] failed: %s\n",
-                       conn_basedir.base_name, strerror(errno));
+               DBG_ERR("vfs_ChDir_shareroot [%s] failed: %s\n",
+                       mds_ctx->conn->connectpath,
+                       strerror(errno));
                ok = false;
                goto cleanup;
        }
index 721faab2cc91b4c8b336420eeb03dd993bc2aed5..1bd8e91fd88dafd92c7e38e0be352f6c645c6017 100644 (file)
@@ -386,8 +386,8 @@ NTSTATUS create_conn_struct_tos_cwd(struct messaging_context *msg,
                                    struct conn_struct_tos **_c)
 {
        struct conn_struct_tos *c = NULL;
-       struct smb_filename smb_fname_connectpath = {0};
        NTSTATUS status;
+       int ret;
 
        *_c = NULL;
 
@@ -414,11 +414,8 @@ NTSTATUS create_conn_struct_tos_cwd(struct messaging_context *msg,
                return status;
        }
 
-       smb_fname_connectpath = (struct smb_filename) {
-               .base_name = c->conn->connectpath
-       };
-
-       if (vfs_ChDir(c->conn, &smb_fname_connectpath) != 0) {
+       ret = vfs_ChDir_shareroot(c->conn);
+       if (ret != 0) {
                status = map_nt_error_from_unix(errno);
                DBG_NOTICE("Can't ChDir to new conn path %s. "
                           "Error was %s\n",
index e4996a377230e382387e733d66e4289b45b6a0fd..2b0902a565df955640f5f0c97bdcbdd5167a0e61 100644 (file)
@@ -1189,6 +1189,7 @@ const char *vfs_readdirname(connection_struct *conn,
                            char **talloced);
 int vfs_ChDir(connection_struct *conn,
                        const struct smb_filename *smb_fname);
+int vfs_ChDir_shareroot(connection_struct *conn);
 struct smb_filename *vfs_GetWd(TALLOC_CTX *ctx, connection_struct *conn);
 int vfs_stat(struct connection_struct *conn,
             struct smb_filename *smb_fname);
index d687f97f5c80a6c94a730f1f64abf07d48d3a9ef..b2aaeaa11c2e8d08673c14aa1143da5a7701fb68 100644 (file)
@@ -108,16 +108,13 @@ static char *utok_string(TALLOC_CTX *mem_ctx,
 
 bool chdir_current_service(connection_struct *conn)
 {
-       const struct smb_filename connectpath_fname = {
-               .base_name = conn->connectpath,
-       };
        int saved_errno = 0;
        char *utok_str = NULL;
        int ret;
 
        conn->lastused_count++;
 
-       ret = vfs_ChDir(conn, &connectpath_fname);
+       ret = vfs_ChDir_shareroot(conn);
        if (ret == 0) {
                return true;
        }
@@ -130,7 +127,7 @@ bool chdir_current_service(connection_struct *conn)
                return false;
        }
 
-       DBG_ERR("vfs_ChDir(%s) failed: %s. Current token: %s\n",
+       DBG_ERR("vfs_ChDir_shareroot(%s) failed: %s. Current token: %s\n",
                conn->connectpath,
                strerror(saved_errno),
                utok_str);
index 06601fb90f8465ff7521917beaa93383ef481d2b..e8656f4ee96c12706eddf3a28ca566758462e4a0 100644 (file)
@@ -1013,6 +1013,15 @@ int vfs_ChDir(connection_struct *conn, const struct smb_filename *smb_fname)
        return ret;
 }
 
+int vfs_ChDir_shareroot(connection_struct *conn)
+{
+       const struct smb_filename connectpath_fname = {
+               .base_name = conn->connectpath,
+       };
+       int ret = vfs_ChDir(conn, &connectpath_fname);
+       return ret;
+}
+
 /*******************************************************************
  Return the absolute current directory path - given a UNIX pathname.
  Note that this path is returned in DOS format, not UNIX