- e->lease_idx = lease_idx;
- if (lease_idx != UINT32_MAX) {
- e->client_guid = lck->data->leases[lease_idx].client_guid;
- e->lease_key = lck->data->leases[lease_idx].lease_key;
+
+ if (op_type == LEASE_OPLOCK) {
+ uint32_t i;
+
+ e->client_guid = *client_guid;
+ e->lease_key = *lease_key;
+
+ /*
+ * Need to set lease_idx. This is essentially
+ * find_share_mode_lease(), but that will go away
+ * soon. So don't add the dependency here.
+ */
+
+ for (i=0; i<d->num_leases; i++) {
+ struct share_mode_lease *l = &d->leases[i];
+
+ if (smb2_lease_equal(client_guid,
+ lease_key,
+ &l->client_guid,
+ &l->lease_key)) {
+ break;
+ }
+ }
+
+ if (i == d->num_leases) {
+ DBG_WARNING("lease not found\n");
+ d->num_share_modes -= 1;
+ return false;
+ }
+
+ e->lease_idx = i;
+ } else {
+ e->lease_idx = UINT32_MAX;