]> git.netwichtig.de Git - user/henk/code/inspircd.git/blobdiff - src/modules/extra/m_sqloper.cpp
Extra checks to not set the ssl marker twice on re-handshake (nonfatal but wasteful)
[user/henk/code/inspircd.git] / src / modules / extra / m_sqloper.cpp
index 14c373f288d29980324b03076d0685dfe3ce47d5..b4d8520cb74790fc338d9c0a45d91003edeab1b7 100644 (file)
@@ -34,6 +34,7 @@ using namespace std;
 #include "inspircd.h"
 #include "helperfuncs.h"
 #include "m_sql.h"
+#include "cmd_oper.h"
 
 /* $ModDesc: Allows storage of oper credentials in an SQL table */
 
@@ -151,34 +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")) && (Srv->MatchText(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);
-                                                               log(DEFAULT,"OPER: %s!%s@%s opered as type: %s",user->nick,user->ident,user->host,rowresult->GetField("type").c_str());
-                                                       }
-                                                       break;
-                                               }
-                                       }
-
+                                                               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;
+                                               }
+                                       }
                                }
+                               
                                delete rowresult;
                        }
                        else
@@ -186,6 +193,7 @@ class ModuleSQLOper : public Module
                                // we didn't have a row.
                                found = false;
                        }
+                       
                        delete rowrequest;
                        delete result;
                }