diff --git a/t/tests-preload.c b/t/tests-preload.c index 4661bd59e..9fda04db6 100644 --- a/t/tests-preload.c +++ b/t/tests-preload.c @@ -49,6 +49,7 @@ static void do_init(void) __attribute__((constructor)); static void do_exit(void) __attribute__((destructor)); static socklen_t anon_addr(int domain, struct sockaddr_storage *sst, unsigned int id, unsigned int id2); +static const struct sockaddr *addr_find(const struct sockaddr *addr, socklen_t *addrlen); static void do_init(void) { setenv("RTPE_PRELOAD_TEST_ACTIVE", "1", 1); @@ -533,22 +534,29 @@ int connect(int fd, const struct sockaddr *addr, socklen_t addrlen) { assert(s->used_domain == AF_UNIX); assert(s->wanted_domain == addr->sa_family); - struct sockaddr_un sun; - err = addr_translate(&sun, addr, addrlen, s->type, 1, 0); - if (err) { - if (!err[0]) - goto do_connect; - goto do_connect_warn; - } - struct sockaddr_storage sst = {0,}; if (addrlen > sizeof(sst)) goto do_connect_warn; memcpy(&sst, addr, addrlen); s->peername = sst; - addr = (void *) &sun; - addrlen = sizeof(sun); + struct sockaddr_un sun; + + const struct sockaddr *anon_addr = addr_find(addr, &addrlen); + if (anon_addr) + addr = anon_addr; + else { + err = addr_translate(&sun, addr, addrlen, s->type, 1, 0); + if (err) { + if (!err[0]) + goto do_connect; + goto do_connect_warn; + } + + addr = (void *) &sun; + addrlen = sizeof(sun); + } + goto do_connect;