uint32_t durable_timeout_msec = 0;
bool do_durable_reconnect = false;
uint64_t persistent_id = 0;
+ bool persistent_requested = false;
exta = smb2_create_blob_find(&in_context_blobs,
SMB2_CREATE_TAG_EXTA);
const uint8_t *p = dh2q->data.data;
uint32_t durable_v2_timeout = 0;
DATA_BLOB create_guid_blob;
+ uint32_t dh2q_flags;
if (dh2q->data.length != 32) {
tevent_req_nterror(req, NT_STATUS_INVALID_PARAMETER);
}
durable_v2_timeout = IVAL(p, 0);
+
+ dh2q_flags = SVAL(p, 4);
+ persistent_requested = dh2q_flags & SMB2_DHANDLE_FLAG_PERSISTENT;
+
create_guid_blob = data_blob_const(p + 16, 16);
status = GUID_from_ndr_blob(&create_guid_blob,
op->global->durable = true;
op->global->durable_timeout_msec = durable_timeout_msec;
+
+ if (persistent_requested &&
+ lp_parm_bool(SNUM(smb2req->tcon->compat), "smbd", "announce CA", false))
+ {
+ op->global->persistent = true;
+ }
}
+
if (update_open) {
op->global->create_guid = _create_guid;
DATA_BLOB blob = data_blob_const(p, sizeof(p));
uint32_t durable_v2_response_flags = 0;
+ if (op->global->persistent) {
+ durable_v2_response_flags |= SMB2_DHANDLE_FLAG_PERSISTENT;
+ }
+
SIVAL(p, 0, op->global->durable_timeout_msec);
SIVAL(p, 4, durable_v2_response_flags);