1
0
mirror of https://github.com/samba-team/samba.git synced 2025-03-12 20:58:37 +03:00

smbd: add create_conn_struct_cwd()

Compared to create_conn_struct_tos_cwd() this takes a TALLOC_CTX and
tevent_context as additional arguments and the resulting connection_struct is
stable across the lifetime of mem_ctx and ev.

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

Signed-off-by: Ralph Boehme <slow@samba.org>
Reviewed-by: Jeremy Allison <jra@samba.org>
(cherry picked from commit 9a2d6bcfd5797dd4db764921548c8dca6dd0eb21)
This commit is contained in:
Ralph Boehme 2021-05-28 09:25:22 +02:00 committed by Karolin Seeger
parent 60e091a153
commit 48b2dc3c5c
2 changed files with 46 additions and 0 deletions

View File

@ -496,6 +496,44 @@ NTSTATUS create_conn_struct_tos_cwd(struct messaging_context *msg,
return NT_STATUS_OK;
}
/********************************************************
Fake up a connection struct for the VFS layer.
This takes an TALLOC_CTX and tevent_context from the
caller and the resulting connection_struct is stable
across the lifetime of mem_ctx and ev.
Note: this performs a vfs connect and changes cwd.
See also the comment for create_conn_struct_tos() above!
*********************************************************/
NTSTATUS create_conn_struct_cwd(TALLOC_CTX *mem_ctx,
struct tevent_context *ev,
struct messaging_context *msg,
const struct auth_session_info *session_info,
int snum,
const char *path,
struct connection_struct **c)
{
NTSTATUS status;
become_root();
status = create_conn_struct_as_root(mem_ctx,
ev,
msg,
c,
snum,
path,
session_info);
unbecome_root();
if (!NT_STATUS_IS_OK(status)) {
TALLOC_FREE(c);
return status;
}
return NT_STATUS_OK;
}
static void shuffle_strlist(char **list, int count)
{
int i;

View File

@ -561,6 +561,14 @@ NTSTATUS resolve_dfspath_wcard(TALLOC_CTX *ctx,
bool *ppath_contains_wcard);
struct connection_struct;
struct smb_filename;
NTSTATUS create_conn_struct_cwd(TALLOC_CTX *mem_ctx,
struct tevent_context *ev,
struct messaging_context *msg,
const struct auth_session_info *session_info,
int snum,
const char *path,
struct connection_struct **c);
struct conn_struct_tos {
struct connection_struct *conn;
struct smb_filename *oldcwd_fname;