aboutgitcodebugslistschat
diff options
context:
space:
mode:
-rw-r--r--test/nstool.c22
1 files changed, 14 insertions, 8 deletions
diff --git a/test/nstool.c b/test/nstool.c
index e6d7d37..bca9569 100644
--- a/test/nstool.c
+++ b/test/nstool.c
@@ -93,14 +93,22 @@ static void usage(void)
" terminate.\n");
}
+static void sockaddr_from_path(struct sockaddr_un *addr, const char *sockpath)
+{
+ if (strlen(sockpath) > UNIX_PATH_MAX)
+ die("\"%s\" is too long for Unix socket path (%zu > %d)",
+ sockpath, strlen(sockpath), UNIX_PATH_MAX);
+
+ addr->sun_family = AF_UNIX;
+ strncpy(addr->sun_path, sockpath, UNIX_PATH_MAX);
+}
+
static int connect_ctl(const char *sockpath, bool wait,
struct holder_info *info,
struct ucred *peercred)
{
int fd = socket(AF_UNIX, SOCK_STREAM | SOCK_CLOEXEC, PF_UNIX);
- struct sockaddr_un addr = {
- .sun_family = AF_UNIX,
- };
+ struct sockaddr_un addr;
struct holder_info discard;
ssize_t len;
int rc;
@@ -108,7 +116,7 @@ static int connect_ctl(const char *sockpath, bool wait,
if (fd < 0)
die("socket(): %s\n", strerror(errno));
- strncpy(addr.sun_path, sockpath, UNIX_PATH_MAX);
+ sockaddr_from_path(&addr, sockpath);
do {
rc = connect(fd, (struct sockaddr *)&addr, sizeof(addr));
@@ -149,9 +157,7 @@ static int connect_ctl(const char *sockpath, bool wait,
static void cmd_hold(int argc, char *argv[])
{
int fd = socket(AF_UNIX, SOCK_STREAM | SOCK_CLOEXEC, PF_UNIX);
- struct sockaddr_un addr = {
- .sun_family = AF_UNIX,
- };
+ struct sockaddr_un addr;
const char *sockpath = argv[1];
struct holder_info info;
int rc;
@@ -162,7 +168,7 @@ static void cmd_hold(int argc, char *argv[])
if (fd < 0)
die("socket(): %s\n", strerror(errno));
- strncpy(addr.sun_path, sockpath, UNIX_PATH_MAX);
+ sockaddr_from_path(&addr, sockpath);
rc = bind(fd, (struct sockaddr *)&addr, sizeof(addr));
if (rc < 0)