From: Jeremy Allison Date: Tue, 9 Aug 2022 19:13:10 +0000 (-0700) Subject: s3: smbd: Remove the old dfs_path_lookup() code. X-Git-Tag: talloc-2.4.0~1446 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=cc638c25e0332d366016880d174d9349940cba3f;p=thirdparty%2Fsamba.git s3: smbd: Remove the old dfs_path_lookup() code. BUG: https://bugzilla.samba.org/show_bug.cgi?id=15144 Signed-off-by: Jeremy Allison Reviewed-by: Ralph Boehme --- diff --git a/source3/smbd/msdfs.c b/source3/smbd/msdfs.c index 55ab12a75e3..4819df35837 100644 --- a/source3/smbd/msdfs.c +++ b/source3/smbd/msdfs.c @@ -972,197 +972,6 @@ static NTSTATUS dfs_path_lookup(TALLOC_CTX *ctx, return status; } -#if 0 -/***************************************************************** - Used by other functions to decide if a dfs path is remote, - and to get the list of referred locations for that remote path. - - consumedcntp: how much of the dfs path is being redirected. the client - should try the remaining path on the redirected server. - - If this returns NT_STATUS_PATH_NOT_COVERED the contents of the msdfs - link redirect are in targetpath. -*****************************************************************/ - -static NTSTATUS dfs_path_lookup(TALLOC_CTX *ctx, - connection_struct *conn, - const char *dfspath, /* Incoming complete dfs path */ - const char *reqpath, /* Parsed out remaining path. */ - uint32_t ucf_flags, - NTTIME *_twrp, - size_t *consumedcntp, - struct referral **ppreflist, - size_t *preferral_count) -{ - char *p = NULL; - char *q = NULL; - NTSTATUS status; - struct smb_filename *smb_fname = NULL; - struct smb_filename *parent_fname = NULL; - struct smb_filename *atname = NULL; - char *canon_dfspath = NULL; /* Canonicalized dfs path. (only '/' - components). */ - - DEBUG(10,("dfs_path_lookup: Conn path = %s reqpath = %s\n", - conn->connectpath, reqpath)); - - /* - * Note the unix path conversion here we're doing we - * throw away. We're looking for a symlink for a dfs - * resolution, if we don't find it we'll do another - * unix_convert later in the codepath. - */ - - status = unix_convert(ctx, conn, reqpath, 0, &smb_fname, - ucf_flags); - - if (!NT_STATUS_IS_OK(status)) { - if (!NT_STATUS_EQUAL(status, - NT_STATUS_OBJECT_PATH_NOT_FOUND)) { - return status; - } - if (smb_fname == NULL || smb_fname->base_name == NULL) { - return status; - } - } - - /* Optimization - check if we can redirect the whole path. */ - status = parent_pathref(ctx, - conn->cwd_fsp, - smb_fname, - &parent_fname, - &atname); - if (NT_STATUS_IS_OK(status)) { - /* - * We must have a parent_fname->fsp before - * we can call SMB_VFS_READ_DFS_PATHAT(). - */ - status = SMB_VFS_READ_DFS_PATHAT(conn, - ctx, - parent_fname->fsp, - atname, - ppreflist, - preferral_count); - /* We're now done with parent_fname and atname. */ - TALLOC_FREE(parent_fname); - - if (NT_STATUS_IS_OK(status)) { - DBG_INFO("%s resolves to a valid dfs link\n", - dfspath); - - if (consumedcntp) { - *consumedcntp = strlen(dfspath); - } - status = NT_STATUS_PATH_NOT_COVERED; - goto out; - } - } - - /* Prepare to test only for '/' components in the given path, - * so if a Windows path replace all '\\' characters with '/'. - * For a POSIX DFS path we know all separators are already '/'. */ - - canon_dfspath = talloc_strdup(ctx, dfspath); - if (!canon_dfspath) { - status = NT_STATUS_NO_MEMORY; - goto out; - } - string_replace(canon_dfspath, '\\', '/'); - - /* - * localpath comes out of unix_convert, so it has - * no trailing backslash. Make sure that canon_dfspath hasn't either. - * Fix for bug #4860 from Jan Martin . - */ - - trim_char(canon_dfspath,0,'/'); - - /* - * Redirect if any component in the path is a link. - * We do this by walking backwards through the - * local path, chopping off the last component - * in both the local path and the canonicalized - * DFS path. If we hit a DFS link then we're done. - */ - - p = strrchr_m(smb_fname->base_name, '/'); - if (consumedcntp) { - q = strrchr_m(canon_dfspath, '/'); - } - - while (p) { - *p = '\0'; - if (q) { - *q = '\0'; - } - - /* - * Ensure parent_pathref() calls vfs_stat() on - * the newly truncated path. - */ - SET_STAT_INVALID(smb_fname->st); - status = parent_pathref(ctx, - conn->cwd_fsp, - smb_fname, - &parent_fname, - &atname); - if (NT_STATUS_IS_OK(status)) { - /* - * We must have a parent_fname->fsp before - * we can call SMB_VFS_READ_DFS_PATHAT(). - */ - status = SMB_VFS_READ_DFS_PATHAT(conn, - ctx, - parent_fname->fsp, - atname, - ppreflist, - preferral_count); - - /* We're now done with parent_fname and atname. */ - TALLOC_FREE(parent_fname); - - if (NT_STATUS_IS_OK(status)) { - DBG_INFO("Redirecting %s because " - "parent %s is a dfs link\n", - dfspath, - smb_fname_str_dbg(smb_fname)); - - if (consumedcntp) { - *consumedcntp = strlen(canon_dfspath); - DBG_DEBUG("Path consumed: %s " - "(%zu)\n", - canon_dfspath, - *consumedcntp); - } - - status = NT_STATUS_PATH_NOT_COVERED; - goto out; - } - } - - /* Step back on the filesystem. */ - p = strrchr_m(smb_fname->base_name, '/'); - - if (consumedcntp) { - /* And in the canonicalized dfs path. */ - q = strrchr_m(canon_dfspath, '/'); - } - } - - if ((ucf_flags & UCF_GMT_PATHNAME) && _twrp != NULL) { - *_twrp = smb_fname->twrp; - } - - status = NT_STATUS_OK; - out: - - /* This should already be free, but make sure. */ - TALLOC_FREE(parent_fname); - TALLOC_FREE(smb_fname); - return status; -} -#endif - /***************************************************************** Decides if a dfs pathname should be redirected or not. If not, the pathname is converted to a tcon-relative local unix path