From eac04d21ef7e3a7d380d1ccca2e3a8880d08e573 Mon Sep 17 00:00:00 2001 From: rofl0r Date: Tue, 25 Jan 2022 15:06:04 +0000 Subject: [PATCH] configure: FreeBSD getnameinfo() sig is even more borked than OpenBSD --- configure | 12 ++++++++---- src/core.h | 2 +- src/libproxychains.c | 2 +- 3 files changed, 10 insertions(+), 6 deletions(-) diff --git a/configure b/configure index 89a1f68..b76df87 100755 --- a/configure +++ b/configure @@ -175,16 +175,20 @@ ishaiku() { check_compile 'whether C compiler works' '' 'int main() {return 0;}' || fail 'error: install a C compiler and library' -if ! check_compile 'whether getnameinfo() servlen argument is POSIX compliant (socklen_t)' "-DGN_SERVLEN_T=socklen_t -DGN_FLAGS_T=int" \ +if ! check_compile 'whether getnameinfo() servlen argument is POSIX compliant (socklen_t)' "-DGN_NODELEN_T=socklen_t -DGN_SERVLEN_T=socklen_t -DGN_FLAGS_T=int" \ '#define _GNU_SOURCE\n#include \nint getnameinfo(const struct sockaddr *, socklen_t, char *, socklen_t, char *, socklen_t, int);int main() {\nreturn 0;}' ; then # GLIBC < 2.14 - if ! check_compile 'whether getnameinfo() flags argument is unsigned' "-DGN_SERVLEN_T=socklen_t -DGN_FLAGS_T=unsigned" \ + if ! check_compile 'whether getnameinfo() flags argument is unsigned' "-DGN_NODELEN_T=socklen_t -DGN_SERVLEN_T=socklen_t -DGN_FLAGS_T=unsigned" \ '#define _GNU_SOURCE\n#include \nint getnameinfo(const struct sockaddr *, socklen_t, char *, socklen_t, char *, socklen_t, unsigned);int main() {\nreturn 0;}' ; then # OpenBSD - if ! check_compile 'whether getnameinfo() servlen argument is size_t' "-DGN_SERVLEN_T=size_t -DGN_FLAGS_T=int" \ + if ! check_compile 'whether getnameinfo() servlen argument is size_t' "-DGN_NODELEN_T=socklen_t -DGN_SERVLEN_T=size_t -DGN_FLAGS_T=int" \ '#define _GNU_SOURCE\n#include \nint getnameinfo(const struct sockaddr *, socklen_t, char *, socklen_t, char *, size_t, int);int main() {\nreturn 0;}' ; then - fail "failed to detect getnameinfo signature" +# FreeBSD + if ! check_compile 'whether getnameinfo() servlen and nodelen argument is size_t' "-DGN_NODELEN_T=size_t -DGN_SERVLEN_T=size_t -DGN_FLAGS_T=int" \ + '#define _GNU_SOURCE\n#include \nint getnameinfo(const struct sockaddr *, socklen_t, char *, size_t, char *, size_t, int);int main() {\nreturn 0;}' ; then + fail "failed to detect getnameinfo signature" + fi fi fi fi diff --git a/src/core.h b/src/core.h index f48a5fa..3045b86 100644 --- a/src/core.h +++ b/src/core.h @@ -109,7 +109,7 @@ typedef int (*getaddrinfo_t)(const char *, const char *, const struct addrinfo * struct addrinfo **); typedef int (*getnameinfo_t) (const struct sockaddr *, socklen_t, char *, - socklen_t, char *, GN_SERVLEN_T, GN_FLAGS_T); + GN_NODELEN_T, char *, GN_SERVLEN_T, GN_FLAGS_T); typedef ssize_t (*sendto_t) (int sockfd, const void *buf, size_t len, int flags, const struct sockaddr *dest_addr, socklen_t addrlen); diff --git a/src/libproxychains.c b/src/libproxychains.c index ad8c705..578ff84 100644 --- a/src/libproxychains.c +++ b/src/libproxychains.c @@ -729,7 +729,7 @@ HOOKFUNC(void, freeaddrinfo, struct addrinfo *res) { } HOOKFUNC(int, getnameinfo, const struct sockaddr *sa, socklen_t salen, - char *host, socklen_t hostlen, char *serv, + char *host, GN_NODELEN_T hostlen, char *serv, GN_SERVLEN_T servlen, GN_FLAGS_T flags) { INIT();