output += *c;
}
}
+ else
+ this->WriteServ("501 %s %c :is unknown snomask char to me", this->nick, *c);
+
oldadding = adding;
break;
}
*password = *nick = *ident = *host = *dhost = *fullname = *awaymsg = *oper = *uuid = 0;
server = (char*)Instance->FindServerNamePtr(Instance->Config->ServerName);
reset_due = ServerInstance->Time();
- age = ServerInstance->Time(true);
+ age = ServerInstance->Time();
Penalty = 0;
lines_in = lastping = signon = idle_lastmsg = nping = registered = 0;
ChannelCount = timeout = bytes_in = bytes_out = cmds_in = cmds_out = 0;
catch (...)
{
- ServerInstance->Log(DEBUG,"Exception in User::Oper()");
+ ServerInstance->Logs->Log("OPER", DEBUG,"Exception in User::Oper()");
}
}
{
if (IS_OPER(this))
{
- // unset their oper type (what IS_OPER checks), and remove +o
+ /* Remove all oper only modes from the user when the deoper - Bug #466*/
+ std::string moderemove("-");
+
+ for (unsigned char letter = 'A'; letter <= 'z'; letter++)
+ {
+ if (letter != 'o')
+ {
+ ModeHandler* mh = ServerInstance->Modes->FindMode(letter, MODETYPE_USER);
+ if (mh && mh->NeedsOper())
+ moderemove += letter;
+ }
+ }
+
+ const char* parameters[] = { this->nick, moderemove.c_str() };
+ ServerInstance->Parser->CallHandler("MODE", parameters, 2, this);
+
+ /* unset their oper type (what IS_OPER checks), and remove +o */
*this->oper = 0;
this->modes[UM_OPERATOR] = 0;
- // remove the user from the oper list. Will remove multiple entries as a safeguard against bug #404
+ /* remove the user from the oper list. Will remove multiple entries as a safeguard against bug #404 */
ServerInstance->Users->all_opers.remove(this);
if (AllowedOperCommands)
}
break;
default:
- ServerInstance->Log(DEBUG,"Uh oh, I dont know protocol %d to be set on '%s'!", protocol_family, this->nick);
+ ServerInstance->Logs->Log("USERS",DEBUG,"Uh oh, I dont know protocol %d to be set on '%s'!", protocol_family, this->nick);
break;
}
}
}
catch (...)
{
- ServerInstance->Log(DEBUG,"Exception in User::Write() std::string::append");
+ ServerInstance->Logs->Log("USEROUTPUT", DEBUG,"Exception in User::Write() std::string::append");
return;
}
}
catch (CoreException& modexcept)
{
- ServerInstance->Log(DEBUG, "%s threw an exception: %s", modexcept.GetSource(), modexcept.GetReason());
+ ServerInstance->Logs->Log("USEROUTPUT", DEBUG, "%s threw an exception: %s", modexcept.GetSource(), modexcept.GetReason());
}
}
else
/* deny change if change will take class over the limit */
if (found->limit && (found->RefCount + 1 >= found->limit))
{
- ServerInstance->Log(DEBUG, "OOPS: Connect class limit (%u) hit, denying", found->limit);
+ ServerInstance->Logs->Log("USERS", DEBUG, "OOPS: Connect class limit (%u) hit, denying", found->limit);
return this->MyClass;
}
if (found == this->MyClass) // no point changing this shit :P
return this->MyClass;
this->MyClass->RefCount--;
- ServerInstance->Log(DEBUG, "Untying user from connect class -- refcount: %u", this->MyClass->RefCount);
+ ServerInstance->Logs->Log("USERS", DEBUG, "Untying user from connect class -- refcount: %u", this->MyClass->RefCount);
}
this->MyClass = found;
this->MyClass->RefCount++;
- ServerInstance->Log(DEBUG, "User tied to new class -- connect refcount now: %u", this->MyClass->RefCount);
+ ServerInstance->Logs->Log("USERS", DEBUG, "User tied to new class -- connect refcount now: %u", this->MyClass->RefCount);
}
return this->MyClass;
}
catch (...)
{
- ServerInstance->Log(DEBUG,"Exception in User::PurgeEmptyChannels to_delete.push_back()");
+ ServerInstance->Logs->Log("USERS", DEBUG,"Exception in User::PurgeEmptyChannels to_delete.push_back()");
}
}
}
}
catch (...)
{
- ServerInstance->Log(DEBUG,"Exception in User::HandleEvent intercepted");
+ ServerInstance->Logs->Log("USERS", DEBUG,"Exception in User::HandleEvent intercepted");
}
/* If the user has raised an error whilst being processed, quit them now we're safe to */