mirror of
https://github.com/samhocevar/rinetd.git
synced 2025-03-22 15:50:08 +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>
|
/* Copyright © 1997—1999 Thomas Boutell <boutell@boutell.com>
|
||||||
and Boutell.Com, Inc.
|
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
|
This software is released for free use under the terms of
|
||||||
the GNU Public License, version 2 or higher. NO WARRANTY
|
the GNU Public License, version 2 or higher. NO WARRANTY
|
||||||
@ -12,8 +12,7 @@
|
|||||||
|
|
||||||
#include "net.h"
|
#include "net.h"
|
||||||
|
|
||||||
void setSocketDefaults(SOCKET fd)
|
void setSocketDefaults(SOCKET fd) {
|
||||||
{
|
|
||||||
/* Make socket non-blocking (FIXME: this uses legacy API) */
|
/* Make socket non-blocking (FIXME: this uses legacy API) */
|
||||||
FIONBIO_ARG_T ioctltmp = 1;
|
FIONBIO_ARG_T ioctltmp = 1;
|
||||||
#if _WIN32
|
#if _WIN32
|
||||||
@ -33,3 +32,13 @@ void setSocketDefaults(SOCKET fd)
|
|||||||
#endif
|
#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>
|
# include <arpa/inet.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#include <stdint.h>
|
||||||
|
|
||||||
#if defined HAVE_ERRNO_H
|
#if defined HAVE_ERRNO_H
|
||||||
# include <errno.h>
|
# include <errno.h>
|
||||||
#endif
|
#endif
|
||||||
@ -79,4 +81,4 @@ static inline int GetLastError(void) {
|
|||||||
#endif /* _WIN32 */
|
#endif /* _WIN32 */
|
||||||
|
|
||||||
void setSocketDefaults(SOCKET fd);
|
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;
|
FILE *logFile = NULL;
|
||||||
|
|
||||||
char const *logMessages[] = {
|
char const *logMessages[] = {
|
||||||
"unknown-error",
|
"unknown-error",
|
||||||
"done-local-closed",
|
"done-local-closed",
|
||||||
"done-remote-closed",
|
"done-remote-closed",
|
||||||
"accept-failed -",
|
"accept-failed -",
|
||||||
@ -211,6 +211,7 @@ static void clearConfiguration(void) {
|
|||||||
}
|
}
|
||||||
free(srv->fromHost);
|
free(srv->fromHost);
|
||||||
free(srv->toHost);
|
free(srv->toHost);
|
||||||
|
freeaddrinfo(srv->fromAddrInfo);
|
||||||
}
|
}
|
||||||
/* Free memory associated with previous set. */
|
/* Free memory associated with previous set. */
|
||||||
free(seInfo);
|
free(seInfo);
|
||||||
@ -296,7 +297,7 @@ void addServer(char *bindAddress, char *bindPort, protocolType bindProto,
|
|||||||
}
|
}
|
||||||
|
|
||||||
int tmp = 1;
|
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) {
|
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",
|
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);
|
setSocketDefaults(si.fd);
|
||||||
}
|
}
|
||||||
|
|
||||||
si.fromPort = it->ai_addr->sa_family == AF_INET
|
si.fromAddrInfo = it;
|
||||||
? ntohs(((struct sockaddr_in*)it->ai_addr)->sin_port)
|
|
||||||
: ntohs(((struct sockaddr_in6*)it->ai_addr)->sin6_port);
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
freeaddrinfo(servinfo);
|
|
||||||
|
|
||||||
if (getAddress(connectAddress, &si.localAddr) < 0) {
|
if (getAddress(connectAddress, &si.localAddr) < 0) {
|
||||||
/* Warn -- don't exit. */
|
/* 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;
|
uint16_t fromPort = 0, toPort = 0;
|
||||||
if (srv != NULL) {
|
if (srv != NULL) {
|
||||||
fromHost = srv->fromHost;
|
fromHost = srv->fromHost;
|
||||||
fromPort = srv->fromPort;
|
fromPort = getPort(srv->fromAddrInfo);
|
||||||
toHost = srv->toHost;
|
toHost = srv->toHost;
|
||||||
toPort = srv->toPort;
|
toPort = srv->toPort;
|
||||||
}
|
}
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
/* Copyright © 1997—1999 Thomas Boutell <boutell@boutell.com>
|
/* Copyright © 1997—1999 Thomas Boutell <boutell@boutell.com>
|
||||||
and Boutell.Com, Inc.
|
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
|
This software is released for free use under the terms of
|
||||||
the GNU Public License, version 2 or higher. NO WARRANTY
|
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 */
|
/* In ASCII and local byte order, for logging purposes */
|
||||||
char *fromHost, *toHost;
|
char *fromHost, *toHost;
|
||||||
int16_t fromPort, toPort;
|
struct addrinfo *fromAddrInfo;
|
||||||
|
int16_t toPort;
|
||||||
protocolType fromProto, toProto;
|
protocolType fromProto, toProto;
|
||||||
|
|
||||||
/* Offset and count into list of allow and deny rules. Any rules
|
/* Offset and count into list of allow and deny rules. Any rules
|
||||||
|
Loading…
Reference in New Issue
Block a user