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.
This commit is contained in:
Marc André Tanner 2014-03-07 18:57:37 +01:00
parent 3a14718bb7
commit 6a99af6d1e
1 changed files with 8 additions and 1 deletions

View File

@ -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)