diff options
-rw-r--r-- | src/modules/extra/m_ldapauth.cpp | 32 | ||||
-rw-r--r-- | src/modules/m_sqlauth.cpp (renamed from src/modules/extra/m_sqlauth.cpp) | 29 | ||||
-rw-r--r-- | src/modules/m_sqllog.cpp (renamed from src/modules/extra/m_sqllog.cpp) | 1 | ||||
-rw-r--r-- | src/modules/m_sqloper.cpp (renamed from src/modules/extra/m_sqloper.cpp) | 53 | ||||
-rw-r--r-- | src/modules/m_sqlutils.cpp (renamed from src/modules/extra/m_sqlutils.cpp) | 42 | ||||
-rw-r--r-- | src/modules/m_sqlutils.h (renamed from src/modules/extra/m_sqlutils.h) | 0 | ||||
-rw-r--r-- | src/modules/m_sqlv2.h (renamed from src/modules/extra/m_sqlv2.h) | 0 |
7 files changed, 66 insertions, 91 deletions
diff --git a/src/modules/extra/m_ldapauth.cpp b/src/modules/extra/m_ldapauth.cpp index 6fa5abfe7..013bdd110 100644 --- a/src/modules/extra/m_ldapauth.cpp +++ b/src/modules/extra/m_ldapauth.cpp @@ -33,6 +33,7 @@ class ModuleLDAPAuth : public Module { + LocalIntExt ldapAuthed; std::string base; std::string attribute; std::string ldapserver; @@ -46,21 +47,21 @@ class ModuleLDAPAuth : public Module LDAP *conn; public: - ModuleLDAPAuth() - { + ModuleLDAPAuth() : ldapAuthed("ldapauth", this) + { conn = NULL; - Implementation eventlist[] = { I_OnUserDisconnect, I_OnCheckReady, I_OnRehash, I_OnUserRegister }; + Implementation eventlist[] = { I_OnCheckReady, I_OnRehash, I_OnUserRegister }; ServerInstance->Modules->Attach(eventlist, this, 4); OnRehash(NULL); } - virtual ~ModuleLDAPAuth() + ~ModuleLDAPAuth() { if (conn) ldap_unbind_ext(conn, NULL, NULL); } - virtual void OnRehash(User* user) + void OnRehash(User* user) { ConfigReader Conf; @@ -110,11 +111,11 @@ public: return true; } - virtual ModResult OnUserRegister(User* user) + ModResult OnUserRegister(User* user) { if ((!allowpattern.empty()) && (InspIRCd::Match(user->nick,allowpattern))) { - user->Extend("ldapauthed"); + ldapAuthed.set(user,1); return MOD_RES_PASSTHRU; } @@ -188,7 +189,6 @@ public: { if (verbose) ServerInstance->SNO->WriteToSnoMask('c', "Forbidden connection from %s!%s@%s (No password provided)", user->nick.c_str(), user->ident.c_str(), user->host.c_str()); - user->Extend("ldapauth_failed"); return false; } cred.bv_val = (char*)user->password.data(); @@ -196,7 +196,7 @@ public: if ((res = ldap_sasl_bind_s(conn, ldap_get_dn(conn, entry), LDAP_SASL_SIMPLE, &cred, NULL, NULL, NULL)) == LDAP_SUCCESS) { ldap_msgfree(msg); - user->Extend("ldapauthed"); + ldapAuthed.set(user,1); return true; } else @@ -204,24 +204,16 @@ public: if (verbose) ServerInstance->SNO->WriteToSnoMask('c', "Forbidden connection from %s!%s@%s (%s)", user->nick.c_str(), user->ident.c_str(), user->host.c_str(), ldap_err2string(res)); ldap_msgfree(msg); - user->Extend("ldapauth_failed"); return false; } } - - virtual void OnUserDisconnect(User* user) - { - user->Shrink("ldapauthed"); - user->Shrink("ldapauth_failed"); - } - - virtual ModResult OnCheckReady(User* user) + ModResult OnCheckReady(User* user) { - return user->GetExt("ldapauthed") ? MOD_RES_PASSTHRU : MOD_RES_DENY; + return ldapAuthed.get(user) ? MOD_RES_PASSTHRU : MOD_RES_DENY; } - virtual Version GetVersion() + Version GetVersion() { return Version("Allow/Deny connections based upon answer from LDAP server", VF_VENDOR, API_VERSION); } diff --git a/src/modules/extra/m_sqlauth.cpp b/src/modules/m_sqlauth.cpp index d7c0675bb..256bf346a 100644 --- a/src/modules/extra/m_sqlauth.cpp +++ b/src/modules/m_sqlauth.cpp @@ -21,6 +21,7 @@ class ModuleSQLAuth : public Module { + LocalIntExt sqlAuthed; Module* SQLutils; Module* SQLprovider; @@ -32,8 +33,8 @@ class ModuleSQLAuth : public Module bool verbose; public: - ModuleSQLAuth() - { + ModuleSQLAuth() : sqlAuthed("sqlauth", this) + { ServerInstance->Modules->UseInterface("SQLutils"); ServerInstance->Modules->UseInterface("SQL"); @@ -57,7 +58,7 @@ public: } - virtual void OnRehash(User* user) + void OnRehash(User* user) { ConfigReader Conf; @@ -68,11 +69,11 @@ public: verbose = Conf.ReadFlag("sqlauth", "verbose", 0); /* Set to true if failed connects should be reported to operators */ } - virtual ModResult OnUserRegister(User* user) + ModResult OnUserRegister(User* user) { if ((!allowpattern.empty()) && (InspIRCd::Match(user->nick,allowpattern))) { - user->Extend("sqlauthed"); + sqlAuthed.set(user, 1); return MOD_RES_PASSTHRU; } @@ -160,19 +161,17 @@ public: if(res->Rows()) { /* We got a row in the result, this is enough really */ - user->Extend("sqlauthed"); + sqlAuthed.set(user, 1); } else if (verbose) { /* No rows in result, this means there was no record matching the user */ ServerInstance->SNO->WriteGlobalSno('a', "Forbidden connection from %s!%s@%s (SQL query returned no matches)", user->nick.c_str(), user->ident.c_str(), user->host.c_str()); - user->Extend("sqlauth_failed"); } } else if (verbose) { ServerInstance->SNO->WriteGlobalSno('a', "Forbidden connection from %s!%s@%s (SQL query failed: %s)", user->nick.c_str(), user->ident.c_str(), user->host.c_str(), res->error.Str()); - user->Extend("sqlauth_failed"); } } else @@ -180,7 +179,7 @@ public: return NULL; } - if (!user->GetExt("sqlauthed")) + if (!sqlAuthed.get(user)) { ServerInstance->Users->QuitUser(user, killreason); } @@ -189,18 +188,12 @@ public: return NULL; } - virtual void OnUserDisconnect(User* user) - { - user->Shrink("sqlauthed"); - user->Shrink("sqlauth_failed"); - } - - virtual ModResult OnCheckReady(User* user) + ModResult OnCheckReady(User* user) { - return user->GetExt("sqlauthed") ? MOD_RES_PASSTHRU : MOD_RES_DENY; + return sqlAuthed.get(user) ? MOD_RES_PASSTHRU : MOD_RES_DENY; } - virtual Version GetVersion() + Version GetVersion() { return Version("Allow/Deny connections based upon an arbitary SQL table", VF_VENDOR, API_VERSION); } diff --git a/src/modules/extra/m_sqllog.cpp b/src/modules/m_sqllog.cpp index 4713f24a9..73f53f8c0 100644 --- a/src/modules/extra/m_sqllog.cpp +++ b/src/modules/m_sqllog.cpp @@ -43,7 +43,6 @@ public: QueryInfo(const std::string &n, const std::string &s, const std::string &h, unsigned long i, int cat) { - ServerInstance = Instance; qs = FIND_SOURCE; nick = n; source = s; diff --git a/src/modules/extra/m_sqloper.cpp b/src/modules/m_sqloper.cpp index 47aa8d1fd..5f0df4c10 100644 --- a/src/modules/extra/m_sqloper.cpp +++ b/src/modules/m_sqloper.cpp @@ -15,7 +15,6 @@ #include "m_sqlv2.h" #include "m_sqlutils.h" #include "m_hash.h" -#include "commands/cmd_oper.h" /* $ModDesc: Allows storage of oper credentials in an SQL table */ /* $ModDep: m_sqlv2.h m_sqlutils.h m_hash.h */ @@ -24,6 +23,8 @@ typedef std::map<irc::string, Module*> hashymodules; class ModuleSQLOper : public Module { + LocalStringExt saved_user; + LocalStringExt saved_pass; Module* SQLutils; std::string databaseid; irc::string hashtype; @@ -32,8 +33,8 @@ class ModuleSQLOper : public Module parameterlist names; public: - ModuleSQLOper() - { + ModuleSQLOper() : saved_user("sqloper_user", this), saved_pass("sqloper_pass", this) + { ServerInstance->Modules->UseInterface("SQLutils"); ServerInstance->Modules->UseInterface("SQL"); ServerInstance->Modules->UseInterface("HashRequest"); @@ -68,8 +69,8 @@ public: if (!SQLutils) throw ModuleException("Can't find m_sqlutils.so. Please load m_sqlutils.so before m_sqloper.so."); - Implementation eventlist[] = { I_OnRequest, I_OnRehash, I_OnPreCommand, I_OnLoadModule }; - ServerInstance->Modules->Attach(eventlist, this, 3); + Implementation eventlist[] = { I_OnRehash, I_OnPreCommand, I_OnLoadModule }; + ServerInstance->Modules->Attach(eventlist, this, 4); } bool OneOfMatches(const char* host, const char* ip, const char* hostlist) @@ -170,8 +171,8 @@ public: */ AssociateUser(this, SQLutils, req.id, user).Send(); - user->Extend("oper_user", strdup(username.c_str())); - user->Extend("oper_pass", strdup(password.c_str())); + saved_user.set(user, username); + saved_pass.set(user, password); return true; } @@ -187,7 +188,7 @@ public: } } - virtual const char* OnRequest(Request* request) + const char* OnRequest(Request* request) { if (strcmp(SQLRESID, request->GetId()) == 0) { @@ -196,14 +197,10 @@ public: User* user = GetAssocUser(this, SQLutils, res->id).S().user; UnAssociate(this, SQLutils, res->id).S(); - char* tried_user = NULL; - char* tried_pass = NULL; - - user->GetExt("oper_user", tried_user); - user->GetExt("oper_pass", tried_pass); - if (user) { + std::string* tried_user = saved_user.get(user); + std::string* tried_pass = saved_pass.get(user); if (res->error.Id() == SQL_NO_ERROR) { if (res->Rows()) @@ -226,15 +223,15 @@ public: if (OperUser(user, row["hostname"].d, row["type"].d)) { /* If/when one of the rows matches, stop checking and return */ + saved_user.unset(user); + saved_pass.unset(user); return SQLSUCCESS; } if (tried_user && tried_pass) { - LoginFail(user, tried_user, tried_pass); - free(tried_user); - free(tried_pass); - user->Shrink("oper_user"); - user->Shrink("oper_pass"); + LoginFail(user, *tried_user, *tried_pass); + saved_user.unset(user); + saved_pass.unset(user); } } } @@ -246,11 +243,9 @@ public: */ if (tried_user && tried_pass) { - LoginFail(user, tried_user, tried_pass); - free(tried_user); - free(tried_pass); - user->Shrink("oper_user"); - user->Shrink("oper_pass"); + LoginFail(user, *tried_user, *tried_pass); + saved_user.unset(user); + saved_pass.unset(user); } } } @@ -262,11 +257,9 @@ public: */ if (tried_user && tried_pass) { - LoginFail(user, tried_user, tried_pass); - free(tried_user); - free(tried_pass); - user->Shrink("oper_user"); - user->Shrink("oper_pass"); + LoginFail(user, *tried_user, *tried_pass); + saved_user.unset(user); + saved_pass.unset(user); } } @@ -322,7 +315,7 @@ public: return false; } - virtual Version GetVersion() + Version GetVersion() { return Version("Allows storage of oper credentials in an SQL table", VF_VENDOR, API_VERSION); } diff --git a/src/modules/extra/m_sqlutils.cpp b/src/modules/m_sqlutils.cpp index 6d40ee22c..a80e1262b 100644 --- a/src/modules/extra/m_sqlutils.cpp +++ b/src/modules/m_sqlutils.cpp @@ -28,22 +28,23 @@ class ModuleSQLutils : public Module private: IdUserMap iduser; IdChanMap idchan; + SimpleExtItem<AssocIdList> idExt; public: - ModuleSQLutils() - { + ModuleSQLutils() : idExt("sqlutils_list", this) + { ServerInstance->Modules->PublishInterface("SQLutils", this); Implementation eventlist[] = { I_OnChannelDelete, I_OnUnloadModule, I_OnRequest, I_OnUserDisconnect }; ServerInstance->Modules->Attach(eventlist, this, 4); } - virtual ~ModuleSQLutils() + ~ModuleSQLutils() { ServerInstance->Modules->UnpublishInterface("SQLutils", this); } - virtual const char* OnRequest(Request* request) + const char* OnRequest(Request* request) { if(strcmp(SQLUTILAU, request->GetId()) == 0) { @@ -98,15 +99,15 @@ public: return SQLUTILSUCCESS; } - virtual void OnUserDisconnect(User* user) + void OnUserDisconnect(User* user) { /* A user is disconnecting, first we need to check if they have a list of queries associated with them. * Then, if they do, we need to erase each of them from our IdUserMap (iduser) so when the module that * associated them asks to look them up then it gets a NULL result and knows to discard the query. */ - AssocIdList* il; + AssocIdList* il = idExt.get(user); - if(user->GetExt("sqlutils_queryids", il)) + if(il) { for(AssocIdList::iterator listiter = il->begin(); listiter != il->end(); listiter++) { @@ -129,20 +130,19 @@ public: } } - user->Shrink("sqlutils_queryids"); - delete il; + idExt.unset(user); } } void AttachList(Extensible* obj, unsigned long id) { - AssocIdList* il; + AssocIdList* il = idExt.get(obj); - if(!obj->GetExt("sqlutils_queryids", il)) + if (!il) { /* Doesn't already exist, create a new list and attach it. */ il = new AssocIdList; - obj->Extend("sqlutils_queryids", il); + idExt.set(obj, il); } /* Now either way we have a valid list in il, attached. */ @@ -151,9 +151,9 @@ public: void RemoveFromList(Extensible* obj, unsigned long id) { - AssocIdList* il; + AssocIdList* il = idExt.get(obj); - if(obj->GetExt("sqlutils_queryids", il)) + if (il) { /* Only do anything if the list exists... (which it ought to) */ il->remove(id); @@ -161,8 +161,7 @@ public: if(il->empty()) { /* If we just emptied it.. */ - delete il; - obj->Shrink("sqlutils_queryids"); + idExt.unset(obj); } } } @@ -185,15 +184,15 @@ public: } } - virtual void OnChannelDelete(Channel* chan) + void OnChannelDelete(Channel* chan) { /* A channel is being destroyed, first we need to check if it has a list of queries associated with it. * Then, if it does, we need to erase each of them from our IdChanMap (idchan) so when the module that * associated them asks to look them up then it gets a NULL result and knows to discard the query. */ - AssocIdList* il; + AssocIdList* il = idExt.get(chan); - if(chan->GetExt("sqlutils_queryids", il)) + if (il) { for(AssocIdList::iterator listiter = il->begin(); listiter != il->end(); listiter++) { @@ -215,12 +214,11 @@ public: } } - chan->Shrink("sqlutils_queryids"); - delete il; + idExt.unset(chan); } } - virtual Version GetVersion() + Version GetVersion() { return Version("Provides some utilities to SQL client modules, such as mapping queries to users and channels", VF_VENDOR | VF_SERVICEPROVIDER, API_VERSION); } diff --git a/src/modules/extra/m_sqlutils.h b/src/modules/m_sqlutils.h index ce43be8cc..ce43be8cc 100644 --- a/src/modules/extra/m_sqlutils.h +++ b/src/modules/m_sqlutils.h diff --git a/src/modules/extra/m_sqlv2.h b/src/modules/m_sqlv2.h index a9297bd80..a9297bd80 100644 --- a/src/modules/extra/m_sqlv2.h +++ b/src/modules/m_sqlv2.h |