messaging: Call messaging_dgm_send under become_root only if necessary
authorRalph Boehme <slow@samba.org>
Thu, 1 Sep 2016 12:08:55 +0000 (14:08 +0200)
committerJeremy Allison <jra@samba.org>
Mon, 12 Sep 2016 22:19:26 +0000 (00:19 +0200)
Signed-off-by: Ralph Boehme <slow@samba.org>
Reviewed-by: Jeremy Allison <jra@samba.org>
source3/lib/messages.c
source4/lib/messaging/messaging.c

index 12e7dbcbaa10cb7d64d67c5d5e5636ff2e3060e6..3ed6dfe92391843d3d892a3939d36a913f4db410 100644 (file)
@@ -464,9 +464,14 @@ int messaging_send_iov_from(struct messaging_context *msg_ctx,
        iov2[0] = (struct iovec){ .iov_base = hdr, .iov_len = sizeof(hdr) };
        memcpy(&iov2[1], iov, iovlen * sizeof(*iov));
 
-       become_root();
        ret = messaging_dgm_send(dst.pid, iov2, iovlen+1, fds, num_fds);
-       unbecome_root();
+
+       if (ret == EACCES) {
+               become_root();
+               ret = messaging_dgm_send(dst.pid, iov2, iovlen+1,
+                                        fds, num_fds);
+               unbecome_root();
+       }
 
        return ret;
 }
index 0f3891ea2e0773ea3f3d7d3c251092e1c287d195..ea50627c2bd286c7397c9c2383c2c53adb9ba87d 100644 (file)
@@ -255,9 +255,14 @@ NTSTATUS imessaging_send(struct imessaging_context *msg, struct server_id server
                pid = getpid();
        }
 
-       priv = root_privileges();
        ret = messaging_dgm_send(pid, iov, num_iov, NULL, 0);
-       TALLOC_FREE(priv);
+
+       if (ret == EACCES) {
+               priv = root_privileges();
+               ret = messaging_dgm_send(pid, iov, num_iov, NULL, 0);
+               TALLOC_FREE(priv);
+       }
+
        if (ret != 0) {
                return map_nt_error_from_unix_common(ret);
        }