boolean8 durable;
DATA_BLOB backend_cookie;
[flag(NDR_PAHEX)] uint8 lock_sequence_array[64];
+ hyper channel_sequence;
} smbXsrv_open_global0;
typedef union {
NTSTATUS status;
NTTIME idle_time;
[ignore] files_struct *compat;
+ hyper request_count;
+ hyper pre_request_count;
} smbXsrv_open;
typedef union {
.need_session = true,
.need_tcon = true,
.fileid_ofs = 0x10,
- .modify = true;
+ .modify = true,
},{
_OP(SMB2_OP_LOCK),
.need_session = true,
.need_tcon = true,
.fileid_ofs = 0x08,
.allow_invalid_fileid = true,
- .modify = true;
+ .modify = true,
},{
_OP(SMB2_OP_CANCEL),
.as_root = true,
.need_session = true,
.need_tcon = true,
.fileid_ofs = 0x10,
- .modify = true;
+ .modify = true,
},{
_OP(SMB2_OP_BREAK),
.need_session = true,
if ((xconn->protocol >= PROTOCOL_SMB2_22) && (op != NULL)) {
int cmp = channel_sequence - op->global->channel_sequence;
- bool overflow = false;
+ //bool overflow = false;
+ bool update_open = false;
if (abs(cmp) > INT16_MAX) {
/*
* If the difference between the numbers
* if more than 15-bit, it is likely to be an overflow.
*/
- overflow = true;
+ //overflow = true;
cmp *= -1;
}
}
}
}
+
+ if (update_open) {
+ status = smbXsrv_open_update(op);
+ if (!NT_STATUS_IS_OK(status)) {
+ return smbd_smb2_request_error(req, status);
+ }
+ }
}
if (call->as_root) {