[SCM] Samba Shared Repository - branch master updated

Jeremy Allison jra at samba.org
Wed Jun 18 13:18:04 MDT 2014


The branch, master has been updated
       via  364bdad messaging3: Make messaging_dgm_init return 0/errno
       via  b84ea45 messaging3: Use "goto fail_nomem" where appropriate
       via  4f46318 messaging3: simplify messaging_dgm_lockfile_remove
       via  9fd8d51 messaging3: Make messaging_dgm_wipe return 0/errno
       via  2f34350 messaging3: Make messaging_dgm_cleanup return 0/errno
       via  e6b33ce messaging3: Make the _send function return 0/errno
       via  94db1b2 messaging3: Remove two uses of talloc_tos()
       via  748ffcc messaging3: Remove use of full_path_tos()
       via  516e2f5 unix_msg: Lift sockaddr_un handling from unix_msg_send
       via  73a1205 unix_msg: Lift sockaddr_un handling from unix_msg_init
       via  0d81063 unix_msg: Lift sockaddr_un handling from unix_dgram_send
       via  6ea627b unix_msg: Lift sockaddr_un handling from unix_dgram_send_queue_init
       via  4ca79b0 unix_msg: Lift sockaddr_un handling from unix_dgram_init
      from  32b45bf lib: Apply const to nt_time_to_unix_timespec

http://gitweb.samba.org/?p=samba.git;a=shortlog;h=master


- Log -----------------------------------------------------------------
commit 364bdadde3159dde1ddcc8c5fa4be981448f6833
Author: Volker Lendecke <vl at samba.org>
Date:   Tue Jun 10 15:21:10 2014 +0000

    messaging3: Make messaging_dgm_init return 0/errno
    
    Signed-off-by: Volker Lendecke <vl at samba.org>
    Reviewed-by: Jeremy Allison <jra at samba.org>
    
    Autobuild-User(master): Jeremy Allison <jra at samba.org>
    Autobuild-Date(master): Wed Jun 18 21:17:57 CEST 2014 on sn-devel-104

commit b84ea45fbd54fde820438d2065eedfb757b7158d
Author: Volker Lendecke <vl at samba.org>
Date:   Tue Jun 10 14:57:05 2014 +0000

    messaging3: Use "goto fail_nomem" where appropriate
    
    Signed-off-by: Volker Lendecke <vl at samba.org>
    Reviewed-by: Jeremy Allison <jra at samba.org>

commit 4f4631831a379f2ebf0eb3d178fd9e91d951301a
Author: Volker Lendecke <vl at samba.org>
Date:   Fri May 30 15:31:33 2014 +0000

    messaging3: simplify messaging_dgm_lockfile_remove
    
    full_path_tos() isn't really required here, this is not a hot code path
    
    Signed-off-by: Volker Lendecke <vl at samba.org>
    Reviewed-by: Jeremy Allison <jra at samba.org>

commit 9fd8d5154f178208f82777f7f81682be66e79400
Author: Volker Lendecke <vl at samba.org>
Date:   Wed Jun 4 14:47:05 2014 +0000

    messaging3: Make messaging_dgm_wipe return 0/errno
    
    Signed-off-by: Volker Lendecke <vl at samba.org>
    Reviewed-by: Jeremy Allison <jra at samba.org>

commit 2f3435085e0d6f64cd41b2d42e446da8821abc4b
Author: Volker Lendecke <vl at samba.org>
Date:   Wed Jun 4 14:42:46 2014 +0000

    messaging3: Make messaging_dgm_cleanup return 0/errno
    
    Signed-off-by: Volker Lendecke <vl at samba.org>
    Reviewed-by: Jeremy Allison <jra at samba.org>

commit e6b33ce6112bc41f2a5027f2097c74537c056a5b
Author: Volker Lendecke <vl at samba.org>
Date:   Wed Jun 4 14:36:57 2014 +0000

    messaging3: Make the _send function return 0/errno
    
    This is to eventually make messaging_dgm usable in ctdb
    
    Signed-off-by: Volker Lendecke <vl at samba.org>
    Reviewed-by: Jeremy Allison <jra at samba.org>

