mirror of
https://github.com/samba-team/samba.git
synced 2025-01-11 05:18:09 +03:00
smbd: add an explicit talloc_stackframe() to count_dfs_links()
This makes further changes simpler. Signed-off-by: Stefan Metzmacher <metze@samba.org> Reviewed-by: Jeremy Allison <jra@samba.org>
This commit is contained in:
parent
e3837d36e7
commit
15ea2c1b6a
@ -1559,18 +1559,20 @@ bool remove_msdfs_link(const struct junction_map *jucn)
|
|||||||
|
|
||||||
static int count_dfs_links(TALLOC_CTX *ctx, int snum)
|
static int count_dfs_links(TALLOC_CTX *ctx, int snum)
|
||||||
{
|
{
|
||||||
|
TALLOC_CTX *frame = talloc_stackframe();
|
||||||
size_t cnt = 0;
|
size_t cnt = 0;
|
||||||
DIR *dirp = NULL;
|
DIR *dirp = NULL;
|
||||||
const char *dname = NULL;
|
const char *dname = NULL;
|
||||||
char *talloced = NULL;
|
char *talloced = NULL;
|
||||||
const char *connect_path = lp_path(talloc_tos(), snum);
|
const char *connect_path = lp_path(frame, snum);
|
||||||
const char *msdfs_proxy = lp_msdfs_proxy(talloc_tos(), snum);
|
const char *msdfs_proxy = lp_msdfs_proxy(frame, snum);
|
||||||
connection_struct *conn;
|
connection_struct *conn;
|
||||||
NTSTATUS status;
|
NTSTATUS status;
|
||||||
struct smb_filename *cwd_fname = NULL;
|
struct smb_filename *cwd_fname = NULL;
|
||||||
struct smb_filename *smb_fname = NULL;
|
struct smb_filename *smb_fname = NULL;
|
||||||
|
|
||||||
if(*connect_path == '\0') {
|
if(*connect_path == '\0') {
|
||||||
|
TALLOC_FREE(frame);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1578,7 +1580,7 @@ static int count_dfs_links(TALLOC_CTX *ctx, int snum)
|
|||||||
* Fake up a connection struct for the VFS layer.
|
* Fake up a connection struct for the VFS layer.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
status = create_conn_struct_cwd(talloc_tos(),
|
status = create_conn_struct_cwd(frame,
|
||||||
server_event_context(),
|
server_event_context(),
|
||||||
server_messaging_context(),
|
server_messaging_context(),
|
||||||
&conn,
|
&conn,
|
||||||
@ -1589,6 +1591,7 @@ static int count_dfs_links(TALLOC_CTX *ctx, int snum)
|
|||||||
if (!NT_STATUS_IS_OK(status)) {
|
if (!NT_STATUS_IS_OK(status)) {
|
||||||
DEBUG(3, ("create_conn_struct failed: %s\n",
|
DEBUG(3, ("create_conn_struct failed: %s\n",
|
||||||
nt_errstr(status)));
|
nt_errstr(status)));
|
||||||
|
TALLOC_FREE(frame);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1600,7 +1603,7 @@ static int count_dfs_links(TALLOC_CTX *ctx, int snum)
|
|||||||
goto out;
|
goto out;
|
||||||
}
|
}
|
||||||
|
|
||||||
smb_fname = synthetic_smb_fname(talloc_tos(),
|
smb_fname = synthetic_smb_fname(frame,
|
||||||
".",
|
".",
|
||||||
NULL,
|
NULL,
|
||||||
NULL,
|
NULL,
|
||||||
@ -1618,7 +1621,7 @@ static int count_dfs_links(TALLOC_CTX *ctx, int snum)
|
|||||||
while ((dname = vfs_readdirname(conn, dirp, NULL, &talloced))
|
while ((dname = vfs_readdirname(conn, dirp, NULL, &talloced))
|
||||||
!= NULL) {
|
!= NULL) {
|
||||||
struct smb_filename *smb_dname =
|
struct smb_filename *smb_dname =
|
||||||
synthetic_smb_fname(talloc_tos(),
|
synthetic_smb_fname(frame,
|
||||||
dname,
|
dname,
|
||||||
NULL,
|
NULL,
|
||||||
NULL,
|
NULL,
|
||||||
@ -1636,11 +1639,10 @@ static int count_dfs_links(TALLOC_CTX *ctx, int snum)
|
|||||||
SMB_VFS_CLOSEDIR(conn,dirp);
|
SMB_VFS_CLOSEDIR(conn,dirp);
|
||||||
|
|
||||||
out:
|
out:
|
||||||
TALLOC_FREE(smb_fname);
|
|
||||||
vfs_ChDir(conn, cwd_fname);
|
vfs_ChDir(conn, cwd_fname);
|
||||||
TALLOC_FREE(cwd_fname);
|
|
||||||
SMB_VFS_DISCONNECT(conn);
|
SMB_VFS_DISCONNECT(conn);
|
||||||
conn_free(conn);
|
conn_free(conn);
|
||||||
|
TALLOC_FREE(frame);
|
||||||
return cnt;
|
return cnt;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user