X-Git-Url: https://git.distorted.org.uk/~mdw/preload-hacks/blobdiff_plain/c0ae47b31fbdf9729f6ea531d674b93252b1b775..97162e5b05244df7dee91813544cd2e1566d881c:/noip.c diff --git a/noip.c b/noip.c index fea6f74..45ed9a5 100644 --- a/noip.c +++ b/noip.c @@ -63,6 +63,7 @@ #define UNUSED 0u /* No sign of anyone using it */ #define STALE 1u /* Socket exists, but is abandoned */ #define USED 16u /* Socket is in active use */ +#define LISTEN 2u /* Socket has an active listener */ enum { DENY, ALLOW }; /* ACL verdicts */ @@ -680,6 +681,7 @@ static int unix_socket_status(struct sockaddr_un *sun, int quickp) FILE *fp = 0; size_t len, n; int rc; + unsigned long f; char buf[256]; /* If we can't find the socket node, then it's definitely not in use. If @@ -710,6 +712,8 @@ static int unix_socket_status(struct sockaddr_un *sun, int quickp) if (n >= len + 2 && buf[n - len - 2] == ' ' && buf[n - 1] == '\n' && memcmp(buf + n - len - 1, sun->sun_path, len) == 0) { rc |= USED; + if (sscanf(buf, "%*s %*x %*x %lx", &f) < 0 || (f&0x00010000)) + rc |= LISTEN; } } if (ferror(fp))