{
struct smbd_smb2_query_directory_state *state = tevent_req_data(
req, struct smbd_smb2_query_directory_state);
+ struct smb_filename *smb_fname = NULL; /* relative to fsp !! */
bool got_exact_match = false;
int off = state->out_output_buffer.length;
int space_remaining = state->in_output_buffer_length - off;
state->base_data,
state->end_data,
space_remaining,
+ &smb_fname,
&got_exact_match,
&state->last_entry_off,
NULL,
state->async_sharemode_count++;
}
+ TALLOC_FREE(smb_fname);
+
state->num++;
state->out_output_buffer.length = off;
char *base_data,
char *end_data,
int space_remaining,
+ struct smb_filename **_smb_fname,
bool *got_exact_match,
int *_last_entry_off,
struct ea_list *name_list,
*file_id = vfs_file_id_from_sbuf(conn, &smb_fname->st);
}
- TALLOC_FREE(fname);
- TALLOC_FREE(smb_fname);
-
if (!NT_STATUS_IS_OK(status) &&
!NT_STATUS_EQUAL(status, STATUS_MORE_ENTRIES))
{
+ TALLOC_FREE(smb_fname);
+ TALLOC_FREE(fname);
return status;
}
+ if (_smb_fname != NULL) {
+ struct smb_filename *name = NULL;
+
+ name = synthetic_smb_fname(ctx, fname, NULL, &smb_fname->st, 0);
+ if (name == NULL) {
+ TALLOC_FREE(smb_fname);
+ TALLOC_FREE(fname);
+ return NT_STATUS_NO_MEMORY;
+ }
+ *_smb_fname = name;
+ }
+
+ TALLOC_FREE(smb_fname);
+ TALLOC_FREE(fname);
+
if (NT_STATUS_EQUAL(status, STATUS_MORE_ENTRIES)) {
dptr_SeekDir(dirptr, prev_dirpos);
return status;
true, align, do_pad,
ppdata, base_data, end_data,
space_remaining,
+ NULL,
got_exact_match,
last_entry_off, name_list, NULL);
}