diff options
author | brain <brain@e03df62e-2008-0410-955e-edbf42e46eb7> | 2007-08-19 16:00:57 +0000 |
---|---|---|
committer | brain <brain@e03df62e-2008-0410-955e-edbf42e46eb7> | 2007-08-19 16:00:57 +0000 |
commit | df4f0dc888a2a24e7f8b42a1c21670679e633506 (patch) | |
tree | 6fb90acdb5ad14510b53045d0f414316792466c9 /src/modules | |
parent | dfdb324f674177a4e8ed92d8a782fc51ccf4ed84 (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.cpp | 13 | ||||
-rw-r--r-- | src/modules/m_cgiirc.cpp | 5 | ||||
-rw-r--r-- | src/modules/m_dnsbl.cpp | 2 | ||||
-rw-r--r-- | src/modules/m_http_client.cpp | 5 | ||||
-rw-r--r-- | src/modules/m_spanningtree/resolvers.cpp | 5 | ||||
-rw-r--r-- | src/modules/m_spanningtree/resolvers.h | 4 |
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); }; |