summaryrefslogtreecommitdiff
path: root/src/modules
diff options
context:
space:
mode:
authorbrain <brain@e03df62e-2008-0410-955e-edbf42e46eb7>2007-08-19 16:00:57 +0000
committerbrain <brain@e03df62e-2008-0410-955e-edbf42e46eb7>2007-08-19 16:00:57 +0000
commitdf4f0dc888a2a24e7f8b42a1c21670679e633506 (patch)
tree6fb90acdb5ad14510b53045d0f414316792466c9 /src/modules
parentdfdb324f674177a4e8ed92d8a782fc51ccf4ed84 (diff)
Allow support for multiple dns results per request. This is a significant change and should probably not be backported to stable.
This will allow for a fix to feature request bug #384 git-svn-id: http://svn.inspircd.org/repository/trunk/inspircd@7753 e03df62e-2008-0410-955e-edbf42e46eb7
Diffstat (limited to 'src/modules')
-rw-r--r--src/modules/extra/m_pgsql.cpp13
-rw-r--r--src/modules/m_cgiirc.cpp5
-rw-r--r--src/modules/m_dnsbl.cpp2
-rw-r--r--src/modules/m_http_client.cpp5
-rw-r--r--src/modules/m_spanningtree/resolvers.cpp5
-rw-r--r--src/modules/m_spanningtree/resolvers.h4
6 files changed, 22 insertions, 12 deletions
diff --git a/src/modules/extra/m_pgsql.cpp b/src/modules/extra/m_pgsql.cpp
index 5d267fc1a..393cbd1d7 100644
--- a/src/modules/extra/m_pgsql.cpp
+++ b/src/modules/extra/m_pgsql.cpp
@@ -107,7 +107,7 @@ class SQLresolver : public Resolver
{
}
- virtual void OnLookupComplete(const std::string &result, unsigned int ttl, bool cached);
+ virtual void OnLookupComplete(const std::string &result, unsigned int ttl, bool cached, int resultnum = 0);
virtual void OnError(ResolverError e, const std::string &errormessage)
{
@@ -963,11 +963,14 @@ class ModulePgSQL : public Module
/* move this here to use AddConn, rather that than having the whole
* module above SQLConn, since this is buggin me right now :/
*/
-void SQLresolver::OnLookupComplete(const std::string &result, unsigned int ttl, bool cached)
+void SQLresolver::OnLookupComplete(const std::string &result, unsigned int ttl, bool cached, int resultnum)
{
- host.ip = result;
- ((ModulePgSQL*)mod)->AddConn(host);
- ((ModulePgSQL*)mod)->ClearOldConnections();
+ if (!resultnum)
+ {
+ host.ip = result;
+ ((ModulePgSQL*)mod)->AddConn(host);
+ ((ModulePgSQL*)mod)->ClearOldConnections();
+ }
}
void ReconnectTimer::Tick(time_t time)
diff --git a/src/modules/m_cgiirc.cpp b/src/modules/m_cgiirc.cpp
index d82705d81..c99d6b5eb 100644
--- a/src/modules/m_cgiirc.cpp
+++ b/src/modules/m_cgiirc.cpp
@@ -91,8 +91,11 @@ class CGIResolver : public Resolver
CGIResolver(Module* me, InspIRCd* ServerInstance, bool NotifyOpers, const std::string &source, bool forward, userrec* u, int userfd, const std::string &type, bool &cached)
: Resolver(ServerInstance, source, forward ? DNS_QUERY_A : DNS_QUERY_PTR4, cached, me), typ(type), theirfd(userfd), them(u), notify(NotifyOpers) { }
- virtual void OnLookupComplete(const std::string &result, unsigned int ttl, bool cached)
+ virtual void OnLookupComplete(const std::string &result, unsigned int ttl, bool cached, int resultnum = 0)
{
+ if (resultnum)
+ return;
+
/* Check the user still exists */
if ((them) && (them == ServerInstance->SE->GetRef(theirfd)))
{
diff --git a/src/modules/m_dnsbl.cpp b/src/modules/m_dnsbl.cpp
index d07b268f7..aaf4de05c 100644
--- a/src/modules/m_dnsbl.cpp
+++ b/src/modules/m_dnsbl.cpp
@@ -60,7 +60,7 @@ class DNSBLResolver : public Resolver
ConfEntry = conf;
}
- virtual void OnLookupComplete(const std::string &result, unsigned int ttl, bool cached)
+ virtual void OnLookupComplete(const std::string &result, unsigned int ttl, bool cached, int resultnum = 0)
{
/* Check the user still exists */
if ((them) && (them == ServerInstance->SE->GetRef(theirfd)))
diff --git a/src/modules/m_http_client.cpp b/src/modules/m_http_client.cpp
index 35b93b581..7e1b94f11 100644
--- a/src/modules/m_http_client.cpp
+++ b/src/modules/m_http_client.cpp
@@ -56,9 +56,10 @@ class HTTPResolver : public Resolver
{
}
- void OnLookupComplete(const string &result, unsigned int ttl, bool cached)
+ void OnLookupComplete(const string &result, unsigned int ttl, bool cached, int resultnum = 0)
{
- socket->Connect(result);
+ if (!resultnum)
+ socket->Connect(result);
}
void OnError(ResolverError e, const string &errmsg)
diff --git a/src/modules/m_spanningtree/resolvers.cpp b/src/modules/m_spanningtree/resolvers.cpp
index 0d94da99f..ac14833a5 100644
--- a/src/modules/m_spanningtree/resolvers.cpp
+++ b/src/modules/m_spanningtree/resolvers.cpp
@@ -43,8 +43,11 @@ ServernameResolver::ServernameResolver(Module* me, SpanningTreeUtilities* Util,
/* Nothing in here, folks */
}
-void ServernameResolver::OnLookupComplete(const std::string &result, unsigned int ttl, bool cached)
+void ServernameResolver::OnLookupComplete(const std::string &result, unsigned int ttl, bool cached, int resultnum)
{
+ if (resultnum)
+ return;
+
/* Initiate the connection, now that we have an IP to use.
* Passing a hostname directly to InspSocket causes it to
* just bail and set its FD to -1.
diff --git a/src/modules/m_spanningtree/resolvers.h b/src/modules/m_spanningtree/resolvers.h
index 06fd05bad..53adaa50f 100644
--- a/src/modules/m_spanningtree/resolvers.h
+++ b/src/modules/m_spanningtree/resolvers.h
@@ -45,7 +45,7 @@ class SecurityIPResolver : public Resolver
{
}
- void OnLookupComplete(const std::string &result, unsigned int ttl, bool cached)
+ void OnLookupComplete(const std::string &result, unsigned int ttl, bool cached, int resultnum = 0)
{
Utils->ValidIPs.push_back(result);
}
@@ -83,7 +83,7 @@ class ServernameResolver : public Resolver
Module* mine;
public:
ServernameResolver(Module* me, SpanningTreeUtilities* Util, InspIRCd* Instance, const std::string &hostname, Link x, bool &cached, QueryType qt);
- void OnLookupComplete(const std::string &result, unsigned int ttl, bool cached);
+ void OnLookupComplete(const std::string &result, unsigned int ttl, bool cached, int resultnum = 0);
void OnError(ResolverError e, const std::string &errormessage);
};