+Returns true or false for if a user can execute a privilaged oper command.
+<p>
+This is done by looking up their oper type from <a class="el" href="classuserrec.html#o11">userrec::oper</a>, then referencing this to their oper classes and checking the commands they can execute.
+<p>
+Definition at line <a class="el" href="users_8cpp-source.html#l00114">114</a> of file <a class="el" href="users_8cpp-source.html">users.cpp</a>.
+<p>
+References <a class="el" href="channels_8cpp-source.html#l00101">config_f</a>, and <a class="el" href="modules_8h-source.html#l00023">DEBUG</a>.
+<p>
+<div class="fragment"><pre>00115 {
+00116 <span class="keywordtype">char</span> TypeName[MAXBUF],Classes[MAXBUF],ClassName[MAXBUF],CommandList[MAXBUF];
+00117 <span class="keywordtype">char</span>* mycmd;
+00118 <span class="keywordtype">char</span>* savept;
+00119 <span class="keywordtype">char</span>* savept2;
+00120
+00121 <span class="comment">// are they even an oper at all?</span>
+00122 <span class="keywordflow">if</span> (strchr(this->modes,<span class="charliteral">'o'</span>))
+00123 {
+00124 log(DEBUG,<span class="stringliteral">"*** HasPermission: %s is an oper"</span>,this->nick);
+00125 <span class="keywordflow">for</span> (<span class="keywordtype">int</span> j =0; j < ConfValueEnum(<span class="stringliteral">"type"</span>,&config_f); j++)
+00126 {
+00127 ConfValue(<span class="stringliteral">"type"</span>,<span class="stringliteral">"name"</span>,j,TypeName,&config_f);
+00128 <span class="keywordflow">if</span> (!strcmp(TypeName,this->oper))
+00129 {
+00130 log(DEBUG,<span class="stringliteral">"*** HasPermission: %s is an oper of type '%s'"</span>,this->nick,this->oper);
+00131 ConfValue(<span class="stringliteral">"type"</span>,<span class="stringliteral">"classes"</span>,j,Classes,&config_f);
+00132 <span class="keywordtype">char</span>* myclass = strtok_r(Classes,<span class="stringliteral">" "</span>,&savept);
+00133 <span class="keywordflow">while</span> (myclass)
+00134 {
+00135 log(DEBUG,<span class="stringliteral">"*** HasPermission: checking classtype '%s'"</span>,myclass);
+00136 <span class="keywordflow">for</span> (<span class="keywordtype">int</span> k =0; k < ConfValueEnum(<span class="stringliteral">"class"</span>,&config_f); k++)
+00137 {
+00138 ConfValue(<span class="stringliteral">"class"</span>,<span class="stringliteral">"name"</span>,k,ClassName,&config_f);
+00139 <span class="keywordflow">if</span> (!strcmp(ClassName,myclass))
+00140 {
+00141 ConfValue(<span class="stringliteral">"class"</span>,<span class="stringliteral">"commands"</span>,k,CommandList,&config_f);
+00142 log(DEBUG,<span class="stringliteral">"*** HasPermission: found class named %s with commands: '%s'"</span>,ClassName,CommandList);
+00143
+00144
+00145 mycmd = strtok_r(CommandList,<span class="stringliteral">" "</span>,&savept2);
+00146 <span class="keywordflow">while</span> (mycmd)
+00147 {
+00148 <span class="keywordflow">if</span> (!strcasecmp(mycmd,command))
+00149 {
+00150 log(DEBUG,<span class="stringliteral">"*** Command %s found, returning true"</span>,command);
+00151 <span class="keywordflow">return</span> <span class="keyword">true</span>;
+00152 }
+00153 mycmd = strtok_r(NULL,<span class="stringliteral">" "</span>,&savept2);
+00154 }
+00155 }
+00156 }
+00157 myclass = strtok_r(NULL,<span class="stringliteral">" "</span>,&savept);
+00158 }
+00159 }
+00160 }
+00161 }
+00162 <span class="keywordflow">return</span> <span class="keyword">false</span>;
+00163 }