+<div class="fragment"><pre>00066 {
+00067 snprintf(result,MAXBUF,<span class="stringliteral">"%s!%s@%s"</span>,nick,ident,host);
+00068 <span class="keywordflow">return</span> <a class="code" href="classuserrec.html#o8">result</a>;
+00069 }
+</pre></div> </td>
+ </tr>
+</table>
+<a name="a7" doxytag="userrec::HasPermission"></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> bool userrec::HasPermission </td>
+ <td class="md" valign="top">( </td>
+ <td class="md" nowrap valign="top">char * </td>
+ <td class="mdname1" valign="top" nowrap> <em>command</em> </td>
+ <td class="md" valign="top"> ) </td>
+ <td class="md" nowrap></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+
+ </td>
+ <td>
+
+<p>
+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 }