X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~mdw/git/preload-hacks/blobdiff_plain/6b6af30b8d44dd438aeed630b9ecf6239473f9e3..54ef96bf3ee587718974b094f64fbff1301cc997:/noip.c diff --git a/noip.c b/noip.c index aca7b75..345f325 100644 --- a/noip.c +++ b/noip.c @@ -57,6 +57,11 @@ #include #include +#ifndef SUN_LEN +# define SUN_LEN (sun) \ + (strlen((sun)->sun_path) + offsetof(struct sockaddr_un, sun_path)) +#endif + /*----- Data structures ---------------------------------------------------*/ /* Unix socket status values. */ @@ -1122,7 +1127,11 @@ static int do_implicit_bind(int sk, const struct sockaddr *sa, unsigned f) sockaddr_in_range_p(sa, &i->minaddr, &i->maxaddr)) { D( fprintf(stderr, "noip(%d): match!\n", pid); ) addr.sa.sa_family = sa->sa_family; - ipaddr_to_sockaddr(&addr.sa, &i->bindaddr); + switch (i->how) { + case EXPLICIT: ipaddr_to_sockaddr(&addr.sa, &i->bindaddr); break; + case SAME: copy_sockaddr(&addr.sa, sa); break; + } + port_to_sockaddr(&addr.sa, 0); goto found; } }