for (i=0; i<in_lock_count; i++) {
bool invalid = false;
+ bool posix_handle =(fsp->posix_flags & FSP_POSIX_FLAGS_OPEN);
switch (in_locks[i].flags) {
case SMB2_LOCK_FLAG_SHARED:
locks[i].offset = in_locks[i].offset;
locks[i].count = in_locks[i].length;
+ if (posix_handle) {
+ locks[i].lock_flav = POSIX_LOCK;
+ } else {
+ locks[i].lock_flav = WINDOWS_LOCK;
+ }
+
if (in_locks[i].flags & SMB2_LOCK_FLAG_EXCLUSIVE) {
+ if (posix_handle && fsp->fsp_flags.can_write == false) {
+ /*
+ * Can't get a write lock on a posix
+ * read-only handle.
+ */
+ DBG_INFO("POSIX write lock requested "
+ "on read-only handle for file %s\n",
+ fsp_str_dbg(fsp));
+ tevent_req_nterror(req,
+ NT_STATUS_INVALID_HANDLE);
+ return tevent_req_post(req, ev);
+ }
locks[i].brltype = WRITE_LOCK;
} else if (in_locks[i].flags & SMB2_LOCK_FLAG_SHARED) {
locks[i].brltype = READ_LOCK;