commit 94db1b21d062099e1a0e2f290fc12e458c6c6f76
Author: Volker Lendecke <vl at samba.org>
Date:   Mon Jun 2 23:01:46 2014 +0200

    messaging3: Remove two uses of talloc_tos()
    
    Signed-off-by: Volker Lendecke <vl at samba.org>
    Reviewed-by: Jeremy Allison <jra at samba.org>

commit 748ffccd5a1143048cbfe7b20fc6e850eb99cb2f
Author: Volker Lendecke <vl at samba.org>
Date:   Mon Jun 2 22:29:44 2014 +0200

    messaging3: Remove use of full_path_tos()
    
    This is not performance critical, and this removes source3 specific
    code
    
    Signed-off-by: Volker Lendecke <vl at samba.org>
    Reviewed-by: Jeremy Allison <jra at samba.org>

commit 516e2f5e68aa10306a346865922b35e9a1e299c2
Author: Volker Lendecke <vl at samba.org>
Date:   Sun Jun 1 20:57:21 2014 +0200

    unix_msg: Lift sockaddr_un handling from unix_msg_send
    
    Signed-off-by: Volker Lendecke <vl at samba.org>
    Reviewed-by: Jeremy Allison <jra at samba.org>

commit 73a1205fe8a8aae357a96fb5074ed4dd16082fff
Author: Volker Lendecke <vl at samba.org>
Date:   Sun Jun 1 20:57:21 2014 +0200

    unix_msg: Lift sockaddr_un handling from unix_msg_init
    
    Signed-off-by: Volker Lendecke <vl at samba.org>
    Reviewed-by: Jeremy Allison <jra at samba.org>

commit 0d81063ea93302b1782e6e5e942fcc6788c75afe
Author: Volker Lendecke <vl at samba.org>
Date:   Sun Jun 1 20:57:21 2014 +0200

    unix_msg: Lift sockaddr_un handling from unix_dgram_send
    
    Signed-off-by: Volker Lendecke <vl at samba.org>
    Reviewed-by: Jeremy Allison <jra at samba.org>

commit 6ea627b3572ad72202e062a9e006eba53cce1bc6
Author: Volker Lendecke <vl at samba.org>
Date:   Sun Jun 1 20:57:21 2014 +0200

    unix_msg: Lift sockaddr_un handling from unix_dgram_send_queue_init
    
    Signed-off-by: Volker Lendecke <vl at samba.org>
    Reviewed-by: Jeremy Allison <jra at samba.org>

commit 4ca79b0b11c3c566927f7f1211254fb78f0bd6b9
Author: Volker Lendecke <vl at samba.org>
Date:   Sun Jun 1 20:57:21 2014 +0200

    unix_msg: Lift sockaddr_un handling from unix_dgram_init
    
    Signed-off-by: Volker Lendecke <vl at samba.org>
    Reviewed-by: Jeremy Allison <jra at samba.org>

-----------------------------------------------------------------------

Summary of changes:
 source3/include/messages.h         |   18 ++--
 source3/lib/messages.c             |   45 ++++++----
 source3/lib/messages_ctdbd.c       |   15 ++--
 source3/lib/messages_dgm.c         |  172 +++++++++++++++++-------------------
 source3/lib/unix_msg/test_drain.c  |    9 +-
 source3/lib/unix_msg/test_source.c |    6 +-
 source3/lib/unix_msg/tests.c       |   32 ++++---
 source3/lib/unix_msg/unix_msg.c    |   76 ++++++----------
 source3/lib/unix_msg/unix_msg.h    |    6 +-
 source3/smbd/server.c              |    6 +-
 source3/utils/smbcontrol.c         |   10 +-
 11 files changed, 195 insertions(+), 200 deletions(-)


Changeset truncated at 500 lines:

diff --git a/source3/include/messages.h b/source3/include/messages.h
index 5784e41..b718dd7 100644
--- a/source3/include/messages.h
+++ b/source3/include/messages.h
@@ -66,18 +66,18 @@ struct messaging_context;
 struct messaging_rec;
 
 struct messaging_backend {
-	NTSTATUS (*send_fn)(struct server_id src,
-			    struct server_id pid, int msg_type,
-			    const struct iovec *iov, int iovlen,
-			    struct messaging_backend *backend);
+	int (*send_fn)(struct server_id src,
+		       struct server_id pid, int msg_type,
+		       const struct iovec *iov, int iovlen,
+		       struct messaging_backend *backend);
 	void *private_data;
 };
 
