From: Volker Lendecke Date: Wed, 16 May 2012 23:51:26 +0000 (-0700) Subject: s3: Check for serverid_exists in find_oplock_types X-Git-Tag: samba-4.0.0alpha21~90 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=49237b0cef181f51dc584c8f2b0a718c5a6a97e5;p=thirdparty%2Fsamba.git s3: Check for serverid_exists in find_oplock_types Signed-off-by: Jeremy Allison --- diff --git a/source3/smbd/open.c b/source3/smbd/open.c index 8a5273ef14e..f0e523dc779 100644 --- a/source3/smbd/open.c +++ b/source3/smbd/open.c @@ -1128,6 +1128,11 @@ static void find_oplock_types(files_struct *fsp, if (BATCH_OPLOCK_TYPE(lck->data->share_modes[i].op_type)) { /* batch - can only be one. */ + if (share_mode_stale_pid(lck->data, i)) { + DEBUG(10, ("find_oplock_types: Found stale " + "batch oplock\n")); + continue; + } if (*pp_ex_or_batch || *pp_batch || *got_level2 || *got_no_oplock) { smb_panic("Bad batch oplock entry."); } @@ -1135,6 +1140,11 @@ static void find_oplock_types(files_struct *fsp, } if (EXCLUSIVE_OPLOCK_TYPE(lck->data->share_modes[i].op_type)) { + if (share_mode_stale_pid(lck->data, i)) { + DEBUG(10, ("find_oplock_types: Found stale " + "duplicate oplock\n")); + continue; + } /* Exclusive or batch - can only be one. */ if (*pp_ex_or_batch || *got_level2 || *got_no_oplock) { smb_panic("Bad exclusive or batch oplock entry."); @@ -1144,6 +1154,11 @@ static void find_oplock_types(files_struct *fsp, if (LEVEL_II_OPLOCK_TYPE(lck->data->share_modes[i].op_type)) { if (*pp_batch || *pp_ex_or_batch) { + if (share_mode_stale_pid(lck->data, i)) { + DEBUG(10, ("find_oplock_types: Found " + "stale LevelII oplock\n")); + continue; + } smb_panic("Bad levelII oplock entry."); } *got_level2 = true; @@ -1151,6 +1166,11 @@ static void find_oplock_types(files_struct *fsp, if (lck->data->share_modes[i].op_type == NO_OPLOCK) { if (*pp_batch || *pp_ex_or_batch) { + if (share_mode_stale_pid(lck->data, i)) { + DEBUG(10, ("find_oplock_types: Found " + "stale NO_OPLOCK entry\n")); + continue; + } smb_panic("Bad no oplock entry."); } *got_no_oplock = true;