From 4f377b792c02f7b4bffe113e0be0682ec7af566f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Stefan=20B=C3=BChler?= Date: Mon, 2 May 2011 12:30:39 +0200 Subject: [PATCH] [utils] fix calculation for sockaddr_un struct size --- src/common/utils.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/common/utils.c b/src/common/utils.c index 63cc445..cc2e33a 100644 --- a/src/common/utils.c +++ b/src/common/utils.c @@ -623,7 +623,9 @@ liSocketAddress li_sockaddr_from_string(const GString *str, guint tcp_default_po #ifdef HAVE_SYS_UN_H if (0 == strncmp(str->str, "unix:/", 6)) { - saddr.len = str->len + 1 - 5 + sizeof(saddr.addr->un.sun_family); + /* try to support larger unix socket names than what fits in the default sockaddr_un struct */ + saddr.len = str->len + 1 - 5 + sizeof(saddr.addr->un) - sizeof(saddr.addr->un.sun_path); + if (saddr.len < sizeof(saddr.addr->un)) saddr.len = sizeof(saddr.addr->un); saddr.addr = (liSockAddr*) g_slice_alloc0(saddr.len); saddr.addr->un.sun_family = AF_UNIX; strcpy(saddr.addr->un.sun_path, str->str + 5);