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 <v...@samba.org>
Date:   Tue Jun 10 15:21:10 2014 +0000

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

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

    messaging3: Use "goto fail_nomem" where appropriate
    
    Signed-off-by: Volker Lendecke <v...@samba.org>
    Reviewed-by: Jeremy Allison <j...@samba.org>

commit 4f4631831a379f2ebf0eb3d178fd9e91d951301a
Author: Volker Lendecke <v...@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 <v...@samba.org>
    Reviewed-by: Jeremy Allison <j...@samba.org>

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

    messaging3: Make messaging_dgm_wipe return 0/errno
    
    Signed-off-by: Volker Lendecke <v...@samba.org>
    Reviewed-by: Jeremy Allison <j...@samba.org>

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

    messaging3: Make messaging_dgm_cleanup return 0/errno
    
    Signed-off-by: Volker Lendecke <v...@samba.org>
    Reviewed-by: Jeremy Allison <j...@samba.org>

commit e6b33ce6112bc41f2a5027f2097c74537c056a5b
Author: Volker Lendecke <v...@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 <v...@samba.org>
    Reviewed-by: Jeremy Allison <j...@samba.org>

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

    messaging3: Remove two uses of talloc_tos()
    
    Signed-off-by: Volker Lendecke <v...@samba.org>
    Reviewed-by: Jeremy Allison <j...@samba.org>

commit 748ffccd5a1143048cbfe7b20fc6e850eb99cb2f
Author: Volker Lendecke <v...@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 <v...@samba.org>
    Reviewed-by: Jeremy Allison <j...@samba.org>

commit 516e2f5e68aa10306a346865922b35e9a1e299c2
Author: Volker Lendecke <v...@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 <v...@samba.org>
    Reviewed-by: Jeremy Allison <j...@samba.org>

commit 73a1205fe8a8aae357a96fb5074ed4dd16082fff
Author: Volker Lendecke <v...@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 <v...@samba.org>
    Reviewed-by: Jeremy Allison <j...@samba.org>

commit 0d81063ea93302b1782e6e5e942fcc6788c75afe
Author: Volker Lendecke <v...@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 <v...@samba.org>
    Reviewed-by: Jeremy Allison <j...@samba.org>

commit 6ea627b3572ad72202e062a9e006eba53cce1bc6
Author: Volker Lendecke <v...@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 <v...@samba.org>
    Reviewed-by: Jeremy Allison <j...@samba.org>

commit 4ca79b0b11c3c566927f7f1211254fb78f0bd6b9
Author: Volker Lendecke <v...@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 <v...@samba.org>
    Reviewed-by: Jeremy Allison <j...@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

Reply via email to