From d2b5210f34b59f3d4108aee2681e3ac40312468c Mon Sep 17 00:00:00 2001 From: Andreas Schneider Date: Wed, 30 Jan 2019 18:09:52 +0100 Subject: [PATCH 1/2] s3:vfs: Initialize pid to 0 in test_netatalk_lock() Signed-off-by: Andreas Schneider --- source3/modules/vfs_fruit.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source3/modules/vfs_fruit.c b/source3/modules/vfs_fruit.c index 9f3fe24e5fc..0a67ad39d8e 100644 --- a/source3/modules/vfs_fruit.c +++ b/source3/modules/vfs_fruit.c @@ -2647,7 +2647,7 @@ static bool test_netatalk_lock(files_struct *fsp, off_t in_offset) off_t offset = in_offset; off_t len = 1; int type = F_WRLCK; - pid_t pid; + pid_t pid = 0; result = SMB_VFS_GETLOCK(fsp, &offset, &len, &type, &pid); if (result == false) { -- 2.20.1 From 75ae321946b3ba985e3f9fa52813860ab0fb9341 Mon Sep 17 00:00:00 2001 From: Andreas Schneider Date: Wed, 30 Jan 2019 18:45:34 +0100 Subject: [PATCH 2/2] s3:vfs: Correctly check if OFD locks should be enabled or not Also the smb.conf options should only be checked once and a reload of the config should not switch to a different locking mode. BUG: https://bugzilla.samba.org/show_bug.cgi?id=13770 Signed-off-by: Andreas Schneider --- source3/include/proto.h | 2 +- source3/lib/util.c | 7 ++----- source3/modules/vfs_default.c | 14 ++++---------- source3/smbd/files.c | 9 +++++++++ 4 files changed, 16 insertions(+), 16 deletions(-) diff --git a/source3/include/proto.h b/source3/include/proto.h index 715bc56e286..9d6192967ba 100644 --- a/source3/include/proto.h +++ b/source3/include/proto.h @@ -360,7 +360,7 @@ void set_namearray(name_compare_entry **ppname_array, const char *namelist); void free_namearray(name_compare_entry *name_array); bool fcntl_lock(int fd, int op, off_t offset, off_t count, int type); bool fcntl_getlock(int fd, int op, off_t *poffset, off_t *pcount, int *ptype, pid_t *ppid); -int map_process_lock_to_ofd_lock(int op, bool *use_ofd_locks); +int map_process_lock_to_ofd_lock(int op); bool is_myname(const char *s); void ra_lanman_string( const char *native_lanman ); const char *get_remote_arch_str(void); diff --git a/source3/lib/util.c b/source3/lib/util.c index 5dbd67349fa..7530ea67973 100644 --- a/source3/lib/util.c +++ b/source3/lib/util.c @@ -1079,7 +1079,7 @@ bool fcntl_getlock(int fd, int op, off_t *poffset, off_t *pcount, int *ptype, pi } #if defined(HAVE_OFD_LOCKS) -int map_process_lock_to_ofd_lock(int op, bool *use_ofd_locks) +int map_process_lock_to_ofd_lock(int op) { switch (op) { case F_GETLK: @@ -1095,16 +1095,13 @@ int map_process_lock_to_ofd_lock(int op, bool *use_ofd_locks) op = F_OFD_SETLKW; break; default: - *use_ofd_locks = false; return -1; } - *use_ofd_locks = true; return op; } #else /* HAVE_OFD_LOCKS */ -int map_process_lock_to_ofd_lock(int op, bool *use_ofd_locks) +int map_process_lock_to_ofd_lock(int op) { - *use_ofd_locks = false; return op; } #endif /* HAVE_OFD_LOCKS */ diff --git a/source3/modules/vfs_default.c b/source3/modules/vfs_default.c index a27d33a6bea..cb5537e096e 100644 --- a/source3/modules/vfs_default.c +++ b/source3/modules/vfs_default.c @@ -2553,11 +2553,8 @@ static bool vfswrap_lock(vfs_handle_struct *handle, files_struct *fsp, int op, o START_PROFILE(syscall_fcntl_lock); - if (fsp->use_ofd_locks || !lp_parm_bool(SNUM(fsp->conn), - "smbd", - "force process locks", - false)) { - op = map_process_lock_to_ofd_lock(op, &fsp->use_ofd_locks); + if (fsp->use_ofd_locks) { + op = map_process_lock_to_ofd_lock(op); } result = fcntl_lock(fsp->fh->fd, op, offset, count, type); @@ -2581,11 +2578,8 @@ static bool vfswrap_getlock(vfs_handle_struct *handle, files_struct *fsp, off_t START_PROFILE(syscall_fcntl_getlock); - if (fsp->use_ofd_locks || !lp_parm_bool(SNUM(fsp->conn), - "smbd", - "force process locks", - false)) { - op = map_process_lock_to_ofd_lock(op, &fsp->use_ofd_locks); + if (fsp->use_ofd_locks) { + op = map_process_lock_to_ofd_lock(op); } result = fcntl_getlock(fsp->fh->fd, op, poffset, pcount, ptype, ppid); diff --git a/source3/smbd/files.c b/source3/smbd/files.c index 397baea84cb..99b4937c99b 100644 --- a/source3/smbd/files.c +++ b/source3/smbd/files.c @@ -51,6 +51,15 @@ NTSTATUS fsp_new(struct connection_struct *conn, TALLOC_CTX *mem_ctx, goto fail; } +#if defined(HAVE_OFD_LOCKS) + fsp->use_ofd_locks = true; + if (lp_parm_bool(SNUM(conn), + "smbd", + "force process locks", + false)) { + fsp->use_ofd_locks = false; + } +#endif fsp->fh->ref_count = 1; fsp->fh->fd = -1; -- 2.20.1