diff options
Diffstat (limited to 'src/users.cpp')
-rw-r--r-- | src/users.cpp | 62 |
1 files changed, 61 insertions, 1 deletions
diff --git a/src/users.cpp b/src/users.cpp index 6fb0e6a5c..b523033ba 100644 --- a/src/users.cpp +++ b/src/users.cpp @@ -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,61 @@ 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); + //myclass = 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); + //mycmd = savept2; + while (mycmd) + { + if (!strcasecmp(mycmd,command)) + { + log(DEBUG,"*** Command %s found, returning true",command); + return true; + } + mycmd = strtok_r(NULL," ",&savept2); + //mycmd = savept2; + } + } + } + myclass = strtok_r(NULL," ",&savept); + //myclass = savept; + } + } + } + } + return false; +} + + |