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;
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
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,
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.
* 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) {