From bf29fa49d34fb72356ad53274b01bcc8481726dc Mon Sep 17 00:00:00 2001 From: Peter Rajnoha Date: Fri, 27 Apr 2012 09:52:33 +0000 Subject: Use dm_strncpy instead of plain strncpy while setting the socket path. Also check the return value as it meaningless to work with truncated strings. --- libdaemon/client/daemon-client.c | 5 ++++- libdaemon/server/daemon-server.c | 5 ++++- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/libdaemon/client/daemon-client.c b/libdaemon/client/daemon-client.c index 136c57d1..906de38c 100644 --- a/libdaemon/client/daemon-client.c +++ b/libdaemon/client/daemon-client.c @@ -32,7 +32,10 @@ daemon_handle daemon_open(daemon_info i) { goto error; memset(&sockaddr, 0, sizeof(sockaddr)); - strncpy(sockaddr.sun_path, i.socket, sizeof(sockaddr.sun_path)); + if (!dm_strncpy(sockaddr.sun_path, i.socket, sizeof(sockaddr.sun_path))) { + fprintf(stderr, "%s: daemon socket path too long.\n", i.socket); + goto error; + } sockaddr.sun_family = AF_UNIX; if (connect(h.socket_fd,(struct sockaddr *) &sockaddr, sizeof(sockaddr))) goto error; diff --git a/libdaemon/server/daemon-server.c b/libdaemon/server/daemon-server.c index ca5a30f3..568ef361 100644 --- a/libdaemon/server/daemon-server.c +++ b/libdaemon/server/daemon-server.c @@ -224,7 +224,10 @@ static int _open_socket(daemon_state s) fprintf(stderr, "[D] creating %s\n", s.socket_path); memset(&sockaddr, 0, sizeof(sockaddr)); - strncpy(sockaddr.sun_path, s.socket_path, sizeof(sockaddr.sun_path)); + if (!dm_strncpy(sockaddr.sun_path, s.socket_path, sizeof(sockaddr.sun_path))) { + fprintf(stderr, "%s: daemon socket path too long.\n", s.socket_path); + goto error; + } sockaddr.sun_family = AF_UNIX; if (bind(fd, (struct sockaddr *) &sockaddr, sizeof(sockaddr))) { -- cgit