From: Volker Lendecke Date: Fri, 9 Jun 2023 13:22:31 +0000 (+0200) Subject: smbd: Add dptr_struct->last_name_sent X-Git-Tag: talloc-2.4.1~420 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=baaa0c66193dd17ec08ba19689f935ff393062dd;p=thirdparty%2Fsamba.git smbd: Add dptr_struct->last_name_sent Signed-off-by: Volker Lendecke Reviewed-by: Jeremy Allison --- diff --git a/source3/smbd/dir.c b/source3/smbd/dir.c index 02e7181c3b8..6fad63dc0d2 100644 --- a/source3/smbd/dir.c +++ b/source3/smbd/dir.c @@ -71,6 +71,8 @@ struct dptr_struct { bool priv; /* Directory handle opened with privilege. */ uint32_t counter; + char *last_name_sent; /* for name-based trans2 resume */ + struct { char *fname; struct smb_filename *smb_fname; @@ -905,6 +907,18 @@ void smbd_dirptr_push_overflow(struct dptr_struct *dirptr, dirptr->overflow.mode = mode; } +void smbd_dirptr_set_last_name_sent(struct dptr_struct *dirptr, + char **_fname) +{ + TALLOC_FREE(dirptr->last_name_sent); + dirptr->last_name_sent = talloc_move(dirptr, _fname); +} + +char *smbd_dirptr_get_last_name_sent(struct dptr_struct *dirptr) +{ + return dirptr->last_name_sent; +} + /******************************************************************* Check to see if a user can read an fsp . This is only approximate, it is used as part of the "hide unreadable" option. Don't diff --git a/source3/smbd/globals.h b/source3/smbd/globals.h index 3d9f046a15b..c365f3b821a 100644 --- a/source3/smbd/globals.h +++ b/source3/smbd/globals.h @@ -186,6 +186,9 @@ void smbd_dirptr_push_overflow(struct dptr_struct *dirptr, char **_fname, struct smb_filename **_smb_fname, uint32_t mode); +void smbd_dirptr_set_last_name_sent(struct dptr_struct *dirptr, + char **_fname); +char *smbd_dirptr_get_last_name_sent(struct dptr_struct *dirptr); NTSTATUS smbd_dirptr_lanman2_entry(TALLOC_CTX *ctx, connection_struct *conn, diff --git a/source3/smbd/smb2_trans2.c b/source3/smbd/smb2_trans2.c index 9b72d863752..955aee68fb5 100644 --- a/source3/smbd/smb2_trans2.c +++ b/source3/smbd/smb2_trans2.c @@ -2011,6 +2011,8 @@ NTSTATUS smbd_dirptr_lanman2_entry(TALLOC_CTX *ctx, return status; } + smbd_dirptr_set_last_name_sent(dirptr, &smb_fname->base_name); + if (_smb_fname != NULL) { /* * smb_fname is already talloc'ed off ctx. @@ -2021,7 +2023,11 @@ NTSTATUS smbd_dirptr_lanman2_entry(TALLOC_CTX *ctx, * for asynchronous handle lookups. */ TALLOC_FREE(smb_fname->stream_name); - TALLOC_FREE(smb_fname->base_name); + + /* + * smbd_dirptr_set_last_name_sent() above consumed + * base_name + */ smb_fname->base_name = talloc_strdup(smb_fname, fname); if (smb_fname->base_name == NULL) {