MEDIUM: tools: make str2sa_range() parse unix addresses too

str2sa_range() now considers that any address beginning with '/' is a UNIX
address. It is compatible with all callers at the moment since all of them
perform this test and use a different parser for such addresses. However,
some parsers (eg: servers) still don't check for unix addresses.
diff --git a/src/standard.c b/src/standard.c
index 08af648..833d91a 100644
--- a/src/standard.c
+++ b/src/standard.c
@@ -656,6 +656,37 @@
 		goto out;
 	}
 
+	if (*str2 == '/') {
+		/* unix socket */
+		static struct sockaddr_storage ss;
+		int prefix_path_len;
+		int max_path_len;
+
+		/* complete unix socket path name during startup or soft-restart is
+		 * <unix_bind_prefix><path>.<pid>.<bak|tmp>
+		 */
+		prefix_path_len = pfx ? strlen(pfx) : 0;
+		max_path_len = (sizeof(((struct sockaddr_un *)&ss)->sun_path) - 1) -
+			(prefix_path_len ? prefix_path_len + 1 + 5 + 1 + 3 : 0);
+
+		if (strlen(str2) > max_path_len) {
+			memprintf(err, "socket path '%s' too long (max %d)\n", str, max_path_len);
+			goto out;
+		}
+
+		memset(&ss, 0, sizeof(ss));
+		ss.ss_family = AF_UNIX;
+		if (pfx) {
+			memcpy(((struct sockaddr_un *)&ss)->sun_path, pfx, prefix_path_len);
+			strcpy(((struct sockaddr_un *)&ss)->sun_path + prefix_path_len, str2);
+		}
+		else {
+			strcpy(((struct sockaddr_un *)&ss)->sun_path, str2);
+		}
+		ret = &ss;
+		goto out;
+	}
+
 	port1 = strrchr(str2, ':');
 	if (port1)
 		*port1++ = '\0';