1
0
mirror of https://github.com/samba-team/samba.git synced 2024-12-23 17:34:34 +03:00

smbclient: Use cli_checkpath in "cd" command

No need for special qpathinfo_basic code

Signed-off-by: Volker Lendecke <vl@samba.org>
Reviewed-by: Jeremy Allison <jra@samba.org>
This commit is contained in:
Volker Lendecke 2021-10-26 10:14:28 +02:00 committed by Jeremy Allison
parent c0fda0bd62
commit 8820101cd0

View File

@ -388,8 +388,6 @@ static int do_cd(const char *new_dir)
char *new_cd = NULL; char *new_cd = NULL;
char *targetpath = NULL; char *targetpath = NULL;
struct cli_state *targetcli = NULL; struct cli_state *targetcli = NULL;
SMB_STRUCT_STAT sbuf;
uint32_t attributes;
int ret = 1; int ret = 1;
TALLOC_CTX *ctx = talloc_stackframe(); TALLOC_CTX *ctx = talloc_stackframe();
struct cli_credentials *creds = samba_cmdline_get_creds(); struct cli_credentials *creds = samba_cmdline_get_creds();
@ -449,46 +447,24 @@ static int do_cd(const char *new_dir)
return 0; return 0;
} }
/* Use a trans2_qpathinfo to test directories for modern servers.
Except Win9x doesn't support the qpathinfo_basic() call..... */
if (smbXcli_conn_protocol(targetcli->conn) > PROTOCOL_LANMAN2 && !targetcli->win95) { targetpath = talloc_asprintf(
ctx, "%s%s", targetpath, CLI_DIRSEP_STR);
if (!targetpath) {
client_set_cur_dir(saved_dir);
goto out;
}
targetpath = client_clean_name(ctx, targetpath);
if (!targetpath) {
client_set_cur_dir(saved_dir);
goto out;
}
status = cli_qpathinfo_basic(targetcli, targetpath, &sbuf, status = cli_chkpath(targetcli, targetpath);
&attributes); if (!NT_STATUS_IS_OK(status)) {
if (!NT_STATUS_IS_OK(status)) { d_printf("cd %s: %s\n", new_cd, nt_errstr(status));
d_printf("cd %s: %s\n", new_cd, nt_errstr(status)); client_set_cur_dir(saved_dir);
client_set_cur_dir(saved_dir); goto out;
goto out;
}
if (!(attributes & FILE_ATTRIBUTE_DIRECTORY)) {
d_printf("cd %s: not a directory\n", new_cd);
client_set_cur_dir(saved_dir);
goto out;
}
} else {
targetpath = talloc_asprintf(ctx,
"%s%s",
targetpath,
CLI_DIRSEP_STR );
if (!targetpath) {
client_set_cur_dir(saved_dir);
goto out;
}
targetpath = client_clean_name(ctx, targetpath);
if (!targetpath) {
client_set_cur_dir(saved_dir);
goto out;
}
status = cli_chkpath(targetcli, targetpath);
if (!NT_STATUS_IS_OK(status)) {
d_printf("cd %s: %s\n", new_cd, nt_errstr(status));
client_set_cur_dir(saved_dir);
goto out;
}
} }
ret = 0; ret = 0;