summaryrefslogtreecommitdiffstats
path: root/source3/lib/unix_msg
diff options
context:
space:
mode:
authorVolker Lendecke <vl@samba.org>2014-06-01 20:57:21 +0200
committerJeremy Allison <jra@samba.org>2014-06-18 18:51:13 +0200
commit4ca79b0b11c3c566927f7f1211254fb78f0bd6b9 (patch)
tree1cdd8fc6e7e11dd0c4e61b09552abfc296883ea0 /source3/lib/unix_msg
parent32b45bfa9856801b5f5518392fed65ddcaa5e053 (diff)
downloadsamba-4ca79b0b11c3c566927f7f1211254fb78f0bd6b9.tar.gz
samba-4ca79b0b11c3c566927f7f1211254fb78f0bd6b9.tar.xz
samba-4ca79b0b11c3c566927f7f1211254fb78f0bd6b9.zip
unix_msg: Lift sockaddr_un handling from unix_dgram_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.c39
1 files changed, 23 insertions, 16 deletions
diff --git a/source3/lib/unix_msg/unix_msg.c b/source3/lib/unix_msg/unix_msg.c
index 602ecc63f6..d9a2340d8e 100644
--- a/source3/lib/unix_msg/unix_msg.c
+++ b/source3/lib/unix_msg/unix_msg.c
@@ -135,7 +135,7 @@ static int prepare_socket(int sock)
return prepare_socket_cloexec(sock);
}
-static int unix_dgram_init(const char *path, size_t max_msg,
+static int unix_dgram_init(const struct sockaddr_un *addr, size_t max_msg,
const struct poll_funcs *ev_funcs,
void (*recv_callback)(struct unix_dgram_ctx *ctx,
uint8_t *msg, size_t msg_len,
@@ -144,15 +144,11 @@ static int unix_dgram_init(const char *path, size_t max_msg,
struct unix_dgram_ctx **result)
{
struct unix_dgram_ctx *ctx;
- struct sockaddr_un addr = { 0, };
size_t pathlen;
int ret;
- if (path != NULL) {
- pathlen = strlen(path)+1;
- if (pathlen > sizeof(addr.sun_path)) {
- return ENAMETOOLONG;
- }
+ if (addr != NULL) {
+ pathlen = strlen(addr->sun_path)+1;
} else {
pathlen = 1;
}
@@ -161,8 +157,8 @@ static int unix_dgram_init(const char *path, size_t max_msg,
if (ctx == NULL) {
return ENOMEM;
}
- if (path != NULL) {
- memcpy(ctx->path, path, pathlen);
+ if (addr != NULL) {
+ memcpy(ctx->path, addr->sun_path, pathlen);
} else {
ctx->path[0] = '\0';
}
@@ -194,12 +190,10 @@ static int unix_dgram_init(const char *path, size_t max_msg,
goto fail_close;
}
- if (path != NULL) {
- addr.sun_family = AF_UNIX;
- memcpy(addr.sun_path, path, pathlen);
-
- ret = bind(ctx->sock, (struct sockaddr *)(void *)&addr,
- sizeof(addr));
+ if (addr != NULL) {
+ ret = bind(ctx->sock,
+ (const struct sockaddr *)(const void *)addr,
+ sizeof(*addr));
if (ret == -1) {
ret = errno;
goto fail_close;
@@ -633,6 +627,8 @@ int unix_msg_init(const char *path, const struct poll_funcs *ev_funcs,
struct unix_msg_ctx **result)
{
struct unix_msg_ctx *ctx;
+ struct sockaddr_un addr;
+ struct sockaddr_un *paddr = NULL;
int ret;
ctx = malloc(sizeof(*ctx));
@@ -640,7 +636,18 @@ int unix_msg_init(const char *path, const struct poll_funcs *ev_funcs,
return ENOMEM;
}
- ret = unix_dgram_init(path, fragment_len, ev_funcs,
+ if (path != NULL) {
+ size_t pathlen = strlen(path)+1;
+
+ if (pathlen > sizeof(addr.sun_path)) {
+ return ENAMETOOLONG;
+ }
+ addr = (struct sockaddr_un) { .sun_family = AF_UNIX };
+ memcpy(addr.sun_path, path, pathlen);
+ paddr = &addr;
+ }
+
+ ret = unix_dgram_init(paddr, fragment_len, ev_funcs,
unix_msg_recv, ctx, &ctx->dgram);
if (ret != 0) {
free(ctx);