]> git.netwichtig.de Git - user/henk/code/inspircd.git/blobdiff - src/users.cpp
Fixed a permissions error, was doing work as root!
[user/henk/code/inspircd.git] / src / users.cpp
index 6fb0e6a5c7b0e3752e52c6b1c42c386acbe93581..cdb93a40f2bb8445586b8b335ea10e3e4ca17cab 100644 (file)
@@ -1,5 +1,5 @@
 /*
-
+Manages userrec objects
 */
 
 #include "inspircd_config.h" 
@@ -8,6 +8,8 @@
 #include "inspircd.h"
 #include <stdio.h>
 
+extern std::stringstream config_f;
+
 userrec::userrec()
 {
        // the PROPER way to do it, AVOID bzero at *ALL* costs
@@ -91,3 +93,57 @@ void userrec::RemoveInvite(char* channel)
                }
         }
 }
+
+bool userrec::HasPermission(char* command)
+{
+       char TypeName[MAXBUF],Classes[MAXBUF],ClassName[MAXBUF],CommandList[MAXBUF];
+       char* myclass;
+       char* mycmd;
+       char* savept;
+       char* savept2;
+       
+       // are they even an oper at all?
+       if (strchr(this->modes,'o'))
+       {
+               log(DEBUG,"*** HasPermission: %s is an oper",this->nick);
+               for (int j =0; j < ConfValueEnum("type",&config_f); j++)
+               {
+                       ConfValue("type","name",j,TypeName,&config_f);
+                       if (!strcmp(TypeName,this->oper))
+                       {
+                               log(DEBUG,"*** HasPermission: %s is an oper of type '%s'",this->nick,this->oper);
+                               ConfValue("type","classes",j,Classes,&config_f);
+                               char* myclass = strtok_r(Classes," ",&savept);
+                               while (myclass)
+                               {
+                                       log(DEBUG,"*** HasPermission: checking classtype '%s'",myclass);
+                                       for (int k =0; k < ConfValueEnum("class",&config_f); k++)
+                                       {
+                                               ConfValue("class","name",k,ClassName,&config_f);
+                                               if (!strcmp(ClassName,myclass))
+                                               {
+                                                       ConfValue("class","commands",k,CommandList,&config_f);
+                                                       log(DEBUG,"*** HasPermission: found class named %s with commands: '%s'",ClassName,CommandList);
+                                                       
+                                                       
+                                                       mycmd = strtok_r(CommandList," ",&savept2);
+                                                       while (mycmd)
+                                                       {
+                                                               if (!strcasecmp(mycmd,command))
+                                                               {
+                                                                       log(DEBUG,"*** Command %s found, returning true",command);
+                                                                       return true;
+                                                               }
+                                                               mycmd = strtok_r(NULL," ",&savept2);
+                                                       }
+                                               }
+                                       }
+                                       myclass = strtok_r(NULL," ",&savept);
+                               }
+                       }
+               }
+       }
+       return false;
+}
+
+