From 710420b9f7b3bf7de342161405c5e8d7be0410e6 Mon Sep 17 00:00:00 2001 From: Stefan Sauer Date: Mon, 22 Jun 2015 22:01:22 +0200 Subject: [PATCH] bmlipc: use the abstract namespace instead of a filesystem entry This lets us avoid the call to the not recommended mktemp() function. Fixes #51 --- src/lib/bml/bml.c | 10 ++++------ src/lib/bml/bmlhost.c | 7 ++++--- 2 files changed, 8 insertions(+), 9 deletions(-) diff --git a/src/lib/bml/bml.c b/src/lib/bml/bml.c index 19d88330f..ab1429773 100644 --- a/src/lib/bml/bml.c +++ b/src/lib/bml/bml.c @@ -130,12 +130,12 @@ bmpipc_connect (void) return FALSE; } address.sun_family = PF_LOCAL; - strcpy (address.sun_path, socket_file); + strcpy (&address.sun_path[1], socket_file); while (retries < 3) { int res; if ((res = connect (server_socket, (struct sockaddr *) &address, - sizeof (address))) == 0) { + sizeof (sa_family_t) + strlen (socket_file) + 1)) == 0) { TRACE ("server connected after %d retries\n", retries); break; } else { @@ -750,12 +750,10 @@ bml_setup (void) #ifdef DEV_BUILD if (getenv ("BMLIPC_DEBUG")) { // allows to run this manually, we will then not spawn a new one here - snprintf (socket_file, (SOCKET_PATH_MAX - 1), "/tmp/bml.sock"); + snprintf (socket_file, (SOCKET_PATH_MAX - 1), "bml.sock"); } else { #endif - snprintf (socket_file, (SOCKET_PATH_MAX - 1), "/tmp/bml.%d.XXXXXX", - (int) getpid ()); - mktemp (socket_file); + snprintf (socket_file, (SOCKET_PATH_MAX - 1), "bml.%d", (int) getpid ()); #ifdef DEV_BUILD } #endif diff --git a/src/lib/bml/bmlhost.c b/src/lib/bml/bmlhost.c index 7d9b8406d..a4fb28f15 100644 --- a/src/lib/bml/bmlhost.c +++ b/src/lib/bml/bmlhost.c @@ -399,7 +399,7 @@ main (int argc, char **argv) int server_socket, client_socket; socklen_t addrlen; ssize_t size; - struct sockaddr_un address; + struct sockaddr_un address = { 0, }; int running = TRUE; BmlIpcBuf bo = IPC_BUF_INIT, bi = IPC_BUF_INIT; BmAPI id; @@ -426,8 +426,9 @@ main (int argc, char **argv) unlink (socket_file); address.sun_family = PF_LOCAL; - strcpy (address.sun_path, socket_file); - if (bind (server_socket, (struct sockaddr *) &address, sizeof (address)) != 0) { + strcpy (&address.sun_path[1], socket_file); + if (bind (server_socket, (struct sockaddr *) &address, + sizeof (sa_family_t) + strlen (socket_file) + 1) != 0) { TRACE ("socket path already in use!\n"); } listen (server_socket, /* backlog of pending connections */ 5);