aboutsummaryrefslogtreecommitdiff
path: root/src/modules
diff options
context:
space:
mode:
Diffstat (limited to 'src/modules')
-rw-r--r--src/modules/m_cloaking.cpp6
-rw-r--r--src/modules/m_gateway.cpp8
-rw-r--r--src/modules/m_ident.cpp7
-rw-r--r--src/modules/m_spanningtree/main.cpp6
-rw-r--r--src/modules/m_spanningtree/resolvers.cpp4
-rw-r--r--src/modules/m_spanningtree/treesocket1.cpp3
-rw-r--r--src/modules/m_spanningtree/uid.cpp8
-rw-r--r--src/modules/m_spanningtree/utils.cpp4
-rw-r--r--src/modules/m_websocket.cpp15
9 files changed, 25 insertions, 36 deletions
diff --git a/src/modules/m_cloaking.cpp b/src/modules/m_cloaking.cpp
index b04295ef1..c8a8cfaa2 100644
--- a/src/modules/m_cloaking.cpp
+++ b/src/modules/m_cloaking.cpp
@@ -509,8 +509,8 @@ public:
{
std::string chost;
- irc::sockets::sockaddrs hostip;
- bool host_is_ip = irc::sockets::aptosa(host, ip.port(), hostip) && hostip == ip;
+ irc::sockets::sockaddrs hostip(false);
+ bool host_is_ip = hostip.from_ip_port(host, ip.port()) && hostip == ip;
switch (info.mode)
{
@@ -569,7 +569,7 @@ CmdResult CommandCloak::Handle(User* user, const Params& parameters)
// If we're cloaking an IP address we pass it in the IP field too.
irc::sockets::sockaddrs sa;
- const char* ipaddr = irc::sockets::aptosa(parameters[0], 0, sa) ? parameters[0].c_str() : "";
+ const char* ipaddr = sa.from_ip(parameters[0]) ? parameters[0].c_str() : "";
unsigned int id = 0;
for (const auto& info : mod->cloaks)
diff --git a/src/modules/m_gateway.cpp b/src/modules/m_gateway.cpp
index a00d2d0df..d4a9a3d7b 100644
--- a/src/modules/m_gateway.cpp
+++ b/src/modules/m_gateway.cpp
@@ -140,8 +140,8 @@ public:
CmdResult HandleLocal(LocalUser* user, const Params& parameters) override
{
- irc::sockets::sockaddrs sa;
- if (irc::sockets::aptosa(parameters[0], 0, sa))
+ irc::sockets::sockaddrs sa(false);
+ if (sa.from_ip(parameters[0]))
{
if (sa.family() != AF_INET)
{
@@ -263,8 +263,8 @@ public:
if (!host.Matches(user, parameters[0], sslapi))
continue;
- irc::sockets::sockaddrs ipaddr;
- if (!irc::sockets::aptosa(parameters[3], user->client_sa.port(), ipaddr))
+ irc::sockets::sockaddrs ipaddr(false);
+ if (!ipaddr.from_ip_port(parameters[3], user->client_sa.port()))
{
ServerInstance->SNO.WriteGlobalSno('w', "Connecting user %s (%s) tried to use WEBIRC but gave an invalid IP address.",
user->uuid.c_str(), user->GetIPString().c_str());
diff --git a/src/modules/m_ident.cpp b/src/modules/m_ident.cpp
index 6866af3d4..17b5c4c24 100644
--- a/src/modules/m_ident.cpp
+++ b/src/modules/m_ident.cpp
@@ -120,11 +120,8 @@ public:
done = false;
- irc::sockets::sockaddrs bindaddr;
- irc::sockets::sockaddrs connaddr;
-
- memcpy(&bindaddr, &user->server_sa, sizeof(bindaddr));
- memcpy(&connaddr, &user->client_sa, sizeof(connaddr));
+ irc::sockets::sockaddrs bindaddr(user->server_sa);
+ irc::sockets::sockaddrs connaddr(user->client_sa);
if (connaddr.family() == AF_INET6)
{
diff --git a/src/modules/m_spanningtree/main.cpp b/src/modules/m_spanningtree/main.cpp
index ad45a2746..520868978 100644
--- a/src/modules/m_spanningtree/main.cpp
+++ b/src/modules/m_spanningtree/main.cpp
@@ -223,7 +223,7 @@ void ModuleSpanningTree::ConnectServer(std::shared_ptr<Link> x, std::shared_ptr<
irc::sockets::sockaddrs sa;
if (x->IPAddr.find('/') != std::string::npos)
{
- if (!irc::sockets::isunix(x->IPAddr) || !irc::sockets::untosa(x->IPAddr, sa))
+ if (!irc::sockets::isunix(x->IPAddr) || !sa.from_unix(x->IPAddr))
{
// We don't use the family() != AF_UNSPEC check below for UNIX sockets as
// that results in a DNS lookup.
@@ -235,7 +235,7 @@ void ModuleSpanningTree::ConnectServer(std::shared_ptr<Link> x, std::shared_ptr<
else
{
// If this fails then the IP sa will be AF_UNSPEC.
- irc::sockets::aptosa(x->IPAddr, x->Port, sa);
+ sa.from_ip_port(x->IPAddr, x->Port);
}
/* Do we already have an IP? If so, no need to resolve it. */
@@ -259,7 +259,7 @@ void ModuleSpanningTree::ConnectServer(std::shared_ptr<Link> x, std::shared_ptr<
// Guess start_type from bindip aftype
DNS::QueryType start_type = DNS::QUERY_AAAA;
irc::sockets::sockaddrs bind;
- if ((!x->Bind.empty()) && (irc::sockets::aptosa(x->Bind, 0, bind)))
+ if (!x->Bind.empty() && bind.from_ip(x->Bind))
{
if (bind.family() == AF_INET)
start_type = DNS::QUERY_A;
diff --git a/src/modules/m_spanningtree/resolvers.cpp b/src/modules/m_spanningtree/resolvers.cpp
index 4c449f2c4..e77db55a5 100644
--- a/src/modules/m_spanningtree/resolvers.cpp
+++ b/src/modules/m_spanningtree/resolvers.cpp
@@ -55,8 +55,8 @@ void ServernameResolver::OnLookupComplete(const DNS::Query *r)
return;
}
- irc::sockets::sockaddrs sa;
- if (!irc::sockets::aptosa(ans_record->rdata, MyLink->Port, sa))
+ irc::sockets::sockaddrs sa(false);
+ if (!sa.from_ip_port(ans_record->rdata, MyLink->Port))
{
// We had a result but it wasn't a valid IPv4/IPv6.
OnError(r);
diff --git a/src/modules/m_spanningtree/treesocket1.cpp b/src/modules/m_spanningtree/treesocket1.cpp
index 7cf1e170c..f66227084 100644
--- a/src/modules/m_spanningtree/treesocket1.cpp
+++ b/src/modules/m_spanningtree/treesocket1.cpp
@@ -48,10 +48,9 @@ TreeSocket::TreeSocket(std::shared_ptr<Link> link, std::shared_ptr<Autoconnect>
capab->ac = myac;
irc::sockets::sockaddrs bind;
- memset(&bind, 0, sizeof(bind));
if (!link->Bind.empty() && (dest.family() == AF_INET || dest.family() == AF_INET6))
{
- if (!irc::sockets::aptosa(link->Bind, 0, bind))
+ if (!bind.from_ip(link->Bind))
{
state = I_ERROR;
SetError("Bind address '" + link->Bind + "' is not a valid IPv4 or IPv6 address");
diff --git a/src/modules/m_spanningtree/uid.cpp b/src/modules/m_spanningtree/uid.cpp
index bd878d488..9fe9069a0 100644
--- a/src/modules/m_spanningtree/uid.cpp
+++ b/src/modules/m_spanningtree/uid.cpp
@@ -70,12 +70,8 @@ CmdResult CommandUID::HandleServer(TreeServer* remoteserver, CommandBase::Params
}
}
- irc::sockets::sockaddrs sa;
- if (params[6].find('/') != std::string::npos)
- irc::sockets::untosa(params[6], sa);
- else
- irc::sockets::aptosa(params[6], 0, sa);
- if (sa.family() == AF_UNSPEC)
+ irc::sockets::sockaddrs sa(false);
+ if (!sa.from(params[6]))
throw ProtocolException("Invalid IP address or UNIX socket path");
/* For remote users, we pass the UUID they sent to the constructor.
diff --git a/src/modules/m_spanningtree/utils.cpp b/src/modules/m_spanningtree/utils.cpp
index 3afe0fddb..798df840f 100644
--- a/src/modules/m_spanningtree/utils.cpp
+++ b/src/modules/m_spanningtree/utils.cpp
@@ -212,8 +212,8 @@ void SpanningTreeUtilities::RefreshIPCache()
ValidIPs.insert(ValidIPs.end(), L->AllowMasks.begin(), L->AllowMasks.end());
- irc::sockets::sockaddrs dummy;
- bool ipvalid = irc::sockets::aptosa(L->IPAddr, L->Port, dummy);
+ irc::sockets::sockaddrs dummy(false);
+ bool ipvalid = dummy.from_ip_port(L->IPAddr, L->Port);
if ((L->IPAddr == "*") || (isunix) || (ipvalid))
ValidIPs.push_back(L->IPAddr);
else if (this->Creator->DNS)
diff --git a/src/modules/m_websocket.cpp b/src/modules/m_websocket.cpp
index fd5bd2a73..f9363f998 100644
--- a/src/modules/m_websocket.cpp
+++ b/src/modules/m_websocket.cpp
@@ -408,7 +408,12 @@ class WebSocketHook final
if (proxyheader.Find(recvq, "X-Real-IP:", 10, reqend) || proxyheader.Find(recvq, "X-Forwarded-For:", 16, reqend))
{
// Attempt to parse the proxy HTTP header.
- irc::sockets::aptosa(proxyheader.ExtractValue(recvq), realsa.port(), realsa);
+ if (!realsa.from_ip_port(proxyheader.ExtractValue(recvq), realsa.port()))
+ {
+ // The proxy header value contains a malformed value.
+ FailHandshake(sock, "HTTP/1.1 400 Bad Request\r\nConnection: close\r\n\r\n", "WebSocket: Received a proxied HTTP request that sent a malformed real IP address");
+ return -1;
+ }
}
else
{
@@ -416,14 +421,6 @@ class WebSocketHook final
FailHandshake(sock, "HTTP/1.1 400 Bad Request\r\nConnection: close\r\n\r\n", "WebSocket: Received a proxied HTTP request that did not send a real IP address header");
return -1;
}
-
- if (realsa.family() == AF_UNSPEC)
- {
- // The proxy header value contains a malformed value.
- FailHandshake(sock, "HTTP/1.1 400 Bad Request\r\nConnection: close\r\n\r\n", "WebSocket: Received a proxied HTTP request that sent a malformed real IP address");
- return -1;
- }
-
for (const auto& proxyrange : config.proxyranges)
{
if (InspIRCd::MatchCIDR(luser->GetIPString(), proxyrange, ascii_case_insensitive_map))