mirror of
https://github.com/samba-team/samba.git
synced 2025-01-12 09:18:10 +03:00
r12460: Fixes for bug 3349
This commit is contained in:
parent
02ccde5f47
commit
040eda6bf0
@ -130,8 +130,10 @@ static void notify_deferred_opens(struct share_mode_lock *lck)
|
|||||||
*/
|
*/
|
||||||
schedule_deferred_open_smb_message(e->op_mid);
|
schedule_deferred_open_smb_message(e->op_mid);
|
||||||
} else {
|
} else {
|
||||||
|
become_root();
|
||||||
message_send_pid(e->pid, MSG_SMB_OPEN_RETRY,
|
message_send_pid(e->pid, MSG_SMB_OPEN_RETRY,
|
||||||
e, sizeof(*e), True);
|
e, sizeof(*e), True);
|
||||||
|
unbecome_root();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -682,11 +682,15 @@ static BOOL delay_for_oplocks(struct share_mode_lock *lck, files_struct *fsp)
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (delay_it) {
|
if (delay_it) {
|
||||||
|
BOOL ret;
|
||||||
DEBUG(10, ("Sending break request to PID %s\n",
|
DEBUG(10, ("Sending break request to PID %s\n",
|
||||||
procid_str_static(&exclusive->pid)));
|
procid_str_static(&exclusive->pid)));
|
||||||
exclusive->op_mid = get_current_mid();
|
exclusive->op_mid = get_current_mid();
|
||||||
if (!message_send_pid(exclusive->pid, MSG_SMB_BREAK_REQUEST,
|
become_root();
|
||||||
exclusive, sizeof(*exclusive), True)) {
|
ret = message_send_pid(exclusive->pid, MSG_SMB_BREAK_REQUEST,
|
||||||
|
exclusive, sizeof(*exclusive), True);
|
||||||
|
unbecome_root();
|
||||||
|
if (!ret) {
|
||||||
DEBUG(3, ("Could not send oplock break message\n"));
|
DEBUG(3, ("Could not send oplock break message\n"));
|
||||||
}
|
}
|
||||||
file_free(fsp);
|
file_free(fsp);
|
||||||
|
@ -398,8 +398,10 @@ static void process_oplock_break_message(int msg_type, struct process_id src,
|
|||||||
* get to process this message, we have closed the file. Reply
|
* get to process this message, we have closed the file. Reply
|
||||||
* with 'ok, oplock broken' */
|
* with 'ok, oplock broken' */
|
||||||
DEBUG(3, ("Did not find fsp\n"));
|
DEBUG(3, ("Did not find fsp\n"));
|
||||||
|
become_root();
|
||||||
message_send_pid(src, MSG_SMB_BREAK_RESPONSE,
|
message_send_pid(src, MSG_SMB_BREAK_RESPONSE,
|
||||||
msg, sizeof(*msg), True);
|
msg, sizeof(*msg), True);
|
||||||
|
unbecome_root();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -418,8 +420,10 @@ static void process_oplock_break_message(int msg_type, struct process_id src,
|
|||||||
DEBUG(3, ("Already downgraded oplock on %.0f/%.0f: %s\n",
|
DEBUG(3, ("Already downgraded oplock on %.0f/%.0f: %s\n",
|
||||||
(double)fsp->dev, (double)fsp->inode,
|
(double)fsp->dev, (double)fsp->inode,
|
||||||
fsp->fsp_name));
|
fsp->fsp_name));
|
||||||
|
become_root();
|
||||||
message_send_pid(src, MSG_SMB_BREAK_RESPONSE,
|
message_send_pid(src, MSG_SMB_BREAK_RESPONSE,
|
||||||
msg, sizeof(*msg), True);
|
msg, sizeof(*msg), True);
|
||||||
|
unbecome_root();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -545,11 +549,13 @@ void reply_to_oplock_break_requests(files_struct *fsp)
|
|||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
|
become_root();
|
||||||
for (i=0; i<fsp->num_pending_break_messages; i++) {
|
for (i=0; i<fsp->num_pending_break_messages; i++) {
|
||||||
struct share_mode_entry *msg = &fsp->pending_break_messages[i];
|
struct share_mode_entry *msg = &fsp->pending_break_messages[i];
|
||||||
message_send_pid(msg->pid, MSG_SMB_BREAK_RESPONSE,
|
message_send_pid(msg->pid, MSG_SMB_BREAK_RESPONSE,
|
||||||
msg, sizeof(*msg), True);
|
msg, sizeof(*msg), True);
|
||||||
}
|
}
|
||||||
|
unbecome_root();
|
||||||
|
|
||||||
SAFE_FREE(fsp->pending_break_messages);
|
SAFE_FREE(fsp->pending_break_messages);
|
||||||
fsp->num_pending_break_messages = 0;
|
fsp->num_pending_break_messages = 0;
|
||||||
@ -686,8 +692,10 @@ void release_level_2_oplocks_on_change(files_struct *fsp)
|
|||||||
abort();
|
abort();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
become_root();
|
||||||
message_send_pid(share_entry->pid, MSG_SMB_ASYNC_LEVEL2_BREAK,
|
message_send_pid(share_entry->pid, MSG_SMB_ASYNC_LEVEL2_BREAK,
|
||||||
share_entry, sizeof(*share_entry), True);
|
share_entry, sizeof(*share_entry), True);
|
||||||
|
unbecome_root();
|
||||||
}
|
}
|
||||||
|
|
||||||
remove_all_share_oplocks(lck, fsp);
|
remove_all_share_oplocks(lck, fsp);
|
||||||
|
Loading…
Reference in New Issue
Block a user