diff options
Diffstat (limited to 'daemons/clvmd')
-rw-r--r-- | daemons/clvmd/clvmd-openais.c | 3 | ||||
-rw-r--r-- | daemons/clvmd/clvmd-singlenode.c | 14 | ||||
-rw-r--r-- | daemons/clvmd/clvmd.c | 25 | ||||
-rw-r--r-- | daemons/clvmd/refresh_clvmd.c | 12 |
4 files changed, 30 insertions, 24 deletions
diff --git a/daemons/clvmd/clvmd-openais.c b/daemons/clvmd/clvmd-openais.c index 5f237e9b..9ce73d6a 100644 --- a/daemons/clvmd/clvmd-openais.c +++ b/daemons/clvmd/clvmd-openais.c @@ -197,14 +197,13 @@ static int add_internal_client(int fd, fd_callback_t callback) DEBUGLOG("Add_internal_client, fd = %d\n", fd); - client = malloc(sizeof(struct local_client)); + client = calloc(1, sizeof(struct local_client)); if (!client) { DEBUGLOG("malloc failed\n"); return -1; } - memset(client, 0, sizeof(struct local_client)); client->fd = fd; client->type = CLUSTER_INTERNAL; client->callback = callback; diff --git a/daemons/clvmd/clvmd-singlenode.c b/daemons/clvmd/clvmd-singlenode.c index 298abcb2..3b35bf59 100644 --- a/daemons/clvmd/clvmd-singlenode.c +++ b/daemons/clvmd/clvmd-singlenode.c @@ -48,8 +48,15 @@ static void close_comms(void) static int init_comms(void) { - struct sockaddr_un addr; mode_t old_mask; + struct sockaddr_un addr = { .sun_family = AF_UNIX }; + + if (!dm_strncpy(addr.sun_path, SINGLENODE_CLVMD_SOCKNAME, + sizeof(addr.sun_path))) { + DEBUGLOG("%s: singlenode socket name too long.", + SINGLENODE_CLVMD_SOCKNAME); + return -1; + } close_comms(); @@ -67,11 +74,6 @@ static int init_comms(void) goto error; } - memset(&addr, 0, sizeof(addr)); - memcpy(addr.sun_path, SINGLENODE_CLVMD_SOCKNAME, - sizeof(SINGLENODE_CLVMD_SOCKNAME)); - addr.sun_family = AF_UNIX; - if (bind(listen_fd, (struct sockaddr *)&addr, sizeof(addr)) < 0) { DEBUGLOG("Can't bind local socket: %s\n", strerror(errno)); goto error; diff --git a/daemons/clvmd/clvmd.c b/daemons/clvmd/clvmd.c index 0b866e6b..4efa2373 100644 --- a/daemons/clvmd/clvmd.c +++ b/daemons/clvmd/clvmd.c @@ -2092,20 +2092,23 @@ static int add_to_lvmqueue(struct local_client *client, struct clvm_header *msg, static int check_local_clvmd(void) { int local_socket; - struct sockaddr_un sockaddr; int ret = 0; + struct sockaddr_un sockaddr = { .sun_family = AF_UNIX }; + + if (!dm_strncpy(sockaddr.sun_path, CLVMD_SOCKNAME, sizeof(sockaddr.sun_path))) { + log_error("%s: clvmd socket name too long.", CLVMD_SOCKNAME); + return -1; + } /* Open local socket */ if ((local_socket = socket(PF_UNIX, SOCK_STREAM, 0)) < 0) { + log_sys_error("socket", "local socket"); return -1; } - memset(&sockaddr, 0, sizeof(sockaddr)); - memcpy(sockaddr.sun_path, CLVMD_SOCKNAME, sizeof(CLVMD_SOCKNAME)); - sockaddr.sun_family = AF_UNIX; - if (connect(local_socket,(struct sockaddr *) &sockaddr, sizeof(sockaddr))) { + log_sys_error("connect", "local socket"); ret = -1; } @@ -2127,9 +2130,14 @@ static void close_local_sock(int local_socket) /* Open the local socket, that's the one we talk to libclvm down */ static int open_local_sock(void) { - int local_socket = -1; - struct sockaddr_un sockaddr; mode_t old_mask; + int local_socket = -1; + struct sockaddr_un sockaddr = { .sun_family = AF_UNIX }; + + if (!dm_strncpy(sockaddr.sun_path, CLVMD_SOCKNAME, sizeof(sockaddr.sun_path))) { + log_error("%s: clvmd socket name too long.", CLVMD_SOCKNAME); + return -1; + } close_local_sock(local_socket); @@ -2148,9 +2156,6 @@ static int open_local_sock(void) DEBUGLOG("setting CLOEXEC on local_socket failed: %s\n", strerror(errno)); fcntl(local_socket, F_SETFL, fcntl(local_socket, F_GETFL, 0) | O_NONBLOCK); - memset(&sockaddr, 0, sizeof(sockaddr)); - memcpy(sockaddr.sun_path, CLVMD_SOCKNAME, sizeof(CLVMD_SOCKNAME)); - sockaddr.sun_family = AF_UNIX; if (bind(local_socket, (struct sockaddr *) &sockaddr, sizeof(sockaddr))) { log_error("can't bind local socket: %m"); diff --git a/daemons/clvmd/refresh_clvmd.c b/daemons/clvmd/refresh_clvmd.c index 9ce02f2f..28b5625f 100644 --- a/daemons/clvmd/refresh_clvmd.c +++ b/daemons/clvmd/refresh_clvmd.c @@ -47,7 +47,12 @@ static int _clvmd_sock = -1; static int _open_local_sock(void) { int local_socket; - struct sockaddr_un sockaddr; + struct sockaddr_un sockaddr = { .sun_family = AF_UNIX }; + + if (!dm_strncpy(sockaddr.sun_path, CLVMD_SOCKNAME, sizeof(sockaddr.sun_path))) { + fprintf(stderr, "%s: clvmd socket name too long.", CLVMD_SOCKNAME); + return -1; + } /* Open local socket */ if ((local_socket = socket(PF_UNIX, SOCK_STREAM, 0)) < 0) { @@ -55,11 +60,6 @@ static int _open_local_sock(void) return -1; } - memset(&sockaddr, 0, sizeof(sockaddr)); - memcpy(sockaddr.sun_path, CLVMD_SOCKNAME, sizeof(CLVMD_SOCKNAME)); - - sockaddr.sun_family = AF_UNIX; - if (connect(local_socket,(struct sockaddr *) &sockaddr, sizeof(sockaddr))) { int saved_errno = errno; |