diff options
author | Jeremy Allison <jra@samba.org> | 2003-04-22 17:31:22 +0000 |
---|---|---|
committer | Jeremy Allison <jra@samba.org> | 2003-04-22 17:31:22 +0000 |
commit | c95840b76f172a78e00cc4d4d750fb0a992d9120 (patch) | |
tree | fc6feaf9685dc5a035589bee9332f7aff7361d5a /source3/smbd | |
parent | 0865120fca988a8016f3dd9480f171794212e436 (diff) | |
download | samba-c95840b76f172a78e00cc4d4d750fb0a992d9120.tar.gz samba-c95840b76f172a78e00cc4d4d750fb0a992d9120.tar.bz2 samba-c95840b76f172a78e00cc4d4d750fb0a992d9120.zip |
Add runtime tests for "impossible" case with -DDEVELOPER. Trying to catch logic
error on Linux.
Jeremy.
(This used to be commit 5d2b2b5607faa4bf2c418987776c1ee327b098c6)
Diffstat (limited to 'source3/smbd')
-rw-r--r-- | source3/smbd/open.c | 27 |
1 files changed, 27 insertions, 0 deletions
diff --git a/source3/smbd/open.c b/source3/smbd/open.c index 6b3dcbe71b..5e4f3caca7 100644 --- a/source3/smbd/open.c +++ b/source3/smbd/open.c @@ -532,6 +532,29 @@ existing desired access (0x%x).\n", fname, (unsigned int)desired_access, (unsign return True; } + +#if defined(DEVELOPER) +static void validate_my_share_entries(share_mode_entry *share_entry) +{ + files_struct *fsp; + + if (share_entry->pid != sys_getpid()) + return; + + fsp = file_find_dif(share_entry->dev, share_entry->inode, share_entry->share_file_id); + if (!fsp) { + smb_panic("validate_my_share_entries: Cannot match a share entry with an open file\n"); + } + + if (((uint16)fsp->oplock_type) != share_entry->op_type) { + pstring str; + slprintf(str, sizeof(str)-1, "validate_my_share_entries: file %s, oplock_type = 0x%x, op_type = 0x%x\n", + fsp->fsp_name, (unsigned int)fsp->oplock_type, (unsigned int)share_entry->op_type ); + smb_panic(str); + } +} +#endif + /**************************************************************************** Deal with open deny mode and oplock break processing. Invarient: Share mode must be locked on entry and exit. @@ -572,6 +595,10 @@ static int open_mode_check(connection_struct *conn, const char *fname, SMB_DEV_T for(i = 0; i < num_share_modes; i++) { share_mode_entry *share_entry = &old_shares[i]; +#if defined(DEVELOPER) + validate_my_share_entries(share_entry); +#endif + /* * By observation of NetBench, oplocks are broken *before* share * modes are checked. This allows a file to be closed by the client |