diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/cmd_oper.cpp | 2 | ||||
-rw-r--r-- | src/modules/extra/m_sqloper.cpp | 44 |
2 files changed, 26 insertions, 20 deletions
diff --git a/src/cmd_oper.cpp b/src/cmd_oper.cpp index 20a4b5ba8..8e57329d4 100644 --- a/src/cmd_oper.cpp +++ b/src/cmd_oper.cpp @@ -62,7 +62,7 @@ extern std::vector<userrec*> all_opers; extern std::vector<userrec*> local_users; extern userrec* fd_ref_table[MAX_DESCRIPTORS]; -bool OneOfMatches(char* host, char* hostlist) +bool OneOfMatches(const char* host, const char* hostlist) { std::stringstream hl(hostlist); std::string xhost; diff --git a/src/modules/extra/m_sqloper.cpp b/src/modules/extra/m_sqloper.cpp index 73422e49e..b4d8520cb 100644 --- a/src/modules/extra/m_sqloper.cpp +++ b/src/modules/extra/m_sqloper.cpp @@ -152,35 +152,40 @@ class ModuleSQLOper : public Module { found = true; // oper up the user. - for (int j =0; j < Conf->Enumerate("type"); j++) - { - std::string TypeName = Conf->ReadValue("type","name",j); + + for (int j =0; j < Conf->Enumerate("type"); j++) + { + std::string TypeName = Conf->ReadValue("type","name",j); Srv->Log(DEBUG,"Scanning opertype: "+TypeName); std::string pattern = std::string(user->ident) + "@" + std::string(user->host); - if ((TypeName == rowresult->GetField("type")) && (OneOfMatches(pattern,rowresult->GetField("hostname")))) - { + + if((TypeName == rowresult->GetField("type")) && OneOfMatches(pattern.c_str(), rowresult->GetField("hostname").c_str())) + { + /* found this oper's opertype */ Srv->Log(DEBUG,"Host and type match: "+TypeName+" "+rowresult->GetField("type")); - /* found this oper's opertype */ std::string HostName = Conf->ReadValue("type","host",j); - if (HostName != "") - Srv->ChangeHost(user,HostName); - strlcpy(user->oper,rowresult->GetField("type").c_str(),NICKMAX); + + if(HostName != "") + Srv->ChangeHost(user,HostName); + + strlcpy(user->oper,rowresult->GetField("type").c_str(),NICKMAX); WriteOpers("*** %s (%s@%s) is now an IRC operator of type %s",user->nick,user->ident,user->host,rowresult->GetField("type").c_str()); WriteServ(user->fd,"381 %s :You are now an IRC operator of type %s",user->nick,rowresult->GetField("type").c_str()); - if (!strchr(user->modes,'o')) - { - strcat(user->modes,"o"); - WriteServ(user->fd,"MODE %s :+o",user->nick); + if(!strchr(user->modes,'o')) + { + strcat(user->modes,"o"); + WriteServ(user->fd,"MODE %s :+o",user->nick); FOREACH_MOD(I_OnOper,OnOper(user,rowresult->GetField("type"))); AddOper(user); FOREACH_MOD(I_OnPostOper,OnPostOper(user,rowresult->GetField("type"))); - log(DEFAULT,"OPER: %s!%s@%s opered as type: %s",user->nick,user->ident,user->host,rowresult->GetField("type").c_str()); - } - break; - } - } - + log(DEFAULT,"OPER: %s!%s@%s opered as type: %s",user->nick,user->ident,user->host,rowresult->GetField("type").c_str()); + } + + break; + } + } } + delete rowresult; } else @@ -188,6 +193,7 @@ class ModuleSQLOper : public Module // we didn't have a row. found = false; } + delete rowrequest; delete result; } |