s3:messaging: add fds-array to message-backend send function
authorMichael Adam <obnox@samba.org>
Sat, 17 May 2014 13:16:02 +0000 (15:16 +0200)
committerMichael Adam <obnox@samba.org>
Wed, 24 Sep 2014 06:44:12 +0000 (08:44 +0200)
Pair-Programmed-With: Stefan Metzmacher <metze@samba.org>
Signed-off-by: Stefan Metzmacher <metze@samba.org>
Signed-off-by: Michael Adam <obnox@samba.org>
source3/include/messages.h
source3/lib/messages.c
source3/lib/messages_ctdbd.c
source3/lib/messages_dgm.c
source3/lib/messages_dgm.h

index 7543301ce2f12048a8c5fe2d96649edfb78bbfb6..b7193d5a85f1137df7a020fafd4d50c1c15ed11c 100644 (file)
@@ -69,6 +69,7 @@ struct messaging_backend {
        int (*send_fn)(struct server_id src,
                       struct server_id pid, int msg_type,
                       const struct iovec *iov, int iovlen,
+                      const int *fds, size_t num_fds,
                       struct messaging_backend *backend);
        void *private_data;
 };
index 56108abd2127e42c162f169a0883b54077606c5b..0579dbf359944736b80f9d2845db3464c0c02e17 100644 (file)
@@ -468,6 +468,7 @@ NTSTATUS messaging_send_iov(struct messaging_context *msg_ctx,
        if (!procid_is_local(&server)) {
                ret = msg_ctx->remote->send_fn(msg_ctx->id, server,
                                               msg_type, iov, iovlen,
+                                              NULL, 0,
                                               msg_ctx->remote);
                if (ret != 0) {
                        return map_nt_error_from_unix(ret);
@@ -510,7 +511,7 @@ NTSTATUS messaging_send_iov(struct messaging_context *msg_ctx,
        memcpy(&iov2[1], iov, iovlen * sizeof(*iov));
 
        become_root();
-       ret = messaging_dgm_send(server.pid, iov2, iovlen+1);
+       ret = messaging_dgm_send(server.pid, iov2, iovlen+1, NULL, 0);
        unbecome_root();
 
        if (ret != 0) {
index 9c13260173c19a24c19f18fbb0bd5090cba2b465..3d600bfc3388b164cb2fa34d21dad7be7a7b0523 100644 (file)
@@ -91,6 +91,7 @@ struct ctdbd_connection *messaging_ctdbd_connection(void)
 static int messaging_ctdb_send(struct server_id src,
                               struct server_id pid, int msg_type,
                               const struct iovec *iov, int iovlen,
+                              const int *fds, size_t num_fds,
                               struct messaging_backend *backend)
 {
        struct messaging_ctdbd_context *ctx = talloc_get_type_abort(
@@ -99,6 +100,10 @@ static int messaging_ctdb_send(struct server_id src,
        uint8_t *buf;
        NTSTATUS status;
 
+       if (num_fds > 0) {
+               return ENOSYS;
+       }
+
        buf = iov_buf(talloc_tos(), iov, iovlen);
        if (buf == NULL) {
                return ENOMEM;
index 68307698a5c77e84c77555bc9f6670feb79614a4..30ab7439aad8dc292bedfe0e6f436ecb564e836b 100644 (file)
@@ -301,7 +301,9 @@ void messaging_dgm_destroy(void)
        TALLOC_FREE(global_dgm_context);
 }
 
-int messaging_dgm_send(pid_t pid, const struct iovec *iov, int iovlen)
+int messaging_dgm_send(pid_t pid,
+                      const struct iovec *iov, int iovlen,
+                      const int *fds, size_t num_fds)
 {
        struct messaging_dgm_context *ctx = global_dgm_context;
        struct sockaddr_un dst;
@@ -322,7 +324,7 @@ int messaging_dgm_send(pid_t pid, const struct iovec *iov, int iovlen)
 
        DEBUG(10, ("%s: Sending message to %u\n", __func__, (unsigned)pid));
 
-       ret = unix_msg_send(ctx->dgm_ctx, &dst, iov, iovlen, NULL, 0);
+       ret = unix_msg_send(ctx->dgm_ctx, &dst, iov, iovlen, fds, num_fds);
 
        return ret;
 }
index 3c915c18ef14779635b2ef53ad50a550483665fb..be4b1e5eec0b889624907407a8c9a2c00a76e532 100644 (file)
@@ -31,7 +31,9 @@ int messaging_dgm_init(struct tevent_context *ev,
                                       void *private_data),
                       void *recv_cb_private_data);
 void messaging_dgm_destroy(void);
-int messaging_dgm_send(pid_t pid, const struct iovec *iov, int iovlen);
+int messaging_dgm_send(pid_t pid,
+                      const struct iovec *iov, int iovlen,
+                      const int *fds, size_t num_fds);
 int messaging_dgm_cleanup(pid_t pid);
 int messaging_dgm_wipe(void);
 void *messaging_dgm_register_tevent_context(TALLOC_CTX *mem_ctx,