git.samba.org
/
metze
/
samba
/
wip.git
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
|
inline
| side by side (parent:
7c38865
)
TODO use cli_state_dup
author
Stefan Metzmacher
<metze@samba.org>
Wed, 21 Jun 2017 13:41:33 +0000
(15:41 +0200)
committer
Stefan Metzmacher
<metze@samba.org>
Mon, 18 Feb 2019 11:47:34 +0000
(12:47 +0100)
source3/libsmb/clidfs.c
patch
|
blob
|
history
diff --git
a/source3/libsmb/clidfs.c
b/source3/libsmb/clidfs.c
index d49c48859fff9dae90d081b2cd1e83bed0a71ac2..187847fed176a55a01fbf604c7ba121c1e2a9092 100644
(file)
--- a/
source3/libsmb/clidfs.c
+++ b/
source3/libsmb/clidfs.c
@@
-918,6
+918,8
@@
NTSTATUS cli_resolve_path(TALLOC_CTX *ctx,
SMB_STRUCT_STAT sbuf;
uint32_t attributes;
NTSTATUS status;
SMB_STRUCT_STAT sbuf;
uint32_t attributes;
NTSTATUS status;
+ struct cli_credentials *dfs_creds = NULL;
+ bool force_encryption = true;
struct smbXcli_tcon *root_tcon = NULL;
struct smbXcli_tcon *target_tcon = NULL;
struct cli_dfs_path_split *dfs_refs = NULL;
struct smbXcli_tcon *root_tcon = NULL;
struct smbXcli_tcon *target_tcon = NULL;
struct cli_dfs_path_split *dfs_refs = NULL;
@@
-930,8
+932,10
@@
NTSTATUS cli_resolve_path(TALLOC_CTX *ctx,
if (smbXcli_conn_protocol(rootcli->conn) >= PROTOCOL_SMB2_02) {
root_tcon = rootcli->smb2.tcon;
if (smbXcli_conn_protocol(rootcli->conn) >= PROTOCOL_SMB2_02) {
root_tcon = rootcli->smb2.tcon;
+ force_encryption = smb2cli_tcon_is_encryption_on(root_tcon);
} else {
root_tcon = rootcli->smb1.tcon;
} else {
root_tcon = rootcli->smb1.tcon;
+ force_encryption = smb1cli_conn_encryption_on(rootcli->conn);
}
/*
}
/*
@@
-996,20
+1000,30
@@
NTSTATUS cli_resolve_path(TALLOC_CTX *ctx,
/* Check for the referral. */
/* Check for the referral. */
- status = cli_cm_open(ctx,
- rootcli,
- smbXcli_conn_remote_name(rootcli->conn),
- "IPC$",
- dfs_auth_info,
- cli_state_is_encryption_on(rootcli),
- smbXcli_conn_protocol(rootcli->conn),
- 0,
- 0x20,
- &cli_ipc);
+ cli_ipc = cli_state_dup(ctx, rootcli);
+ if (cli_ipc == NULL) {
+ return NT_STATUS_NO_MEMORY;
+ }
+
+ dfs_creds = get_cmdline_auth_info_creds(auth_info);
+
+ status = cli_tree_connect_creds(cli_ipc, "IPC$", "IPC", dfs_creds);
if (!NT_STATUS_IS_OK(status)) {
if (!NT_STATUS_IS_OK(status)) {
+ d_printf("tree connect failed: %s\n", nt_errstr(status));
+ cli_shutdown(cli_ipc);
return status;
}
return status;
}
+ if (force_encrypt) {
+ status = cli_cm_force_encryption_creds(cli_ipc,
+ dfs_creds,
+ "IPC$");
+ if (!NT_STATUS_IS_OK(status)) {
+ cli_shutdown(cli_ipc);
+ return status;
+ }
+ }
+
status = cli_dfs_get_referral(ctx, cli_ipc, dfs_path, &refs,
&num_refs, &consumed);
if (!NT_STATUS_IS_OK(status)) {
status = cli_dfs_get_referral(ctx, cli_ipc, dfs_path, &refs,
&num_refs, &consumed);
if (!NT_STATUS_IS_OK(status)) {