- if (strlen(command)>=(strlen(cmdlist[i].command))) if (!strncmp(command, cmdlist[i].command,MAXCOMMAND))
- {
- if (parameters)
- {
- if (parameters[0])
- {
- items = process_parameters(command_p,parameters);
- }
- else
- {
- items = 0;
- command_p[0] = NULL;
- }
- }
- else
- {
- items = 0;
- command_p[0] = NULL;
- }
-
- if (user)
- {
- /* activity resets the ping pending timer */
- user->nping = TIME + user->pingmax;
- if ((items) < cmdlist[i].min_params)
- {
- log(DEBUG,"process_command: not enough parameters: %s %s",user->nick,command);
- WriteServ(user->fd,"461 %s %s :Not enough parameters",user->nick,command);
- return;
- }
- if ((!strchr(user->modes,cmdlist[i].flags_needed)) && (cmdlist[i].flags_needed))
- {
- log(DEBUG,"process_command: permission denied: %s %s",user->nick,command);
- WriteServ(user->fd,"481 %s :Permission Denied- You do not have the required operator privilages",user->nick);
- cmd_found = 1;
- return;
- }
- if ((cmdlist[i].flags_needed) && (!user->HasPermission(command)))
- {
- log(DEBUG,"process_command: permission denied: %s %s",user->nick,command);
- WriteServ(user->fd,"481 %s :Permission Denied- Oper type %s does not have access to command %s",user->nick,user->oper,command);
- cmd_found = 1;
- return;
- }
- /* if the command isnt USER, PASS, or NICK, and nick is empty,
- * deny command! */
- if ((strncmp(command,"USER",4)) && (strncmp(command,"NICK",4)) && (strncmp(command,"PASS",4)))
- {
- if ((!isnick(user->nick)) || (user->registered != 7))
- {
- log(DEBUG,"process_command: not registered: %s %s",user->nick,command);
- WriteServ(user->fd,"451 %s :You have not registered",command);
- return;
- }
- }
- if ((user->registered == 7) && (!strchr(user->modes,'o')))
- {
- std::stringstream dcmds(Config->DisabledCommands);
- while (!dcmds.eof())
- {
- std::string thiscmd;
- dcmds >> thiscmd;
- if (!strcasecmp(thiscmd.c_str(),command))
- {
- // command is disabled!
- WriteServ(user->fd,"421 %s %s :This command has been disabled.",user->nick,command);
- return;
- }
- }
- }
- if ((user->registered == 7) || (!strncmp(command,"USER",4)) || (!strncmp(command,"NICK",4)) || (!strncmp(command,"PASS",4)))
- {
- if (cmdlist[i].handler_function)
- {
-
- /* ikky /stats counters */
- if (temp)
- {
- cmdlist[i].use_count++;
- cmdlist[i].total_bytes+=strlen(temp);
- }
-
- int MOD_RESULT = 0;
- FOREACH_RESULT(OnPreCommand(command,command_p,items,user));
- if (MOD_RESULT == 1) {
- return;
- }
-
- /* WARNING: nothing may come after the
- * command handler call, as the handler
- * may free the user structure! */
-
- cmdlist[i].handler_function(command_p,items,user);
- }
- return;
- }
- else
- {
- WriteServ(user->fd,"451 %s :You have not registered",command);
- return;
- }
- }
- cmd_found = 1;
- }