struct smbd_smb2_create_state {
struct smbd_smb2_request *smb2req;
struct smb_request *smb1req;
+ bool open_was_deferred;
struct timed_event *te;
struct tevent_immediate *im;
struct timeval request_time;
smb1req->conn,
smb1req->flags2 & FLAGS2_DFS_PATHNAMES,
fname,
- 0,
+ (in_create_disposition == FILE_CREATE) ?
+ UCF_CREATING_FILE : 0,
NULL,
&smb_fname);
if (!NT_STATUS_IS_OK(status)) {
if (!smb2req) {
return false;
}
- if (!smb2req->async) {
- return false;
- }
req = smb2req->subreq;
if (!req) {
return false;
if (!state) {
return false;
}
+ if (!state->open_was_deferred) {
+ return false;
+ }
if (p_request_time) {
*p_request_time = state->request_time;
}
return false;
}
/* It's not in progress if there's no timeout event. */
- if (!state->te) {
+ if (!state->open_was_deferred) {
return false;
}
"mid %llu\n",
(unsigned long long)mid ));
+ state->open_was_deferred = false;
/* Ensure we don't have any outstanding timer event. */
TALLOC_FREE(state->te);
/* Ensure we don't have any outstanding immediate event. */
&end_time,
true) ));
+ state->open_was_deferred = true;
state->te = event_add_timed(smb2req->sconn->smb2.event_ctx,
state,
end_time,