summaryrefslogtreecommitdiff
path: root/source3/locking
Commit message (Collapse)AuthorAgeFilesLines
* smbd: Use file_id_str_buf() in set_write_time()Volker Lendecke2019-11-061-2/+3
| | | | | Signed-off-by: Volker Lendecke <vl@samba.org> Reviewed-by: Jeremy Allison <jra@samba.org>
* lib: Remove #define serverid_equal server_id_equalVolker Lendecke2019-11-063-6/+7
| | | | | Signed-off-by: Volker Lendecke <vl@samba.org> Reviewed-by: Jeremy Allison <jra@samba.org>
* smbd: Fix an uninitalized variableVolker Lendecke2019-10-101-2/+1
| | | | | | | | Signed-off-by: Volker Lendecke <vl@samba.org> Reviewed-by: Jeremy Allison <jra@samba.org> Autobuild-User(master): Jeremy Allison <jra@samba.org> Autobuild-Date(master): Thu Oct 10 01:04:33 UTC 2019 on sn-devel-184
* smbd: Fix CID 1453984: Null pointer dereferences (REVERSE_INULL)Volker Lendecke2019-10-021-3/+5
| | | | | Signed-off-by: Volker Lendecke <vl@samba.org> Reviewed-by: Ralph Boehme <slow@samba.org>
* smbd: Add share mode flagsVolker Lendecke2019-09-171-2/+2
| | | | | | | | | | | This will contain a summary of the "most restrictive" share mode and lease, i.e. intersection of all share_access entries and the union of all access_mask and leases in the share mode array. This way open_mode_check in the non-conflicting case will only have to look at the summary and not walk the share mode array. Signed-off-by: Volker Lendecke <vl@samba.org> Reviewed-by: Jeremy Allison <jra@samba.org>
* smbd: Make "share_mode_flags" 16-bit wideVolker Lendecke2019-09-171-4/+4
| | | | | Signed-off-by: Volker Lendecke <vl@samba.org> Reviewed-by: Jeremy Allison <jra@samba.org>
* smbd: Introduce share_entries.tdb - ADD COMMENT FIXME !!Volker Lendecke2019-09-172-272/+883
| | | | | | | | | | | | | | This moves share_modes[] from "struct share_mode_data" into a separate share_entries.tdb with a sorted array of fixed-length (132 byte) "struct share_mode_entry" entries. I know it's one huge commit, but I did not see a way to keep both data structures and associated code working together without a lot of code duplication after having centralized all the code accessing the share_modes[] array into a few routines. Signed-off-by: Volker Lendecke <vl@samba.org> Reviewed-by: Jeremy Allison <jra@samba.org>
* smbd: Allow another database between brlock.tdb and leases.tdbVolker Lendecke2019-09-171-1/+1
| | | | | Signed-off-by: Volker Lendecke <vl@samba.org> Reviewed-by: Jeremy Allison <jra@samba.org>
* smbd: Remove stale share mode entries while walking the arrayVolker Lendecke2019-09-172-23/+12
| | | | | | | | | | Previously, we did this only when writing out the locking.tdb record. That was because we had places where the index of a particular share mode entry mattered while operating on the array. This is no longer the case, so we can remove stale entries early. Signed-off-by: Volker Lendecke <vl@samba.org> Reviewed-by: Jeremy Allison <jra@samba.org>
* smbd: Make remove_stale_share_mode_entries() static in share_mode_lock.cVolker Lendecke2019-09-173-22/+21
| | | | | | | ... to the place where the record is stored in the database Signed-off-by: Volker Lendecke <vl@samba.org> Reviewed-by: Jeremy Allison <jra@samba.org>
* smbd: Use share_mode_forall_entries() in remove_lease_if_stale()Volker Lendecke2019-09-171-19/+41
| | | | | Signed-off-by: Volker Lendecke <vl@samba.org> Reviewed-by: Jeremy Allison <jra@samba.org>
* smbd: Pass share_mode_lock to remove_lease_if_stale()Volker Lendecke2019-09-172-3/+4
| | | | | | | We'll want to use share_mode_forall_entries next Signed-off-by: Volker Lendecke <vl@samba.org> Reviewed-by: Jeremy Allison <jra@samba.org>
* smbd: Pass share_mode_lock to remove_share_mode_lease()Volker Lendecke2019-09-171-6/+5
| | | | | | | Later we'll need "lck" further down Signed-off-by: Volker Lendecke <vl@samba.org> Reviewed-by: Jeremy Allison <jra@samba.org>
* smbd: Avoid duplicate assignmentsVolker Lendecke2019-09-171-2/+0
| | | | | | | remove_share_mode_lease() already does this Signed-off-by: Volker Lendecke <vl@samba.org> Reviewed-by: Jeremy Allison <jra@samba.org>
* smbd: Remove unused share_mode_stale_pid()Volker Lendecke2019-09-172-53/+5
| | | | | Signed-off-by: Volker Lendecke <vl@samba.org> Reviewed-by: Jeremy Allison <jra@samba.org>
* smbd: Use share_mode_forall_entries() in share_entry_forall()Volker Lendecke2019-09-171-11/+27
| | | | | Signed-off-by: Volker Lendecke <vl@samba.org> Reviewed-by: Jeremy Allison <jra@samba.org>
* smbd: Use share_mode_forall_leases() in share_mode_cleanup_disconnected()Volker Lendecke2019-09-171-49/+77
| | | | | Signed-off-by: Volker Lendecke <vl@samba.org> Reviewed-by: Jeremy Allison <jra@samba.org>
* smbd: Add reset_share_mode_entryVolker Lendecke2019-09-172-0/+30
| | | | | | | Mostly for durable reconnect at this point Signed-off-by: Volker Lendecke <vl@samba.org> Reviewed-by: Jeremy Allison <jra@samba.org>
* smbd: Pass pid/share_file_id to find_share_mode_entry()Volker Lendecke2019-09-171-7/+20
| | | | | | | | Avoid the full fsp, this makes the indexing of the share mode array clearer, and it makes the next commit easier Signed-off-by: Volker Lendecke <vl@samba.org> Reviewed-by: Jeremy Allison <jra@samba.org>
* smbd: Use share_mode_forall_entries() in share_mode_forall_leases()Volker Lendecke2019-09-171-50/+68
| | | | | Signed-off-by: Volker Lendecke <vl@samba.org> Reviewed-by: Jeremy Allison <jra@samba.org>
* smbd: Stop passing "share_mode_lock" via share_mode_forall_leases()Volker Lendecke2019-09-173-9/+5
| | | | | | | | | | | Why? Next commit will make share_mode_forall_leases() use share_mode_forall_entries(), and that does not necessarily have to depend on "share_mode_lock". And as we can pass the required information via "private_data", don't embed the "share_mode_lock" reference into this lowlevel library routine. Signed-off-by: Volker Lendecke <vl@samba.org> Reviewed-by: Jeremy Allison <jra@samba.org>
* smbd: Avoid "share_mode_lock" dependency cleanup_disconnected_lease()Volker Lendecke2019-09-171-3/+8
| | | | | | | share_mode_forall_leases() will stop passing "lck" soon. Signed-off-by: Volker Lendecke <vl@samba.org> Reviewed-by: Jeremy Allison <jra@samba.org>
* smbd: Avoid "share_mode_lock" dependency in rename_lease_fn()Volker Lendecke2019-09-171-10/+13
| | | | | | | share_mode_forall_leases() will stop passing "lck" soon. Signed-off-by: Volker Lendecke <vl@samba.org> Reviewed-by: Jeremy Allison <jra@samba.org>
* smbd: Use share_mode_forall_entries() in file_has_open_streams()Volker Lendecke2019-09-171-18/+33
| | | | | Signed-off-by: Volker Lendecke <vl@samba.org> Reviewed-by: Jeremy Allison <jra@samba.org>
* smbd: Use share_mode_forall_entries() in rename_share_filename()Volker Lendecke2019-09-171-63/+79
| | | | | Signed-off-by: Volker Lendecke <vl@samba.org> Reviewed-by: Jeremy Allison <jra@samba.org>
* smbd: Use share_mode_forall_entries() in set_delete_on_close_lck()Volker Lendecke2019-09-171-19/+42
| | | | | Signed-off-by: Volker Lendecke <vl@samba.org> Reviewed-by: Jeremy Allison <jra@samba.org>
* smbd: Add share_mode_forall_entries()Volker Lendecke2019-09-172-0/+54
| | | | | | | | Abstract away the fact that we store the share modes as an array inside "struct share_mode_data". Signed-off-by: Volker Lendecke <vl@samba.org> Reviewed-by: Jeremy Allison <jra@samba.org>
* smbd: Use share_entry_stale_pid() in share_mode_stale_pid()Volker Lendecke2019-09-171-20/+5
| | | | | Signed-off-by: Volker Lendecke <vl@samba.org> Reviewed-by: Jeremy Allison <jra@samba.org>
* smbd: Add share_entry_stale_pid()Volker Lendecke2019-09-172-0/+25
| | | | | Signed-off-by: Volker Lendecke <vl@samba.org> Reviewed-by: Jeremy Allison <jra@samba.org>
* smbd: Let fsp_lease_type() look at leases.tdbVolker Lendecke2019-09-172-7/+23
| | | | | | | | | | | | The same lease can be used via different TCP connections (yes, we have tests for this!). At the end of downgrade_lease() we update all fsp's with fsps_lease_update() that link to the lease that just was changed. However, this is only in the local process, this is not cross-smbd. So other smbds using the same lease can use stale information and for example get the mandatory locking wrong. Signed-off-by: Volker Lendecke <vl@samba.org> Reviewed-by: Jeremy Allison <jra@samba.org>
* smbd: Add quick leases_db_get_current_state()Volker Lendecke2019-09-172-1/+81
| | | | | Signed-off-by: Volker Lendecke <vl@samba.org> Reviewed-by: Jeremy Allison <jra@samba.org>
* smbd: Make lease_type_is_exclusive() staticVolker Lendecke2019-09-172-2/+1
| | | | | Signed-off-by: Volker Lendecke <vl@samba.org> Reviewed-by: Jeremy Allison <jra@samba.org>
* smbd: Use dbwrap_do_locked() in fd_close_posix()Volker Lendecke2019-09-101-70/+21
| | | | | | | We don't need to make a copy of the fd array Signed-off-by: Volker Lendecke <vl@samba.org> Reviewed-by: Jeremy Allison <jra@samba.org>
* smbd: Use dbwrap_do_locked() in add_fd_to_close_entry()Volker Lendecke2019-09-101-28/+30
| | | | | | | | Less explicit talloc. Right now dbwrap_rbt behind the scenes does a dbwrap_fetch_locked(), but that will eventually change. Signed-off-by: Volker Lendecke <vl@samba.org> Reviewed-by: Jeremy Allison <jra@samba.org>
* smbd: Fix DBG typo in find_delete_on_close_token()Volker Lendecke2019-09-101-4/+3
| | | | | | | | The routine isn't called find__delete_on_close_token. Also avoid casts. Signed-off-by: Volker Lendecke <vl@samba.org> Reviewed-by: Jeremy Allison <jra@samba.org>
* smbd: Use file_id_str_buf() in set_sticky_write_time()Volker Lendecke2019-09-101-2/+3
| | | | | Signed-off-by: Volker Lendecke <vl@samba.org> Reviewed-by: Jeremy Allison <jra@samba.org>
* smbd: Use file_id_str_buf() in share_mode_str()Volker Lendecke2019-09-101-1/+2
| | | | | Signed-off-by: Volker Lendecke <vl@samba.org> Reviewed-by: Jeremy Allison <jra@samba.org>
* smbd: Use file_id_str_buf() in brl_cleanup_disconnected()Volker Lendecke2019-09-101-23/+24
| | | | | | | Also avoid some casts and use DBG_ instead of DEBUG() Signed-off-by: Volker Lendecke <vl@samba.org> Reviewed-by: Jeremy Allison <jra@samba.org>
* smbd: Use file_id_str_buf() in brl_get_locks()Volker Lendecke2019-09-101-3/+4
| | | | | Signed-off-by: Volker Lendecke <vl@samba.org> Reviewed-by: Jeremy Allison <jra@samba.org>
* s3:locking: add brl_req_guid() and brl_req_mem_ctx() helper functionsStefan Metzmacher2019-09-093-5/+59
| | | | | | | | | | This allows the vfs backend to detect a retry and keep state between the retries. BUG: https://bugzilla.samba.org/show_bug.cgi?id=14113 Signed-off-by: Stefan Metzmacher <metze@samba.org> Reviewed-by: Volker Lendecke <vl@samba.org>
* s3:brlock: always return LOCK_NOT_GRANTED instead of FILE_LOCK_CONFLICTStefan Metzmacher2019-09-091-4/+4
| | | | | | | | | | | | | Returning NT_STATUS_FILE_LOCK_CONFLICT is a SMB1 only detail for delayed brlock requests, which is handled in smbd_smb1_do_locks*(). The brlock layer should be consistent even for posix locks. BUG: https://bugzilla.samba.org/show_bug.cgi?id=14113 Signed-off-by: Stefan Metzmacher <metze@samba.org> Signed-off-by: Volker Lendecke <vl@samba.org>
* s3:locking: add share_mode_wakeup_waiters() helper functionStefan Metzmacher2019-09-092-0/+13
| | | | | | | BUG: https://bugzilla.samba.org/show_bug.cgi?id=14113 Signed-off-by: Stefan Metzmacher <metze@samba.org> Reviewed-by: Volker Lendecke <vl@samba.org>
* s3:locking: add/split out byte_range_{valid,overlap}() helper functionsStefan Metzmacher2019-09-092-16/+99
| | | | | | | | | | | They implement the logic from [MS-FSA]. The following commits will use these functions in other locations. BUG: https://bugzilla.samba.org/show_bug.cgi?id=14113 Signed-off-by: Stefan Metzmacher <metze@samba.org> Reviewed-by: Volker Lendecke <vl@samba.org>
* Spelling fixes s/emtpy/empty/Mathieu Parent2019-09-011-1/+1
| | | | | | Signed-off-by: Mathieu Parent <math.parent@gmail.com> Reviewed-by: Andrew Bartlett <abartlet@samba.org> Reviewed-by: Gary Lockyer <gary@catalyst.net.nz>
* smbd: Save two lines in find_share_mode_entryVolker Lendecke2019-08-191-3/+1
| | | | | | | Directly initialized variables give compilers less reason to complain Signed-off-by: Volker Lendecke <vl@samba.org> Reviewed-by: Ralph Böhme <slow@samba.org>
* smbd: Factor out remove_lease_if_stale()Volker Lendecke2019-08-062-40/+40
| | | | | | | | | | | | | | | | | | | | | | | remove_lease_if_stale() does not have the check if (e == e2) { /* Not ourselves. */ continue; } that remove_share_mode_lease() had. However, remove_share_mode_lease() has already set e->op_type=NO_OPLOCK, so that the if (e->op_type != LEASE_OPLOCK) { continue; } statement has the same effect. Why? The next commit will need it for proper error path cleanup. Signed-off-by: Volker Lendecke <vl@samba.org> Reviewed-by: Jeremy Allison <jra@samba.org>
* smbd: Slightly simplify set_share_mode()Volker Lendecke2019-08-062-7/+4
| | | | | | | | The fsp carries all required information also for leases. There's no need to pass that as additional parameters Signed-off-by: Volker Lendecke <vl@samba.org> Reviewed-by: Jeremy Allison <jra@samba.org>
* smbd: Move fsp_client_guid() to locking/Volker Lendecke2019-08-062-0/+7
| | | | | | | | Yes, this adds another peek from locking/ back into smbd/proto.h, but locking/locking.c does the same already. Signed-off-by: Volker Lendecke <vl@samba.org> Reviewed-by: Jeremy Allison <jra@samba.org>
* smbd: Pass share_access/access_mask explicitly to set_share_mode()Volker Lendecke2019-08-062-2/+6
| | | | | | | | | Makes the interface more obvious to me. Also, I want to remove fsp->share_access, which is not really used anywhere after the fsp has been fully established. Signed-off-by: Volker Lendecke <vl@samba.org> Reviewed-by: Jeremy Allison <jra@samba.org>
* smbd: Increase a debug levelVolker Lendecke2019-07-171-2/+2
| | | | | | | | This is not a real error, it happens when the share mode record is not around. Signed-off-by: Volker Lendecke <vl@samba.org> Reviewed-by: Uri Simchoni <uri@samba.org>