From 6a99af6d1e23c588c1ed66600f95ea3ce408d09e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marc=20Andr=C3=A9=20Tanner?= Date: Fri, 7 Mar 2014 18:57:37 +0100 Subject: [PATCH] Fix support for relative socket paths The server is invoking chdir("/") thus the relative paths became meaningless. Maybe realpath(3) with NULL as second argument should be used instead. --- abduco.c | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/abduco.c b/abduco.c index 9407a2c..5e26269 100644 --- a/abduco.c +++ b/abduco.c @@ -198,10 +198,17 @@ static int create_socket_dir() { static int create_socket(const char *name) { size_t maxlen = sizeof(sockaddr.sun_path); - if (name[0] == '.' || name[0] == '/') { + if (name[0] == '/') { strncpy(sockaddr.sun_path, name, maxlen); if (sockaddr.sun_path[maxlen-1]) return -1; + } else if (name[0] == '.') { + char buf[maxlen], *cwd = getcwd(buf, sizeof buf); + if (!cwd) + return -1; + int len = snprintf(sockaddr.sun_path, maxlen, "%s/%s", cwd, name); + if (len < 0 || (size_t)len >= maxlen) + return -1; } else { int len = create_socket_dir(), rem = strlen(name); if (len == -1 || maxlen - len - rem <= 0)