X-Git-Url: https://git.netwichtig.de/gitweb/?a=blobdiff_plain;f=src%2Fmodules%2Fextra%2Fm_pgsql.cpp;h=b417fc0192b039185240dfcb263725789e0ed933;hb=0da6b3a13def40e8fd002b9fc60f955467f6372d;hp=0484646dfd649ea21c3eea070447909223480a95;hpb=4ed72f3744b1f78251d66c9556695f6328a3bee0;p=user%2Fhenk%2Fcode%2Finspircd.git diff --git a/src/modules/extra/m_pgsql.cpp b/src/modules/extra/m_pgsql.cpp index 0484646df..b417fc019 100644 --- a/src/modules/extra/m_pgsql.cpp +++ b/src/modules/extra/m_pgsql.cpp @@ -3,7 +3,7 @@ * +------------------------------------+ * * InspIRCd: (C) 2002-2009 InspIRCd Development Team - * See: http://www.inspircd.org/wiki/index.php/Credits + * See: http://wiki.inspircd.org/Credits * * This program is free but copyrighted software; see * the file COPYING for details. @@ -47,12 +47,10 @@ enum SQLstatus { CREAD, CWRITE, WREAD, WWRITE, RREAD, RWRITE }; unsigned long count(const char * const str, char a) { unsigned long n = 0; - const char *p = reinterpret_cast(str); - - while ((p = strchr(p, a)) != NULL) + for (const char *p = reinterpret_cast(str); *p; ++p) { - ++p; - ++n; + if (*p == '?') + ++n; } return n; } @@ -61,10 +59,10 @@ unsigned long count(const char * const str, char a) */ std::string SQLhost::GetDSN() { - std::ostringstream conninfo("connect_timeout = '2'"); + std::ostringstream conninfo("connect_timeout = '5'"); - if (ip.length()) - conninfo << " hostaddr = '" << ip << "'"; + if (host.length()) + conninfo << " host = '" << host << "'"; if (port) conninfo << " port = '" << port << "'"; @@ -103,27 +101,6 @@ class ReconnectTimer : public Timer }; -/** Used to resolve sql server hostnames - */ -class SQLresolver : public Resolver -{ - private: - SQLhost host; - Module* mod; - public: - SQLresolver(Module* m, InspIRCd* Instance, const SQLhost& hi, bool &cached) - : Resolver(Instance, hi.host, DNS_QUERY_FORWARD, cached, (Module*)m), host(hi), mod(m) - { - } - - virtual void OnLookupComplete(const std::string &result, unsigned int ttl, bool cached, int resultnum = 0); - - virtual void OnError(ResolverError e, const std::string &errormessage) - { - ServerInstance->Logs->Log("m_pgsql",DEBUG, "PgSQL: DNS lookup failed (%s), dying horribly", errormessage.c_str()); - } -}; - /** PgSQLresult is a subclass of the mostly-pure-virtual class SQLresult. * All SQL providers must create their own subclass and define it's methods using that * database library's data retriveal functions. The aim is to avoid a slow and inefficient process @@ -589,9 +566,6 @@ class SQLConn : public EventHandler /* Total length of the unescaped parameters */ unsigned long maxparamlen, paramcount; - /* Total length of query, used for binary-safety */ - unsigned long querylength = 0; - /* The length of the longest parameter */ maxparamlen = 0; @@ -806,8 +780,8 @@ class ModulePgSQL : public Module ReadConf(); ServerInstance->Modules->PublishInterface("SQL", this); - Implementation eventlist[] = { I_OnUnloadModule, I_OnRequest, I_OnRehash, I_OnUserRegister, I_OnCheckReady, I_OnUserDisconnect }; - ServerInstance->Modules->Attach(eventlist, this, 6); + Implementation eventlist[] = { I_OnUnloadModule, I_OnRequest, I_OnRehash }; + ServerInstance->Modules->Attach(eventlist, this, 3); } virtual ~ModulePgSQL() @@ -822,7 +796,7 @@ class ModulePgSQL : public Module } - virtual void OnRehash(User* user, const std::string ¶meter) + virtual void OnRehash(User* user) { ReadConf(); } @@ -864,7 +838,6 @@ class ModulePgSQL : public Module for(int i = 0; i < conf.Enumerate("database"); i++) { SQLhost host; - int ipvalid; host.id = conf.ReadValue("database", "id", i); host.host = conf.ReadValue("database", "hostname", i); @@ -877,46 +850,7 @@ class ModulePgSQL : public Module if (HasHost(host)) continue; -#ifdef IPV6 - if (strchr(host.host.c_str(),':')) - { - in6_addr blargle; - ipvalid = inet_pton(AF_INET6, host.host.c_str(), &blargle); - } - else -#endif - { - in_addr blargle; - ipvalid = inet_aton(host.host.c_str(), &blargle); - } - - if(ipvalid > 0) - { - /* The conversion succeeded, we were given an IP and we can give it straight to SQLConn */ - host.ip = host.host; - this->AddConn(host); - } - else if(ipvalid == 0) - { - /* Conversion failed, assume it's a host */ - SQLresolver* resolver; - - try - { - bool cached; - resolver = new SQLresolver(this, ServerInstance, host, cached); - ServerInstance->AddResolver(resolver, cached); - } - catch(...) - { - /* THE WORLD IS COMING TO AN END! */ - } - } - else - { - /* Invalid address family, die horribly. */ - ServerInstance->Logs->Log("m_pgsql",DEBUG, "BUG: insp_aton failed returning -1, oh noes."); - } + this->AddConn(host); } } @@ -949,13 +883,12 @@ class ModulePgSQL : public Module { if (HasHost(hi)) { - ServerInstance->Logs->Log("m_pgsql",DEFAULT, "WARNING: A pgsql connection with id: %s already exists, possibly due to DNS delay. Aborting connection attempt.", hi.id.c_str()); + ServerInstance->Logs->Log("m_pgsql",DEFAULT, "WARNING: A pgsql connection with id: %s already exists. Aborting connection attempt.", hi.id.c_str()); return; } SQLConn* newconn; - /* The conversion succeeded, we were given an IP and we can give it straight to SQLConn */ newconn = new SQLConn(ServerInstance, this, hi); connections.insert(std::make_pair(hi.id, newconn)); @@ -1027,19 +960,6 @@ 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, int resultnum) -{ - if (!resultnum) - { - host.ip = result; - ((ModulePgSQL*)mod)->AddConn(host); - ((ModulePgSQL*)mod)->ClearOldConnections(); - } -} - void ReconnectTimer::Tick(time_t time) { ((ModulePgSQL*)mod)->ReadConf();