-NTSTATUS messaging_dgm_init(struct messaging_context *msg_ctx,
-			    TALLOC_CTX *mem_ctx,
-			    struct messaging_backend **presult);
-NTSTATUS messaging_dgm_cleanup(struct messaging_context *msg_ctx, pid_t pid);
-NTSTATUS messaging_dgm_wipe(struct messaging_context *msg_ctx);
+int messaging_dgm_init(struct messaging_context *msg_ctx,
+		       TALLOC_CTX *mem_ctx,
+		       struct messaging_backend **presult);
+int messaging_dgm_cleanup(struct messaging_context *msg_ctx, pid_t pid);
+int messaging_dgm_wipe(struct messaging_context *msg_ctx);
 void *messaging_dgm_register_tevent_context(TALLOC_CTX *mem_ctx,
 					    struct messaging_context *msg_ctx,
 					    struct tevent_context *ev);
diff --git a/source3/lib/messages.c b/source3/lib/messages.c
index 1263bf1..9514392 100644
--- a/source3/lib/messages.c
+++ b/source3/lib/messages.c
@@ -209,6 +209,7 @@ struct messaging_context *messaging_init(TALLOC_CTX *mem_ctx,
 {
 	struct messaging_context *ctx;
 	NTSTATUS status;
+	int ret;
 	static bool have_context = false;
 
 	if (have_context) {
@@ -225,11 +226,10 @@ struct messaging_context *messaging_init(TALLOC_CTX *mem_ctx,
 	ctx->event_ctx = ev;
 	ctx->have_context = &have_context;
 
-	status = messaging_dgm_init(ctx, ctx, &ctx->local);
+	ret = messaging_dgm_init(ctx, ctx, &ctx->local);
 
-	if (!NT_STATUS_IS_OK(status)) {
-		DEBUG(2, ("messaging_dgm_init failed: %s\n",
-			  nt_errstr(status)));
+	if (ret != 0) {
+		DEBUG(2, ("messaging_dgm_init failed: %s\n", strerror(ret)));
 		TALLOC_FREE(ctx);
 		return NULL;
 	}
@@ -278,16 +278,16 @@ struct server_id messaging_server_id(const struct messaging_context *msg_ctx)
 NTSTATUS messaging_reinit(struct messaging_context *msg_ctx)
 {
 	NTSTATUS status;
+	int ret;
 
 	TALLOC_FREE(msg_ctx->local);
 
 	msg_ctx->id = procid_self();
 
-	status = messaging_dgm_init(msg_ctx, msg_ctx, &msg_ctx->local);
-	if (!NT_STATUS_IS_OK(status)) {
-		DEBUG(0, ("messaging_dgm_init failed: %s\n",
-			  nt_errstr(status)));
-		return status;
+	ret = messaging_dgm_init(msg_ctx, msg_ctx, &msg_ctx->local);
+	if (ret != 0) {
+		DEBUG(0, ("messaging_dgm_init failed: %s\n", strerror(errno)));
+		return map_nt_error_from_unix(ret);
 	}
 
 	TALLOC_FREE(msg_ctx->remote);
@@ -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,
@@ -869,10 +879,11 @@ static int mess_parent_dgm_cleanup(void *private_data)
 {
 	struct messaging_context *msg_ctx = talloc_get_type_abort(
 		private_data, struct messaging_context);
-	NTSTATUS status;
+	int ret;
 
-	status = messaging_dgm_wipe(msg_ctx);
-	DEBUG(10, ("messaging_dgm_wipe returned %s\n", nt_errstr(status)));
+	ret = messaging_dgm_wipe(msg_ctx);
+	DEBUG(10, ("messaging_dgm_wipe returned %s\n",
+		   ret ? strerror(ret) : "ok"));
 	return lp_parm_int(-1, "messaging", "messaging dgm cleanup interval",
 			   60*15);
 }
diff --git a/source3/lib/messages_ctdbd.c b/source3/lib/messages_ctdbd.c
index 3b7fa05..add089d 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 c3ab0d1..8b897f6 100644
--- a/source3/lib/messages_dgm.c
+++ b/source3/lib/messages_dgm.c
@@ -44,22 +44,22 @@ 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);
 
 static int messaging_dgm_context_destructor(struct messaging_dgm_context *c);
 
-static int messaging_dgm_lockfile_create(const char *cache_dir, pid_t pid,
+static int messaging_dgm_lockfile_create(TALLOC_CTX *tmp_ctx,
+					 const char *cache_dir, pid_t pid,
 					 int *plockfile_fd, uint64_t unique)
 {
-	char buf[PATH_MAX];
-	char *dir, *to_free;
-	ssize_t dirlen;
+	fstring buf;
+	char *dir;
 	char *lockfile_name;
 	int lockfile_fd;
 	struct flock lck = {};
@@ -67,9 +67,8 @@ static int messaging_dgm_lockfile_create(const char *cache_dir, pid_t pid,
 	ssize_t written;
 	bool ok;
 
-	dirlen = full_path_tos(cache_dir, "lck", buf, sizeof(buf),
-			       &dir, &to_free);
-	if (dirlen == -1) {
+	dir = talloc_asprintf(tmp_ctx, "%s/lck", cache_dir);
+	if (dir == NULL) {
 		return ENOMEM;
 	}
 
@@ -78,13 +77,13 @@ static int messaging_dgm_lockfile_create(const char *cache_dir, pid_t pid,
 		ret = errno;
 		DEBUG(1, ("%s: Could not create lock directory: %s\n",
 			  __func__, strerror(ret)));
-		TALLOC_FREE(to_free);
+		TALLOC_FREE(dir);
 		return ret;
 	}
 
-	lockfile_name = talloc_asprintf(talloc_tos(), "%s/%u", dir,
+	lockfile_name = talloc_asprintf(tmp_ctx, "%s/%u", dir,
 					(unsigned)pid);
-	TALLOC_FREE(to_free);
+	TALLOC_FREE(dir);
 	if (lockfile_name == NULL) {
 		DEBUG(1, ("%s: talloc_asprintf failed\n", __func__));
 		return ENOMEM;
@@ -143,35 +142,32 @@ fail_free:
 	return ret;
 }
 
-static int messaging_dgm_lockfile_remove(const char *cache_dir, pid_t pid)
+static int messaging_dgm_lockfile_remove(TALLOC_CTX *tmp_ctx,
+					 const char *cache_dir, pid_t pid)
 {
-	fstring fname;
-	char buf[PATH_MAX];
-	char *lockfile_name, *to_free;
-	ssize_t len;
+	char *lockfile_name;
 	int ret;
 
-	fstr_sprintf(fname, "lck/%u", (unsigned)pid);
-
-	len = full_path_tos(cache_dir, fname, buf, sizeof(buf),
-			    &lockfile_name, &to_free);
-	if (len == -1) {
+	lockfile_name = talloc_asprintf(
+		tmp_ctx, "%s/lck/%u", cache_dir, (unsigned)pid);
+	if (lockfile_name == NULL) {
 		return ENOMEM;
 	}
 
 	ret = unlink(lockfile_name);
 	if (ret == -1) {
 		ret = errno;
-		DEBUG(10, ("%s: unlink failed: %s\n", __func__,
-			   strerror(ret)));
+		DEBUG(10, ("%s: unlink(%s) failed: %s\n", __func__,
+			   lockfile_name, strerror(ret)));
 	}
-	TALLOC_FREE(to_free);
+
+	TALLOC_FREE(lockfile_name);
 	return ret;
 }
 
-NTSTATUS messaging_dgm_init(struct messaging_context *msg_ctx,
-			    TALLOC_CTX *mem_ctx,
-			    struct messaging_backend **presult)
+int messaging_dgm_init(struct messaging_context *msg_ctx,
+		       TALLOC_CTX *mem_ctx,
+		       struct messaging_backend **presult)
 {
 	struct messaging_backend *result;
 	struct messaging_dgm_context *ctx;
@@ -179,13 +175,14 @@ NTSTATUS messaging_dgm_init(struct messaging_context *msg_ctx,
 	int ret;
 	bool ok;
 	const char *cache_dir;
-	char *socket_dir, *socket_name;
+	char *socket_dir;
+	struct sockaddr_un socket_address;
+	size_t sockname_len;
 	uint64_t cookie;
 
 	cache_dir = lp_cache_directory();
 	if (cache_dir == NULL) {
-		NTSTATUS status = map_nt_error_from_unix(errno);
-		return status;
+		return errno;
 	}
 
 	result = talloc(mem_ctx, struct messaging_backend);
@@ -209,35 +206,37 @@ NTSTATUS messaging_dgm_init(struct messaging_context *msg_ctx,
 	if (socket_dir == NULL) {
 		goto fail_nomem;
 	}
-	socket_name = talloc_asprintf(ctx, "%s/%u", socket_dir,
-				      (unsigned)pid.pid);
-	if (socket_name == NULL) {
-		goto fail_nomem;
+
+	socket_address = (struct sockaddr_un) { .sun_family = AF_UNIX };
+	sockname_len = snprintf(socket_address.sun_path,
+				sizeof(socket_address.sun_path),
+				"%s/%u", socket_dir, (unsigned)pid.pid);
+	if (sockname_len >= sizeof(socket_address.sun_path)) {
+		TALLOC_FREE(result);
+		return ENAMETOOLONG;
 	}
 
 	sec_init();
 
-	ret = messaging_dgm_lockfile_create(cache_dir, pid.pid,
+	ret = messaging_dgm_lockfile_create(ctx, cache_dir, pid.pid,
 					    &ctx->lockfile_fd, pid.unique_id);
 	if (ret != 0) {
 		DEBUG(1, ("%s: messaging_dgm_create_lockfile failed: %s\n",
 			  __func__, strerror(ret)));
 		TALLOC_FREE(result);
-		return map_nt_error_from_unix(ret);
+		return ret;
 	}
 
 	ctx->msg_callbacks = poll_funcs_init_tevent(ctx);
 	if (ctx->msg_callbacks == NULL) {
-		TALLOC_FREE(result);
-		return NT_STATUS_NO_MEMORY;
+		goto fail_nomem;
 	}
 
 	ctx->tevent_handle = poll_funcs_tevent_register(
 		ctx, ctx->msg_callbacks,
 		messaging_tevent_context(msg_ctx));
 	if (ctx->tevent_handle == NULL) {
-		TALLOC_FREE(result);
-		return NT_STATUS_NO_MEMORY;
+		goto fail_nomem;
 	}
 
 	ok = directory_create_or_exist_strict(socket_dir, sec_initial_uid(),
@@ -245,30 +244,29 @@ NTSTATUS messaging_dgm_init(struct messaging_context *msg_ctx,
 	if (!ok) {
 		DEBUG(1, ("Could not create socket directory\n"));
 		TALLOC_FREE(result);
-		return NT_STATUS_ACCESS_DENIED;
+		return EACCES;
 	}
 	TALLOC_FREE(socket_dir);
 
-	unlink(socket_name);
+	unlink(socket_address.sun_path);
 
 	generate_random_buffer((uint8_t *)&cookie, sizeof(cookie));
 
-	ret = unix_msg_init(socket_name, ctx->msg_callbacks, 1024, cookie,
+	ret = unix_msg_init(&socket_address, ctx->msg_callbacks, 1024, cookie,
 			    messaging_dgm_recv, ctx, &ctx->dgm_ctx);
-	TALLOC_FREE(socket_name);
 	if (ret != 0) {
 		DEBUG(1, ("unix_msg_init failed: %s\n", strerror(ret)));
 		TALLOC_FREE(result);
-		return map_nt_error_from_unix(ret);
+		return ret;
 	}
 	talloc_set_destructor(ctx, messaging_dgm_context_destructor);
 
 	*presult = result;
-	return NT_STATUS_OK;
+	return 0;
 
 fail_nomem:
 	TALLOC_FREE(result);
-	return NT_STATUS_NO_MEMORY;
+	return ENOMEM;
 }
 
 static int messaging_dgm_context_destructor(struct messaging_dgm_context *c)
@@ -282,34 +280,32 @@ static int messaging_dgm_context_destructor(struct messaging_dgm_context *c)
 	unix_msg_free(c->dgm_ctx);
 
 	if (getpid() == pid.pid) {
-		(void)messaging_dgm_lockfile_remove(c->cache_dir, pid.pid);
+		(void)messaging_dgm_lockfile_remove(c, c->cache_dir, pid.pid);
 	}
 	close(c->lockfile_fd);
 	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);
-	fstring pid_str;
-	char buf[PATH_MAX];
-	char *dst_sock, *to_free;
 	struct messaging_dgm_hdr hdr;
 	struct iovec iov2[iovlen + 1];
-	ssize_t pathlen;
 	struct server_id_buf idbuf;
+	struct sockaddr_un dst;
+	ssize_t dst_pathlen;
 	int ret;
 
-	fstr_sprintf(pid_str, "msg/%u", (unsigned)pid.pid);
+	dst = (struct sockaddr_un) { .sun_family = AF_UNIX };
 
-	pathlen = full_path_tos(ctx->cache_dir, pid_str, buf, sizeof(buf),
-				&dst_sock, &to_free);
-	if (pathlen == -1) {
-		return NT_STATUS_NO_MEMORY;
+	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 ENAMETOOLONG;
 	}
 
 	hdr.msg_version = MESSAGE_VERSION;
@@ -326,15 +322,10 @@ static NTSTATUS messaging_dgm_send(struct server_id src,
 	memcpy(iov2+1, iov, iovlen*sizeof(struct iovec));
 
 	become_root();
-	ret = unix_msg_send(ctx->dgm_ctx, dst_sock, iov2, iovlen + 1);
+	ret = unix_msg_send(ctx->dgm_ctx, &dst, iov2, iovlen + 1);
 	unbecome_root();
 
-	TALLOC_FREE(to_free);
-
-	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,
@@ -371,7 +362,7 @@ static void messaging_dgm_recv(struct unix_msg_ctx *ctx,
 	messaging_dispatch_rec(dgm_ctx->msg_ctx, &rec);
 }
 
-NTSTATUS messaging_dgm_cleanup(struct messaging_context *msg_ctx, pid_t pid)
+int messaging_dgm_cleanup(struct messaging_context *msg_ctx, pid_t pid)
 {
 	struct messaging_backend *be = messaging_local_backend(msg_ctx);
 	struct messaging_dgm_context *ctx = talloc_get_type_abort(
@@ -379,26 +370,25 @@ NTSTATUS messaging_dgm_cleanup(struct messaging_context *msg_ctx, pid_t pid)
 	char *lockfile_name, *socket_name;
 	int fd, ret;
 	struct flock lck = {};
-	NTSTATUS status = NT_STATUS_OK;
 
 	lockfile_name = talloc_asprintf(talloc_tos(), "%s/lck/%u",
 					ctx->cache_dir, (unsigned)pid);
 	if (lockfile_name == NULL) {
-		return NT_STATUS_NO_MEMORY;
+		return ENOMEM;
 	}
 	socket_name = talloc_asprintf(lockfile_name, "%s/msg/%u",
 				      ctx->cache_dir, (unsigned)pid);
 	if (socket_name == NULL) {
 		TALLOC_FREE(lockfile_name);
-		return NT_STATUS_NO_MEMORY;
+		return ENOMEM;
 	}
 
 	fd = open(lockfile_name, O_NONBLOCK|O_WRONLY, 0);
 	if (fd == -1) {
-		status = map_nt_error_from_unix(errno);
+		ret = errno;
 		DEBUG(10, ("%s: open(%s) failed: %s\n", __func__,
-			   lockfile_name, strerror(errno)));
-		return status;
+			   lockfile_name, strerror(ret)));
+		return ret;
 	}
 
 	lck.l_type = F_WRLCK;
@@ -408,12 +398,12 @@ NTSTATUS messaging_dgm_cleanup(struct messaging_context *msg_ctx, pid_t pid)
 
 	ret = fcntl(fd, F_SETLK, &lck);


-- 
Samba Shared Repository


More information about the samba-cvs mailing list