r12460: Fixes for bug 3349
authorVolker Lendecke <vlendec@samba.org>
Sat, 24 Dec 2005 21:06:41 +0000 (21:06 +0000)
committerGerald (Jerry) Carter <jerry@samba.org>
Wed, 10 Oct 2007 16:05:56 +0000 (11:05 -0500)
source/smbd/close.c
source/smbd/open.c
source/smbd/oplock.c

index 407c6078385c827f59eaa1fe01c62f4dc5e657bb..f83486993597ebcb3741cd5fc1b1168d7e0df8e3 100644 (file)
@@ -130,8 +130,10 @@ static void notify_deferred_opens(struct share_mode_lock *lck)
                         */
                        schedule_deferred_open_smb_message(e->op_mid);
                } else {
+                       become_root();
                        message_send_pid(e->pid, MSG_SMB_OPEN_RETRY,
                                         e, sizeof(*e), True);
+                       unbecome_root();
                }
        }
 }
index 7621ee001dd0b0f719759d5b734b2d3fffeeb8ac..e6c749fab9cf48c58a2f4cabd72c81d702985437 100644 (file)
@@ -682,11 +682,15 @@ static BOOL delay_for_oplocks(struct share_mode_lock *lck, files_struct *fsp)
        }
 
        if (delay_it) {
+               BOOL ret;
                DEBUG(10, ("Sending break request to PID %s\n",
                           procid_str_static(&exclusive->pid)));
                exclusive->op_mid = get_current_mid();
-               if (!message_send_pid(exclusive->pid, MSG_SMB_BREAK_REQUEST,
-                                     exclusive, sizeof(*exclusive), True)) {
+               become_root();
+               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"));
                }
                file_free(fsp);
index f6c97c3df48ceae1d0f25fbb1f4d2277ccc954b7..54e7da11afe9ae25ecdf9538165bac32b50a0150 100644 (file)
@@ -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
                 * with 'ok, oplock broken' */
                DEBUG(3, ("Did not find fsp\n"));
+               become_root();
                message_send_pid(src, MSG_SMB_BREAK_RESPONSE,
                                 msg, sizeof(*msg), True);
+               unbecome_root();
                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",
                          (double)fsp->dev, (double)fsp->inode,
                          fsp->fsp_name));
+               become_root();
                message_send_pid(src, MSG_SMB_BREAK_RESPONSE,
                                 msg, sizeof(*msg), True);
+               unbecome_root();
                return;
        }
 
@@ -545,11 +549,13 @@ void reply_to_oplock_break_requests(files_struct *fsp)
 {
        int i;
 
+       become_root();
        for (i=0; i<fsp->num_pending_break_messages; i++) {
                struct share_mode_entry *msg = &fsp->pending_break_messages[i];
                message_send_pid(msg->pid, MSG_SMB_BREAK_RESPONSE,
                                 msg, sizeof(*msg), True);
        }
+       unbecome_root();
 
        SAFE_FREE(fsp->pending_break_messages);
        fsp->num_pending_break_messages = 0;
@@ -686,8 +692,10 @@ void release_level_2_oplocks_on_change(files_struct *fsp)
                        abort();
                }
 
+               become_root();
                message_send_pid(share_entry->pid, MSG_SMB_ASYNC_LEVEL2_BREAK,
                                 share_entry, sizeof(*share_entry), True);
+               unbecome_root();
        }
 
        remove_all_share_oplocks(lck, fsp);