mirror of
				https://github.com/rofl0r/proxychains-ng.git
				synced 2025-11-04 09:06:05 +00:00 
			
		
		
		
	add configure check for non-POSIX compliant getnameinfo signature
- glibc < 2.14 uses "unsigned" instead of "int" for flags - openbsd and freebsd use "size_t" instead of socklen_t for servlen and nodelen, while still using socklen_t for salen. closes #430
This commit is contained in:
		
							
								
								
									
										16
									
								
								configure
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										16
									
								
								configure
									
									
									
									
										vendored
									
									
								
							@@ -175,6 +175,22 @@ ishaiku() {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
check_compile 'whether C compiler works' '' 'int main() {return 0;}' || fail 'error: install a C compiler and library'
 | 
					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_NODELEN_T=socklen_t -DGN_SERVLEN_T=socklen_t -DGN_FLAGS_T=int" \
 | 
				
			||||||
 | 
					'#define _GNU_SOURCE\n#include <netdb.h>\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_NODELEN_T=socklen_t -DGN_SERVLEN_T=socklen_t -DGN_FLAGS_T=unsigned" \
 | 
				
			||||||
 | 
					  '#define _GNU_SOURCE\n#include <netdb.h>\nint getnameinfo(const struct sockaddr *, socklen_t, char *, socklen_t, char *, socklen_t, unsigned);int main() {\nreturn 0;}' ; then
 | 
				
			||||||
 | 
					  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 <netdb.h>\nint getnameinfo(const struct sockaddr *, socklen_t, char *, socklen_t, char *, size_t, int);int main() {\nreturn 0;}' ; then
 | 
				
			||||||
 | 
					   # OpenBSD & 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 <netdb.h>\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
 | 
				
			||||||
 | 
					
 | 
				
			||||||
check_compile 'whether we have GNU-style getservbyname_r()' "-DHAVE_GNU_GETSERVBYNAME_R" \
 | 
					check_compile 'whether we have GNU-style getservbyname_r()' "-DHAVE_GNU_GETSERVBYNAME_R" \
 | 
				
			||||||
'#define _GNU_SOURCE\n#include <netdb.h>\nint main() {\nstruct servent *se = 0;struct servent se_buf;char buf[1024];\ngetservbyname_r("foo", (void*) 0, &se_buf, buf, sizeof(buf), &se);\nreturn 0;}'
 | 
					'#define _GNU_SOURCE\n#include <netdb.h>\nint main() {\nstruct servent *se = 0;struct servent se_buf;char buf[1024];\ngetservbyname_r("foo", (void*) 0, &se_buf, buf, sizeof(buf), &se);\nreturn 0;}'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -109,7 +109,7 @@ typedef int (*getaddrinfo_t)(const char *, const char *, const struct addrinfo *
 | 
				
			|||||||
			     struct addrinfo **);
 | 
								     struct addrinfo **);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
typedef int (*getnameinfo_t) (const struct sockaddr *, socklen_t, char *, 
 | 
					typedef int (*getnameinfo_t) (const struct sockaddr *, socklen_t, char *, 
 | 
				
			||||||
			      socklen_t, char *, socklen_t, int);
 | 
								      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,
 | 
					typedef ssize_t (*sendto_t) (int sockfd, const void *buf, size_t len, int flags,
 | 
				
			||||||
			     const struct sockaddr *dest_addr, socklen_t addrlen);
 | 
								     const struct sockaddr *dest_addr, socklen_t addrlen);
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -729,8 +729,8 @@ HOOKFUNC(void, freeaddrinfo, struct addrinfo *res) {
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
HOOKFUNC(int, getnameinfo, const struct sockaddr *sa, socklen_t salen,
 | 
					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,
 | 
				
			||||||
	           socklen_t servlen, int flags)
 | 
						           GN_SERVLEN_T servlen, GN_FLAGS_T flags)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	INIT();
 | 
						INIT();
 | 
				
			||||||
	PFUNC();
 | 
						PFUNC();
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user