diff options
author | Volker Lendecke <vl@samba.org> | 2014-06-01 20:57:21 +0200 |
---|---|---|
committer | Jeremy Allison <jra@samba.org> | 2014-06-18 18:51:13 +0200 |
commit | 6ea627b3572ad72202e062a9e006eba53cce1bc6 (patch) | |
tree | 0ab8492f560d3d771396750f67e151a2fa0f2cc8 /source3/lib/unix_msg | |
parent | 4ca79b0b11c3c566927f7f1211254fb78f0bd6b9 (diff) | |
download | samba-6ea627b3572ad72202e062a9e006eba53cce1bc6.tar.gz samba-6ea627b3572ad72202e062a9e006eba53cce1bc6.tar.xz samba-6ea627b3572ad72202e062a9e006eba53cce1bc6.zip |
unix_msg: Lift sockaddr_un handling from unix_dgram_send_queue_init
Signed-off-by: Volker Lendecke <vl@samba.org>
Reviewed-by: Jeremy Allison <jra@samba.org>
Diffstat (limited to 'source3/lib/unix_msg')
-rw-r--r-- | source3/lib/unix_msg/unix_msg.c | 20 |
1 files changed, 7 insertions, 13 deletions
diff --git a/source3/lib/unix_msg/unix_msg.c b/source3/lib/unix_msg/unix_msg.c index d9a2340d8e..d68f4dcf84 100644 --- a/source3/lib/unix_msg/unix_msg.c +++ b/source3/lib/unix_msg/unix_msg.c @@ -296,19 +296,14 @@ static int unix_dgram_init_pthreadpool(struct unix_dgram_ctx *ctx) } static int unix_dgram_send_queue_init( - struct unix_dgram_ctx *ctx, const char *path, + struct unix_dgram_ctx *ctx, const struct sockaddr_un *dst, struct unix_dgram_send_queue **result) { struct unix_dgram_send_queue *q; - struct sockaddr_un addr = { 0, }; size_t pathlen; int ret, err; - pathlen = strlen(path)+1; - - if (pathlen > sizeof(addr.sun_path)) { - return ENAMETOOLONG; - } + pathlen = strlen(dst->sun_path)+1; q = malloc(offsetof(struct unix_dgram_send_queue, path) + pathlen); if (q == NULL) { @@ -316,7 +311,7 @@ static int unix_dgram_send_queue_init( } q->ctx = ctx; q->msgs = NULL; - memcpy(q->path, path, pathlen); + memcpy(q->path, dst->sun_path, pathlen); q->sock = socket(AF_UNIX, SOCK_DGRAM, 0); if (q->sock == -1) { @@ -329,11 +324,10 @@ static int unix_dgram_send_queue_init( goto fail_close; } - addr.sun_family = AF_UNIX; - memcpy(addr.sun_path, path, pathlen+1); - do { - ret = connect(q->sock, (struct sockaddr *)&addr, sizeof(addr)); + ret = connect(q->sock, + (const struct sockaddr *)(const void *)dst, + sizeof(*dst)); } while ((ret == -1) && (errno == EINTR)); if (ret == -1) { @@ -523,7 +517,7 @@ static int unix_dgram_send(struct unix_dgram_ctx *ctx, const char *dst_sock, return errno; } - ret = unix_dgram_send_queue_init(ctx, dst_sock, &q); + ret = unix_dgram_send_queue_init(ctx, &addr, &q); if (ret != 0) { return ret; } |