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

smbd: Simplify struct dptr_struct

We can access the file name via "dir_hnd"

Signed-off-by: Volker Lendecke <vl@samba.org>
Reviewed-by: Jeremy Allison <jra@samba.org>
This commit is contained in:
Volker Lendecke 2023-02-02 12:52:32 +01:00 committed by Jeremy Allison
parent 8846b09007
commit a1d348fd5e

View File

@ -73,7 +73,6 @@ struct dptr_struct {
bool expect_close;
char *wcard;
uint32_t attr;
struct smb_filename *smb_dname;
bool has_wild; /* Set to true if the wcard entry has MS wildcard characters in it. */
bool did_stat; /* Optimisation for non-wcard searches. */
bool priv; /* Directory handle opened with privilege. */
@ -144,7 +143,7 @@ const char *dptr_path(struct smbd_server_connection *sconn, int key)
{
struct dptr_struct *dptr = dptr_get(sconn, key);
if (dptr)
return(dptr->smb_dname->base_name);
return(dptr->dir_hnd->dir_smb_fname->base_name);
return(NULL);
}
@ -251,12 +250,6 @@ NTSTATUS dptr_create(connection_struct *conn,
return NT_STATUS_NO_MEMORY;
}
dptr->smb_dname = cp_smb_filename(dptr, fsp->fsp_name);
if (dptr->smb_dname == NULL) {
TALLOC_FREE(dptr);
TALLOC_FREE(dir_hnd);
return NT_STATUS_NO_MEMORY;
}
dptr->conn = conn;
dptr->dir_hnd = dir_hnd;
dptr->spid = spid;
@ -459,7 +452,7 @@ static char *dptr_ReadDirName(TALLOC_CTX *ctx,
pathreal = talloc_asprintf(ctx,
"%s/%s",
dptr->smb_dname->base_name,
dptr->dir_hnd->dir_smb_fname->base_name,
dptr->wcard);
if (!pathreal)
return NULL;
@ -468,7 +461,7 @@ static char *dptr_ReadDirName(TALLOC_CTX *ctx,
smb_fname_base = (struct smb_filename) {
.base_name = pathreal,
.flags = dptr->dir_hnd->fsp->fsp_name->flags,
.twrp = dptr->smb_dname->twrp,
.twrp = dptr->dir_hnd->fsp->fsp_name->twrp,
};
if (vfs_stat(dptr->conn, &smb_fname_base) == 0) {
@ -707,8 +700,10 @@ files_struct *dptr_fetch_fsp(struct smbd_server_connection *sconn,
wire_offset = IVAL(buf,1);
seekoff = map_wire_to_dir_offset(dptr, wire_offset);
SeekDir(dptr->dir_hnd,seekoff);
DEBUG(3,("fetching dirptr %d for path %s at offset %d\n",
key, dptr->smb_dname->base_name, (int)seekoff));
DBG_NOTICE("fetching dirptr %d for path %s at offset %ld\n",
key,
dptr->dir_hnd->dir_smb_fname->base_name,
seekoff);
return dptr->dir_hnd->fsp;
}
@ -729,8 +724,8 @@ files_struct *dptr_fetch_lanman2_fsp(struct smbd_server_connection *sconn,
return NULL;
}
DBG_NOTICE("fetching dirptr %d for path %s\n",
dptr_num,
dptr->smb_dname->base_name);
dptr_num,
dptr->dir_hnd->dir_smb_fname->base_name);
return dptr->dir_hnd->fsp;
}
@ -774,7 +769,7 @@ bool smbd_dirptr_get_entry(TALLOC_CTX *ctx,
connection_struct *conn = dirptr->conn;
size_t slashlen;
size_t pathlen;
const char *dpath = dirptr->smb_dname->base_name;
const char *dpath = dirptr->dir_hnd->dir_smb_fname->base_name;
bool dirptr_path_is_dot = ISDOT(dpath);
NTSTATUS status;
int ret;
@ -805,7 +800,8 @@ bool smbd_dirptr_get_entry(TALLOC_CTX *ctx,
dname = dptr_ReadDirName(ctx, dirptr, &cur_offset, &sbuf);
DBG_DEBUG("dir [%s] dirptr [0x%lx] offset [%ld] => dname [%s]\n",
smb_fname_str_dbg(dirptr->smb_dname), (long)dirptr,
smb_fname_str_dbg(dirptr->dir_hnd->dir_smb_fname),
(long)dirptr,
cur_offset, dname ? dname : "(finished)");
if (dname == NULL) {
@ -865,12 +861,13 @@ bool smbd_dirptr_get_entry(TALLOC_CTX *ctx,
}
/* Create smb_fname with NULL stream_name. */
smb_fname = synthetic_smb_fname(talloc_tos(),
pathreal,
NULL,
&sbuf,
dirptr->smb_dname->twrp,
dirptr->smb_dname->flags);
smb_fname = synthetic_smb_fname(
talloc_tos(),
pathreal,
NULL,
&sbuf,
dirptr->dir_hnd->dir_smb_fname->twrp,
dirptr->dir_hnd->dir_smb_fname->flags);
TALLOC_FREE(pathreal);
if (smb_fname == NULL) {
TALLOC_FREE(dname);
@ -895,12 +892,13 @@ bool smbd_dirptr_get_entry(TALLOC_CTX *ctx,
}
/* Create smb_fname with NULL stream_name. */
atname = synthetic_smb_fname(talloc_tos(),
dname,
NULL,
&smb_fname->st,
dirptr->smb_dname->twrp,
dirptr->smb_dname->flags);
atname = synthetic_smb_fname(
talloc_tos(),
dname,
NULL,
&smb_fname->st,
dirptr->dir_hnd->dir_smb_fname->twrp,
dirptr->dir_hnd->dir_smb_fname->flags);
if (atname == NULL) {
TALLOC_FREE(dname);
TALLOC_FREE(fname);