1
0
mirror of https://github.com/samba-team/samba.git synced 2025-02-04 17:47:26 +03:00

s3: smbd: Remove the old dfs_path_lookup() code.

BUG: https://bugzilla.samba.org/show_bug.cgi?id=15144

Signed-off-by: Jeremy Allison <jra@samba.org>
Reviewed-by: Ralph Boehme <slow@samba.org>
This commit is contained in:
Jeremy Allison 2022-08-09 12:13:10 -07:00
parent 88e8bfec59
commit cc638c25e0

View File

@ -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 <Jan.Martin@rwedea.com>.
*/
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