From 1637bbc9ced4213b902703b9223273ab2dcd2c6e Mon Sep 17 00:00:00 2001 From: Viktor Szakats Date: Thu, 6 Aug 2026 07:59:29 +0200 Subject: [PATCH] servers: sync socket type global variables Replace `ipv_inuse` and `use_ipv6` with `socket_type` and `socket_domain` (where missing) to avoid dupliicate globals with overlapping purposes. The replacement variables also support Unix sockets. Also: - simplify/reduce IPv6 guards. - socksd: fix to reset `socket_domain` for `--ipv4` option. Closes #22498 --- tests/server/dnsd.c | 62 +++++++++++------------- tests/server/first.h | 4 -- tests/server/mqttd.c | 11 ++--- tests/server/resolve.c | 17 +++---- tests/server/rtspd.c | 53 +++++++++------------ tests/server/sockfilt.c | 11 ++--- tests/server/socksd.c | 8 ++-- tests/server/sws.c | 8 ++-- tests/server/tftpd.c | 102 ++++++++++++++++++---------------------- 9 files changed, 116 insertions(+), 160 deletions(-) diff --git a/tests/server/dnsd.c b/tests/server/dnsd.c index 9d460d9452..2d85550e5f 100644 --- a/tests/server/dnsd.c +++ b/tests/server/dnsd.c @@ -829,16 +829,14 @@ static int test_dnsd(int argc, const char **argv) logdir = argv[arg++]; } else if(!strcmp("--ipv4", argv[arg])) { -#ifdef USE_IPV6 - ipv_inuse = "IPv4"; - use_ipv6 = FALSE; -#endif + socket_type = "IPv4"; + socket_domain = AF_INET; arg++; } else if(!strcmp("--ipv6", argv[arg])) { #ifdef USE_IPV6 - ipv_inuse = "IPv6"; - use_ipv6 = TRUE; + socket_type = "IPv6"; + socket_domain = AF_INET6; #endif arg++; } @@ -868,16 +866,14 @@ static int test_dnsd(int argc, const char **argv) } snprintf(loglockfile, sizeof(loglockfile), "%s/%s/dnsd-%s.lock", - logdir, SERVERLOGS_LOCKDIR, ipv_inuse); + logdir, SERVERLOGS_LOCKDIR, socket_type); #ifdef USE_IPV6 - if(!use_ipv6) + if(socket_domain == AF_INET6) + sock = socket(AF_INET6, SOCK_DGRAM, 0); + else #endif sock = socket(AF_INET, SOCK_DGRAM, 0); -#ifdef USE_IPV6 - else - sock = socket(AF_INET6, SOCK_DGRAM, 0); -#endif if(sock == CURL_SOCKET_BAD) { sockerr = SOCKERRNO; @@ -897,23 +893,22 @@ static int test_dnsd(int argc, const char **argv) } #ifdef USE_IPV6 - if(!use_ipv6) { -#endif - memset(&me.sa4, 0, sizeof(me.sa4)); - me.sa4.sin_family = AF_INET; - me.sa4.sin_addr.s_addr = INADDR_ANY; - me.sa4.sin_port = htons(port); - rc = bind(sock, &me.sa, sizeof(me.sa4)); -#ifdef USE_IPV6 - } - else { + if(socket_domain == AF_INET6) { memset(&me.sa6, 0, sizeof(me.sa6)); me.sa6.sin6_family = AF_INET6; me.sa6.sin6_addr = in6addr_any; me.sa6.sin6_port = htons(port); rc = bind(sock, &me.sa, sizeof(me.sa6)); } -#endif /* USE_IPV6 */ + else +#endif + { + memset(&me.sa4, 0, sizeof(me.sa4)); + me.sa4.sin_family = AF_INET; + me.sa4.sin_addr.s_addr = INADDR_ANY; + me.sa4.sin_port = htons(port); + rc = bind(sock, &me.sa, sizeof(me.sa4)); + } if(rc) { sockerr = SOCKERRNO; logmsg("Error binding socket on port %hu (%d) %s", port, @@ -929,13 +924,12 @@ static int test_dnsd(int argc, const char **argv) srvr_sockaddr_union_t localaddr; memset(&localaddr, 0, sizeof(localaddr)); #ifdef USE_IPV6 - if(!use_ipv6) + if(socket_domain == AF_INET6) + la_size = sizeof(localaddr.sa6); + else #endif la_size = sizeof(localaddr.sa4); -#ifdef USE_IPV6 - else - la_size = sizeof(localaddr.sa6); -#endif + if(getsockname(sock, &localaddr.sa, &la_size) < 0) { sockerr = SOCKERRNO; logmsg("getsockname() failed with error (%d) %s", @@ -980,7 +974,7 @@ static int test_dnsd(int argc, const char **argv) } } - logmsg("Running %s version on port UDP/%d", ipv_inuse, (int)port); + logmsg("Running %s version on port UDP/%d", socket_type, (int)port); curlx_nonblock(sock, TRUE); for(;;) { @@ -994,13 +988,11 @@ static int test_dnsd(int argc, const char **argv) timediff_t timeout_ms = 0; fromlen = sizeof(from); #ifdef USE_IPV6 - if(!use_ipv6) + if(socket_domain == AF_INET6) + fromlen = sizeof(from.sa6); + else #endif fromlen = sizeof(from.sa4); -#ifdef USE_IPV6 - else - fromlen = sizeof(from.sa6); -#endif timeout_ms = send_resp_queue(sock); @@ -1089,7 +1081,7 @@ dnsd_cleanup: if(got_exit_signal) { logmsg("========> %s dnsd (port: %d pid: %ld) exits with signal (%d)", - ipv_inuse, (int)port, (long)our_getpid(), exit_signal); + socket_type, (int)port, (long)our_getpid(), exit_signal); /* * To properly set the return status of the process we * must raise the same signal SIGINT or SIGTERM that we diff --git a/tests/server/first.h b/tests/server/first.h index 3bd75a2d88..73ab1dbe85 100644 --- a/tests/server/first.h +++ b/tests/server/first.h @@ -168,10 +168,6 @@ static int serverlogslocked; static const char *configfile = NULL; static const char *logdir = "log"; static char loglockfile[256]; -#ifdef USE_IPV6 -static bool use_ipv6 = FALSE; -#endif -static const char *ipv_inuse = "IPv4"; static unsigned short server_port = 0; static const char *socket_type = "IPv4"; static int socket_domain = AF_INET; diff --git a/tests/server/mqttd.c b/tests/server/mqttd.c index 732bcd2efb..9eb58d1473 100644 --- a/tests/server/mqttd.c +++ b/tests/server/mqttd.c @@ -814,17 +814,14 @@ static int test_mqttd(int argc, const char *argv[]) } else if(!strcmp("--ipv6", argv[arg])) { #ifdef USE_IPV6 + socket_type = "IPv6"; socket_domain = AF_INET6; - ipv_inuse = "IPv6"; #endif arg++; } else if(!strcmp("--ipv4", argv[arg])) { - /* for completeness, we support this option as well */ -#ifdef USE_IPV6 + socket_type = "IPv4"; socket_domain = AF_INET; - ipv_inuse = "IPv4"; -#endif arg++; } else if(!strcmp("--port", argv[arg])) { @@ -855,7 +852,7 @@ static int test_mqttd(int argc, const char *argv[]) } snprintf(loglockfile, sizeof(loglockfile), "%s/%s/mqtt-%s.lock", - logdir, SERVERLOGS_LOCKDIR, ipv_inuse); + logdir, SERVERLOGS_LOCKDIR, socket_type); CURL_BINMODE(stdin); CURL_BINMODE(stdout); @@ -881,7 +878,7 @@ static int test_mqttd(int argc, const char *argv[]) msgsock = CURL_SOCKET_BAD; /* no stream socket yet */ } - logmsg("Running %s version", ipv_inuse); + logmsg("Running %s version", socket_type); logmsg("Listening on port %hu", server_port); wrotepidfile = write_pidfile(pidname); diff --git a/tests/server/resolve.c b/tests/server/resolve.c index ac72cddd3a..43690e7d23 100644 --- a/tests/server/resolve.c +++ b/tests/server/resolve.c @@ -52,8 +52,8 @@ static int test_resolve(int argc, const char *argv[]) } else if(!strcmp("--ipv6", argv[arg])) { #ifdef CURLRES_IPV6 - ipv_inuse = "IPv6"; - use_ipv6 = TRUE; + socket_type = "IPv6"; + socket_domain = AF_INET6; arg++; #else puts("IPv6 support has been disabled in this program"); @@ -61,11 +61,8 @@ static int test_resolve(int argc, const char *argv[]) #endif } else if(!strcmp("--ipv4", argv[arg])) { - /* for completeness, we support this option as well */ - ipv_inuse = "IPv4"; -#ifdef CURLRES_IPV6 - use_ipv6 = FALSE; -#endif + socket_type = "IPv4"; + socket_domain = AF_INET; arg++; } else { @@ -84,7 +81,7 @@ static int test_resolve(int argc, const char *argv[]) } #ifdef CURLRES_IPV6 - if(use_ipv6) { + if(socket_domain == AF_INET6) { /* Check that the system has IPv6 enabled before checking the resolver */ curl_socket_t s = socket(PF_INET6, SOCK_DGRAM, 0); if(s == CURL_SOCKET_BAD) @@ -101,7 +98,7 @@ static int test_resolve(int argc, const char *argv[]) struct addrinfo hints; memset(&hints, 0, sizeof(hints)); - hints.ai_family = use_ipv6 ? PF_INET6 : PF_INET; + hints.ai_family = socket_domain; hints.ai_socktype = SOCK_STREAM; hints.ai_flags = 0; rc = getaddrinfo(host, "80", &hints, &ai); @@ -123,7 +120,7 @@ static int test_resolve(int argc, const char *argv[]) #endif if(rc) - printf("Resolving %s '%s' did not work\n", ipv_inuse, host); + printf("Resolving %s '%s' did not work\n", socket_type, host); return !!rc; } diff --git a/tests/server/rtspd.c b/tests/server/rtspd.c index c7c7ed75e5..715b4c24f6 100644 --- a/tests/server/rtspd.c +++ b/tests/server/rtspd.c @@ -1000,16 +1000,14 @@ static int test_rtspd(int argc, const char *argv[]) logdir = argv[arg++]; } else if(!strcmp("--ipv4", argv[arg])) { -#ifdef USE_IPV6 - ipv_inuse = "IPv4"; - use_ipv6 = FALSE; -#endif + socket_type = "IPv4"; + socket_domain = AF_INET; arg++; } else if(!strcmp("--ipv6", argv[arg])) { #ifdef USE_IPV6 - ipv_inuse = "IPv6"; - use_ipv6 = TRUE; + socket_type = "IPv6"; + socket_domain = AF_INET6; #endif arg++; } @@ -1045,18 +1043,16 @@ static int test_rtspd(int argc, const char *argv[]) } snprintf(loglockfile, sizeof(loglockfile), "%s/%s/rtsp-%s.lock", - logdir, SERVERLOGS_LOCKDIR, ipv_inuse); + logdir, SERVERLOGS_LOCKDIR, socket_type); install_signal_handlers(FALSE); #ifdef USE_IPV6 - if(!use_ipv6) + if(socket_domain == AF_INET6) + sock = socket(AF_INET6, SOCK_STREAM, 0); + else #endif sock = socket(AF_INET, SOCK_STREAM, 0); -#ifdef USE_IPV6 - else - sock = socket(AF_INET6, SOCK_STREAM, 0); -#endif if(sock == CURL_SOCKET_BAD) { sockerr = SOCKERRNO; @@ -1074,23 +1070,22 @@ static int test_rtspd(int argc, const char *argv[]) } #ifdef USE_IPV6 - if(!use_ipv6) { -#endif - memset(&me.sa4, 0, sizeof(me.sa4)); - me.sa4.sin_family = AF_INET; - me.sa4.sin_addr.s_addr = INADDR_ANY; - me.sa4.sin_port = htons(port); - rc = bind(sock, &me.sa, sizeof(me.sa4)); -#ifdef USE_IPV6 - } - else { + if(socket_domain == AF_INET6) { memset(&me.sa6, 0, sizeof(me.sa6)); me.sa6.sin6_family = AF_INET6; me.sa6.sin6_addr = in6addr_any; me.sa6.sin6_port = htons(port); rc = bind(sock, &me.sa, sizeof(me.sa6)); } -#endif /* USE_IPV6 */ + else +#endif + { + memset(&me.sa4, 0, sizeof(me.sa4)); + me.sa4.sin_family = AF_INET; + me.sa4.sin_addr.s_addr = INADDR_ANY; + me.sa4.sin_port = htons(port); + rc = bind(sock, &me.sa, sizeof(me.sa4)); + } if(rc) { sockerr = SOCKERRNO; logmsg("Error binding socket on port %hu (%d) %s", port, @@ -1105,13 +1100,11 @@ static int test_rtspd(int argc, const char *argv[]) srvr_sockaddr_union_t localaddr; memset(&localaddr, 0, sizeof(localaddr)); #ifdef USE_IPV6 - if(!use_ipv6) + if(socket_domain == AF_INET6) + la_size = sizeof(localaddr.sa6); + else #endif la_size = sizeof(localaddr.sa4); -#ifdef USE_IPV6 - else - la_size = sizeof(localaddr.sa6); -#endif if(getsockname(sock, &localaddr.sa, &la_size) < 0) { sockerr = SOCKERRNO; logmsg("getsockname() failed with error (%d) %s", @@ -1141,7 +1134,7 @@ static int test_rtspd(int argc, const char *argv[]) goto server_cleanup; } } - logmsg("Running %s version on port %d", ipv_inuse, (int)port); + logmsg("Running %s version on port %d", socket_type, (int)port); /* start accepting connections */ if(listen(sock, 5)) { @@ -1287,7 +1280,7 @@ server_cleanup: if(got_exit_signal) { logmsg("========> %s rtspd (port: %d pid: %ld) exits with signal (%d)", - ipv_inuse, (int)port, (long)our_getpid(), exit_signal); + socket_type, (int)port, (long)our_getpid(), exit_signal); /* * To properly set the return status of the process we * must raise the same signal SIGINT or SIGTERM that we diff --git a/tests/server/sockfilt.c b/tests/server/sockfilt.c index 32838f987c..85a281de57 100644 --- a/tests/server/sockfilt.c +++ b/tests/server/sockfilt.c @@ -1057,7 +1057,7 @@ static bool juggle(curl_socket_t *sockfdp, /* Question asking us what PORT number we are listening to. Replies to PORT with "IPv[num]/[port]" */ snprintf((char *)buffer, sizeof(buffer), "%s/%hu\n", - ipv_inuse, server_port); + socket_type, server_port); buffer_len = (ssize_t)strlen((const char *)buffer); snprintf(data, sizeof(data), "PORT\n%04x\n", (unsigned int)buffer_len); if(!write_stdout(data, 10)) @@ -1216,17 +1216,14 @@ static int test_sockfilt(int argc, const char *argv[]) } else if(!strcmp("--ipv6", argv[arg])) { #ifdef USE_IPV6 + socket_type = "IPv6"; socket_domain = AF_INET6; - ipv_inuse = "IPv6"; #endif arg++; } else if(!strcmp("--ipv4", argv[arg])) { - /* for completeness, we support this option as well */ -#ifdef USE_IPV6 + socket_type = "IPv4"; socket_domain = AF_INET; - ipv_inuse = "IPv4"; -#endif arg++; } else if(!strcmp("--bindonly", argv[arg])) { @@ -1348,7 +1345,7 @@ static int test_sockfilt(int argc, const char *argv[]) msgsock = CURL_SOCKET_BAD; /* no stream socket yet */ } - logmsg("Running %s version", ipv_inuse); + logmsg("Running %s version", socket_type); if(server_connectport) logmsg("Connected to port %hu", server_connectport); diff --git a/tests/server/socksd.c b/tests/server/socksd.c index 4de563b06c..7144c687bf 100644 --- a/tests/server/socksd.c +++ b/tests/server/socksd.c @@ -793,16 +793,14 @@ static int test_socksd(int argc, const char *argv[]) } else if(!strcmp("--ipv6", argv[arg])) { #ifdef USE_IPV6 - socket_domain = AF_INET6; socket_type = "IPv6"; + socket_domain = AF_INET6; #endif arg++; } else if(!strcmp("--ipv4", argv[arg])) { - /* for completeness, we support this option as well */ -#ifdef USE_IPV6 socket_type = "IPv4"; -#endif + socket_domain = AF_INET; arg++; } else if(!strcmp("--unix-socket", argv[arg])) { @@ -817,8 +815,8 @@ static int test_socksd(int argc, const char *argv[]) (unsigned int)sizeof(sau.sun_path), unix_socket); return 0; } - socket_domain = AF_UNIX; socket_type = "unix"; + socket_domain = AF_UNIX; #endif arg++; } diff --git a/tests/server/sws.c b/tests/server/sws.c index d68f60b5b8..1dee5da2ae 100644 --- a/tests/server/sws.c +++ b/tests/server/sws.c @@ -2167,13 +2167,11 @@ static int test_sws(int argc, const char *argv[]) srvr_sockaddr_union_t localaddr; memset(&localaddr, 0, sizeof(localaddr)); #ifdef USE_IPV6 - if(socket_domain != AF_INET6) + if(socket_domain == AF_INET6) + la_size = sizeof(localaddr.sa6); + else #endif la_size = sizeof(localaddr.sa4); -#ifdef USE_IPV6 - else - la_size = sizeof(localaddr.sa6); -#endif if(getsockname(sock, &localaddr.sa, &la_size) < 0) { sockerr = SOCKERRNO; logmsg("getsockname() failed with error (%d) %s", diff --git a/tests/server/tftpd.c b/tests/server/tftpd.c index 8144f81be8..eee7750db2 100644 --- a/tests/server/tftpd.c +++ b/tests/server/tftpd.c @@ -516,13 +516,11 @@ static int synchnet(curl_socket_t f /* socket to flush */) if(i) { j++; #ifdef USE_IPV6 - if(!use_ipv6) + if(socket_domain == AF_INET6) + fromaddrlen = sizeof(fromaddr.sa6); + else #endif fromaddrlen = sizeof(fromaddr.sa4); -#ifdef USE_IPV6 - else - fromaddrlen = sizeof(fromaddr.sa6); -#endif (void)recvfrom(f, rbuf, sizeof(rbuf), 0, &fromaddr.sa, &fromaddrlen); } else @@ -1062,16 +1060,14 @@ static int test_tftpd(int argc, const char **argv) logdir = argv[arg++]; } else if(!strcmp("--ipv4", argv[arg])) { -#ifdef USE_IPV6 - ipv_inuse = "IPv4"; - use_ipv6 = FALSE; -#endif + socket_type = "IPv4"; + socket_domain = AF_INET; arg++; } else if(!strcmp("--ipv6", argv[arg])) { #ifdef USE_IPV6 - ipv_inuse = "IPv6"; - use_ipv6 = TRUE; + socket_type = "IPv6"; + socket_domain = AF_INET6; #endif arg++; } @@ -1107,18 +1103,16 @@ static int test_tftpd(int argc, const char **argv) } snprintf(loglockfile, sizeof(loglockfile), "%s/%s/tftp-%s.lock", - logdir, SERVERLOGS_LOCKDIR, ipv_inuse); + logdir, SERVERLOGS_LOCKDIR, socket_type); install_signal_handlers(TRUE); #ifdef USE_IPV6 - if(!use_ipv6) + if(socket_domain == AF_INET6) + sock = socket(AF_INET6, SOCK_DGRAM, 0); + else #endif sock = socket(AF_INET, SOCK_DGRAM, 0); -#ifdef USE_IPV6 - else - sock = socket(AF_INET6, SOCK_DGRAM, 0); -#endif if(sock == CURL_SOCKET_BAD) { sockerr = SOCKERRNO; @@ -1138,23 +1132,22 @@ static int test_tftpd(int argc, const char **argv) } #ifdef USE_IPV6 - if(!use_ipv6) { -#endif - memset(&me.sa4, 0, sizeof(me.sa4)); - me.sa4.sin_family = AF_INET; - me.sa4.sin_addr.s_addr = INADDR_ANY; - me.sa4.sin_port = htons(port); - rc = bind(sock, &me.sa, sizeof(me.sa4)); -#ifdef USE_IPV6 - } - else { + if(socket_domain == AF_INET6) { memset(&me.sa6, 0, sizeof(me.sa6)); me.sa6.sin6_family = AF_INET6; me.sa6.sin6_addr = in6addr_any; me.sa6.sin6_port = htons(port); rc = bind(sock, &me.sa, sizeof(me.sa6)); } -#endif /* USE_IPV6 */ + else +#endif + { + memset(&me.sa4, 0, sizeof(me.sa4)); + me.sa4.sin_family = AF_INET; + me.sa4.sin_addr.s_addr = INADDR_ANY; + me.sa4.sin_port = htons(port); + rc = bind(sock, &me.sa, sizeof(me.sa4)); + } if(rc) { sockerr = SOCKERRNO; logmsg("Error binding socket on port %hu (%d) %s", port, @@ -1170,13 +1163,11 @@ static int test_tftpd(int argc, const char **argv) srvr_sockaddr_union_t localaddr; memset(&localaddr, 0, sizeof(localaddr)); #ifdef USE_IPV6 - if(!use_ipv6) + if(socket_domain == AF_INET6) + la_size = sizeof(localaddr.sa6); + else #endif la_size = sizeof(localaddr.sa4); -#ifdef USE_IPV6 - else - la_size = sizeof(localaddr.sa6); -#endif if(getsockname(sock, &localaddr.sa, &la_size) < 0) { sockerr = SOCKERRNO; logmsg("getsockname() failed with error (%d) %s", @@ -1221,18 +1212,16 @@ static int test_tftpd(int argc, const char **argv) } } - logmsg("Running %s version on port UDP/%d", ipv_inuse, (int)port); + logmsg("Running %s version on port UDP/%d", socket_type, (int)port); for(;;) { fromlen = sizeof(from); #ifdef USE_IPV6 - if(!use_ipv6) + if(socket_domain == AF_INET6) + fromlen = sizeof(from.sa6); + else #endif fromlen = sizeof(from.sa4); -#ifdef USE_IPV6 - else - fromlen = sizeof(from.sa6); -#endif n = (ssize_t)recvfrom(sock, &trsbuf.storage[0], sizeof(trsbuf.storage), 0, &from.sa, &fromlen); if(got_exit_signal) @@ -1247,23 +1236,7 @@ static int test_tftpd(int argc, const char **argv) serverlogslocked = 1; #ifdef USE_IPV6 - if(!use_ipv6) { -#endif - from.sa4.sin_family = AF_INET; - peer = socket(AF_INET, SOCK_DGRAM, 0); - if(peer == CURL_SOCKET_BAD) { - logmsg("socket"); - result = 2; - break; - } - if(connect(peer, &from.sa, sizeof(from.sa4)) < 0) { - logmsg("connect: fail"); - result = 1; - break; - } -#ifdef USE_IPV6 - } - else { + if(socket_domain == AF_INET6) { from.sa6.sin6_family = AF_INET6; peer = socket(AF_INET6, SOCK_DGRAM, 0); if(peer == CURL_SOCKET_BAD) { @@ -1277,7 +1250,22 @@ static int test_tftpd(int argc, const char **argv) break; } } + else #endif + { + from.sa4.sin_family = AF_INET; + peer = socket(AF_INET, SOCK_DGRAM, 0); + if(peer == CURL_SOCKET_BAD) { + logmsg("socket"); + result = 2; + break; + } + if(connect(peer, &from.sa, sizeof(from.sa4)) < 0) { + logmsg("connect: fail"); + result = 1; + break; + } + } maxtimeout = 5 * TIMEOUT; @@ -1331,7 +1319,7 @@ tftpd_cleanup: if(got_exit_signal) { logmsg("========> %s tftpd (port: %d pid: %ld) exits with signal (%d)", - ipv_inuse, (int)port, (long)our_getpid(), exit_signal); + socket_type, (int)port, (long)our_getpid(), exit_signal); /* * To properly set the return status of the process we * must raise the same signal SIGINT or SIGTERM that we