diff options
| author | Volker Lendecke <vl@samba.org> | 2014-06-04 14:36:57 +0000 |
|---|---|---|
| committer | Jeremy Allison <jra@samba.org> | 2014-06-18 18:51:13 +0200 |
| commit | e6b33ce6112bc41f2a5027f2097c74537c056a5b (patch) | |
| tree | bba896abf713a76550f9d1cafad10a4d4991ed03 /source3/lib | |
| parent | 94db1b21d062099e1a0e2f290fc12e458c6c6f76 (diff) | |
| download | samba-e6b33ce6112bc41f2a5027f2097c74537c056a5b.tar.gz samba-e6b33ce6112bc41f2a5027f2097c74537c056a5b.tar.xz samba-e6b33ce6112bc41f2a5027f2097c74537c056a5b.zip | |
messaging3: Make the _send function return 0/errno
This is to eventually make messaging_dgm usable in ctdb
Signed-off-by: Volker Lendecke <vl@samba.org>
Reviewed-by: Jeremy Allison <jra@samba.org>
Diffstat (limited to 'source3/lib')
| -rw-r--r-- | source3/lib/messages.c | 20 | ||||
| -rw-r--r-- | source3/lib/messages_ctdbd.c | 15 | ||||
| -rw-r--r-- | source3/lib/messages_dgm.c | 23 |
3 files changed, 34 insertions, 24 deletions
diff --git a/source3/lib/messages.c b/source3/lib/messages.c index 1263bf1698..a9015d05b0 100644 --- a/source3/lib/messages.c +++ b/source3/lib/messages.c @@ -412,14 +412,20 @@ NTSTATUS messaging_send_iov(struct messaging_context *msg_ctx, struct server_id server, uint32_t msg_type, const struct iovec *iov, int iovlen) { + int ret; + if (server_id_is_disconnected(&server)) { return NT_STATUS_INVALID_PARAMETER_MIX; } if (!procid_is_local(&server)) { - return msg_ctx->remote->send_fn(msg_ctx->id, server, - msg_type, iov, iovlen, - msg_ctx->remote); + ret = msg_ctx->remote->send_fn(msg_ctx->id, server, + msg_type, iov, iovlen, + msg_ctx->remote); + if (ret != 0) { + return map_nt_error_from_unix(ret); + } + return NT_STATUS_OK; } if (messaging_is_self_send(msg_ctx, &server)) { @@ -444,8 +450,12 @@ NTSTATUS messaging_send_iov(struct messaging_context *msg_ctx, return NT_STATUS_OK; } - return msg_ctx->local->send_fn(msg_ctx->id, server, msg_type, - iov, iovlen, msg_ctx->local); + ret = msg_ctx->local->send_fn(msg_ctx->id, server, msg_type, + iov, iovlen, msg_ctx->local); + if (ret != 0) { + return map_nt_error_from_unix(ret); + } + return NT_STATUS_OK; } static struct messaging_rec *messaging_rec_dup(TALLOC_CTX *mem_ctx, diff --git a/source3/lib/messages_ctdbd.c b/source3/lib/messages_ctdbd.c index 3b7fa05322..add089da38 100644 --- a/source3/lib/messages_ctdbd.c +++ b/source3/lib/messages_ctdbd.c @@ -88,10 +88,10 @@ struct ctdbd_connection *messaging_ctdbd_connection(void) return global_ctdbd_connection; } -static NTSTATUS messaging_ctdb_send(struct server_id src, - struct server_id pid, int msg_type, - const struct iovec *iov, int iovlen, - struct messaging_backend *backend) +static int messaging_ctdb_send(struct server_id src, + struct server_id pid, int msg_type, + const struct iovec *iov, int iovlen, + struct messaging_backend *backend) { struct messaging_ctdbd_context *ctx = talloc_get_type_abort( backend->private_data, struct messaging_ctdbd_context); @@ -102,7 +102,7 @@ static NTSTATUS messaging_ctdb_send(struct server_id src, buf = iov_buf(talloc_tos(), iov, iovlen); if (buf == NULL) { - return NT_STATUS_NO_MEMORY; + return ENOMEM; } @@ -116,7 +116,10 @@ static NTSTATUS messaging_ctdb_send(struct server_id src, TALLOC_FREE(buf); - return status; + if (NT_STATUS_IS_OK(status)) { + return 0; + } + return map_errno_from_nt_status(status); } static int messaging_ctdbd_destructor(struct messaging_ctdbd_context *ctx) diff --git a/source3/lib/messages_dgm.c b/source3/lib/messages_dgm.c index 09b635db56..fb0419da5b 100644 --- a/source3/lib/messages_dgm.c +++ b/source3/lib/messages_dgm.c @@ -44,10 +44,10 @@ struct messaging_dgm_hdr { struct server_id src; }; -static NTSTATUS messaging_dgm_send(struct server_id src, - struct server_id pid, int msg_type, - const struct iovec *iov, int iovlen, - struct messaging_backend *backend); +static int messaging_dgm_send(struct server_id src, + struct server_id pid, int msg_type, + const struct iovec *iov, int iovlen, + struct messaging_backend *backend); static void messaging_dgm_recv(struct unix_msg_ctx *ctx, uint8_t *msg, size_t msg_len, void *private_data); @@ -292,10 +292,10 @@ static int messaging_dgm_context_destructor(struct messaging_dgm_context *c) return 0; } -static NTSTATUS messaging_dgm_send(struct server_id src, - struct server_id pid, int msg_type, - const struct iovec *iov, int iovlen, - struct messaging_backend *backend) +static int messaging_dgm_send(struct server_id src, + struct server_id pid, int msg_type, + const struct iovec *iov, int iovlen, + struct messaging_backend *backend) { struct messaging_dgm_context *ctx = talloc_get_type_abort( backend->private_data, struct messaging_dgm_context); @@ -311,7 +311,7 @@ static NTSTATUS messaging_dgm_send(struct server_id src, dst_pathlen = snprintf(dst.sun_path, sizeof(dst.sun_path), "%s/msg/%u", ctx->cache_dir, (unsigned)pid.pid); if (dst_pathlen >= sizeof(dst.sun_path)) { - return NT_STATUS_NAME_TOO_LONG; + return ENAMETOOLONG; } hdr.msg_version = MESSAGE_VERSION; @@ -331,10 +331,7 @@ static NTSTATUS messaging_dgm_send(struct server_id src, ret = unix_msg_send(ctx->dgm_ctx, &dst, iov2, iovlen + 1); unbecome_root(); - if (ret != 0) { - return map_nt_error_from_unix(ret); - } - return NT_STATUS_OK; + return ret; } static void messaging_dgm_recv(struct unix_msg_ctx *ctx, |
