mirror of
https://github.com/samhocevar/rinetd.git
synced 2025-03-14 20:00:11 +08:00
Add a helper function to retrieve port from addrinfo.
This commit is contained in:
parent
f7cd21f91f
commit
0ef4f1042f
15
src/net.c
15
src/net.c
@ -1,6 +1,6 @@
|
||||
/* Copyright © 1997—1999 Thomas Boutell <boutell@boutell.com>
|
||||
and Boutell.Com, Inc.
|
||||
© 2003—2017 Sam Hocevar <sam@hocevar.net>
|
||||
© 2003—2021 Sam Hocevar <sam@hocevar.net>
|
||||
|
||||
This software is released for free use under the terms of
|
||||
the GNU Public License, version 2 or higher. NO WARRANTY
|
||||
@ -12,8 +12,7 @@
|
||||
|
||||
#include "net.h"
|
||||
|
||||
void setSocketDefaults(SOCKET fd)
|
||||
{
|
||||
void setSocketDefaults(SOCKET fd) {
|
||||
/* Make socket non-blocking (FIXME: this uses legacy API) */
|
||||
FIONBIO_ARG_T ioctltmp = 1;
|
||||
#if _WIN32
|
||||
@ -33,3 +32,13 @@ void setSocketDefaults(SOCKET fd)
|
||||
#endif
|
||||
}
|
||||
|
||||
uint16_t getPort(struct addrinfo* ai) {
|
||||
switch (ai->ai_family) {
|
||||
case AF_INET:
|
||||
return ntohs(((struct sockaddr_in*)ai->ai_addr)->sin_port);
|
||||
case AF_INET6:
|
||||
return ntohs(((struct sockaddr_in6*)ai->ai_addr)->sin6_port);
|
||||
default:
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
@ -24,6 +24,8 @@
|
||||
# include <arpa/inet.h>
|
||||
#endif
|
||||
|
||||
#include <stdint.h>
|
||||
|
||||
#if defined HAVE_ERRNO_H
|
||||
# include <errno.h>
|
||||
#endif
|
||||
@ -79,4 +81,4 @@ static inline int GetLastError(void) {
|
||||
#endif /* _WIN32 */
|
||||
|
||||
void setSocketDefaults(SOCKET fd);
|
||||
|
||||
uint16_t getPort(struct addrinfo* ai);
|
||||
|
12
src/rinetd.c
12
src/rinetd.c
@ -80,7 +80,7 @@ int logFormatCommon = 0;
|
||||
FILE *logFile = NULL;
|
||||
|
||||
char const *logMessages[] = {
|
||||
"unknown-error",
|
||||
"unknown-error",
|
||||
"done-local-closed",
|
||||
"done-remote-closed",
|
||||
"accept-failed -",
|
||||
@ -211,6 +211,7 @@ static void clearConfiguration(void) {
|
||||
}
|
||||
free(srv->fromHost);
|
||||
free(srv->toHost);
|
||||
freeaddrinfo(srv->fromAddrInfo);
|
||||
}
|
||||
/* Free memory associated with previous set. */
|
||||
free(seInfo);
|
||||
@ -296,7 +297,7 @@ void addServer(char *bindAddress, char *bindPort, protocolType bindProto,
|
||||
}
|
||||
|
||||
int tmp = 1;
|
||||
setsockopt(si.fd, SOL_SOCKET, SO_REUSEADDR, (const char *) &tmp, sizeof(tmp));
|
||||
setsockopt(si.fd, SOL_SOCKET, SO_REUSEADDR, (const char *)&tmp, sizeof(tmp));
|
||||
|
||||
if (bind(si.fd, it->ai_addr, it->ai_addrlen) == SOCKET_ERROR) {
|
||||
syslog(LOG_ERR, "couldn't bind to address %s port %s (%m)\n",
|
||||
@ -320,12 +321,9 @@ void addServer(char *bindAddress, char *bindPort, protocolType bindProto,
|
||||
setSocketDefaults(si.fd);
|
||||
}
|
||||
|
||||
si.fromPort = it->ai_addr->sa_family == AF_INET
|
||||
? ntohs(((struct sockaddr_in*)it->ai_addr)->sin_port)
|
||||
: ntohs(((struct sockaddr_in6*)it->ai_addr)->sin6_port);
|
||||
si.fromAddrInfo = it;
|
||||
break;
|
||||
}
|
||||
freeaddrinfo(servinfo);
|
||||
|
||||
if (getAddress(connectAddress, &si.localAddr) < 0) {
|
||||
/* Warn -- don't exit. */
|
||||
@ -1006,7 +1004,7 @@ static void logEvent(ConnectionInfo const *cnx, ServerInfo const *srv, int resul
|
||||
uint16_t fromPort = 0, toPort = 0;
|
||||
if (srv != NULL) {
|
||||
fromHost = srv->fromHost;
|
||||
fromPort = srv->fromPort;
|
||||
fromPort = getPort(srv->fromAddrInfo);
|
||||
toHost = srv->toHost;
|
||||
toPort = srv->toPort;
|
||||
}
|
||||
|
@ -1,6 +1,6 @@
|
||||
/* Copyright © 1997—1999 Thomas Boutell <boutell@boutell.com>
|
||||
and Boutell.Com, Inc.
|
||||
© 2003—2019 Sam Hocevar <sam@hocevar.net>
|
||||
© 2003—2021 Sam Hocevar <sam@hocevar.net>
|
||||
|
||||
This software is released for free use under the terms of
|
||||
the GNU Public License, version 2 or higher. NO WARRANTY
|
||||
@ -41,7 +41,8 @@ struct _server_info {
|
||||
|
||||
/* In ASCII and local byte order, for logging purposes */
|
||||
char *fromHost, *toHost;
|
||||
int16_t fromPort, toPort;
|
||||
struct addrinfo *fromAddrInfo;
|
||||
int16_t toPort;
|
||||
protocolType fromProto, toProto;
|
||||
|
||||
/* Offset and count into list of allow and deny rules. Any rules
|
||||
|
Loading…
Reference in New Issue
Block a user