summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorattilamolnar <attilamolnar@hush.com>2013-05-16 01:56:06 +0200
committerattilamolnar <attilamolnar@hush.com>2013-05-16 01:56:06 +0200
commitc5a46583800374344d8676eccd7061a15a5ac1ce (patch)
tree486f8ecdc4abd23795c871a59fd0ec707c6a49d8
parent4b41feea830fc84e8c1b2fd0982f3e8d8840af96 (diff)
Allow spaces (and more) in oper types
The spaces are converted to '_' characters in OPERTYPE for 2.0 servers Issue #533 suggested by @ankitkv
-rw-r--r--include/configreader.h5
-rw-r--r--src/command_parse.cpp2
-rw-r--r--src/commands/cmd_stats.cpp2
-rw-r--r--src/commands/cmd_whois.cpp2
-rw-r--r--src/configreader.cpp2
-rw-r--r--src/mode.cpp2
-rw-r--r--src/modules/m_check.cpp2
-rw-r--r--src/modules/m_httpd_stats.cpp2
-rw-r--r--src/modules/m_spanningtree/compat.cpp13
-rw-r--r--src/modules/m_spanningtree/main.cpp6
-rw-r--r--src/modules/m_spanningtree/netburst.cpp2
-rw-r--r--src/modules/m_spanningtree/opertype.cpp2
-rw-r--r--src/users.cpp8
13 files changed, 29 insertions, 21 deletions
diff --git a/include/configreader.h b/include/configreader.h
index bdba0efc3..cf5dd1a3e 100644
--- a/include/configreader.h
+++ b/include/configreader.h
@@ -170,11 +170,6 @@ class CoreExport OperInfo : public refcountbase
/** Get a configuration item, searching in the oper, type, and class blocks (in that order) */
std::string getConfig(const std::string& key);
void init();
-
- inline const char* NameStr()
- {
- return irc::Spacify(name.c_str());
- }
};
/** This class holds the bulk of the runtime configuration for the ircd.
diff --git a/src/command_parse.cpp b/src/command_parse.cpp
index a7fd810a3..d386337f2 100644
--- a/src/command_parse.cpp
+++ b/src/command_parse.cpp
@@ -296,7 +296,7 @@ bool CommandParser::ProcessCommand(LocalUser *user, std::string &cmd)
if (!user->HasPermission(command))
{
user->WriteNumeric(ERR_NOPRIVILEGES, "%s :Permission Denied - Oper type %s does not have access to command %s",
- user->nick.c_str(), user->oper->NameStr(), command.c_str());
+ user->nick.c_str(), user->oper->name.c_str(), command.c_str());
return do_more;
}
}
diff --git a/src/commands/cmd_stats.cpp b/src/commands/cmd_stats.cpp
index d9f3c1496..692b0d2ec 100644
--- a/src/commands/cmd_stats.cpp
+++ b/src/commands/cmd_stats.cpp
@@ -345,7 +345,7 @@ void CommandStats::DoStats(char statschar, User* user, string_list &results)
if (mh && mh->NeedsOper() && tag->AllowedChanModes[c - 'A'])
cmodes.push_back(c);
}
- results.push_back(sn+" 243 "+user->nick+" O "+tag->NameStr() + " " + umodes + " " + cmodes);
+ results.push_back(sn+" 243 "+user->nick+" O "+tag->name.c_str() + " " + umodes + " " + cmodes);
}
}
break;
diff --git a/src/commands/cmd_whois.cpp b/src/commands/cmd_whois.cpp
index b4483d8bb..fea14f375 100644
--- a/src/commands/cmd_whois.cpp
+++ b/src/commands/cmd_whois.cpp
@@ -145,7 +145,7 @@ void CommandWhois::DoWhois(User* user, User* dest, unsigned long signon, unsigne
if (ServerInstance->Config->GenericOper)
ServerInstance->SendWhoisLine(user, dest, 313, "%s %s :is an IRC operator",user->nick.c_str(), dest->nick.c_str());
else
- ServerInstance->SendWhoisLine(user, dest, 313, "%s %s :is %s %s on %s",user->nick.c_str(), dest->nick.c_str(), (strchr("AEIOUaeiou",dest->oper->name[0]) ? "an" : "a"),dest->oper->NameStr(), ServerInstance->Config->Network.c_str());
+ ServerInstance->SendWhoisLine(user, dest, 313, "%s %s :is %s %s on %s",user->nick.c_str(), dest->nick.c_str(), (strchr("AEIOUaeiou",dest->oper->name[0]) ? "an" : "a"),dest->oper->name.c_str(), ServerInstance->Config->Network.c_str());
}
if (user == dest || user->HasPrivPermission("users/auspex"))
diff --git a/src/configreader.cpp b/src/configreader.cpp
index cd6122b25..943fa5a41 100644
--- a/src/configreader.cpp
+++ b/src/configreader.cpp
@@ -135,8 +135,6 @@ void ServerConfig::CrossCheckOperClassType()
std::string name = tag->getString("name");
if (name.empty())
throw CoreException("<type:name> is missing from tag at " + tag->getTagLocation());
- if (!ServerInstance->IsNick(name, Limits.NickMax))
- throw CoreException("<type:name> is invalid (value '" + name + "')");
if (oper_blocks.find(" " + name) != oper_blocks.end())
throw CoreException("Duplicate type block with name " + name + " at " + tag->getTagLocation());
diff --git a/src/mode.cpp b/src/mode.cpp
index 768623bd5..cd5c1d158 100644
--- a/src/mode.cpp
+++ b/src/mode.cpp
@@ -313,7 +313,7 @@ ModeAction ModeParser::TryMode(User* user, User* targetuser, Channel* chan, bool
if (user->IsOper())
{
user->WriteNumeric(ERR_NOPRIVILEGES, "%s :Permission Denied - Oper type %s does not have access to set %s mode %c",
- user->nick.c_str(), user->oper->NameStr(), type == MODETYPE_CHANNEL ? "channel" : "user", modechar);
+ user->nick.c_str(), user->oper->name.c_str(), type == MODETYPE_CHANNEL ? "channel" : "user", modechar);
}
else
{
diff --git a/src/modules/m_check.cpp b/src/modules/m_check.cpp
index e8f077a7b..fda211cf8 100644
--- a/src/modules/m_check.cpp
+++ b/src/modules/m_check.cpp
@@ -113,7 +113,7 @@ class CommandCheck : public Command
{
OperInfo* oper = targuser->oper;
/* user is an oper of type ____ */
- user->SendText(checkstr + " opertype " + oper->NameStr());
+ user->SendText(checkstr + " opertype " + oper->name);
if (loctarg)
{
std::string umodes;
diff --git a/src/modules/m_httpd_stats.cpp b/src/modules/m_httpd_stats.cpp
index 0330b3073..8f25415a9 100644
--- a/src/modules/m_httpd_stats.cpp
+++ b/src/modules/m_httpd_stats.cpp
@@ -196,7 +196,7 @@ class ModuleHttpStats : public Module
if (u->IsAway())
data << "<away>" << Sanitize(u->awaymsg) << "</away><awaytime>" << u->awaytime << "</awaytime>";
if (u->IsOper())
- data << "<opertype>" << Sanitize(u->oper->NameStr()) << "</opertype>";
+ data << "<opertype>" << Sanitize(u->oper->name) << "</opertype>";
data << "<modes>" << u->FormatModes() << "</modes><ident>" << Sanitize(u->ident) << "</ident>";
LocalUser* lu = IS_LOCAL(u);
if (lu)
diff --git a/src/modules/m_spanningtree/compat.cpp b/src/modules/m_spanningtree/compat.cpp
index 433da9847..17266afe9 100644
--- a/src/modules/m_spanningtree/compat.cpp
+++ b/src/modules/m_spanningtree/compat.cpp
@@ -140,6 +140,19 @@ void TreeSocket::WriteLine(std::string line)
// Insert the source SID (and a space) between the command and the first parameter
line.insert(10, line.substr(1, 4));
}
+ else if (command == "OPERTYPE")
+ {
+ std::string::size_type colon = line.find(':', b);
+ if (colon != std::string::npos)
+ {
+ for (std::string::iterator i = line.begin()+colon; i != line.end(); ++i)
+ {
+ if (*i == ' ')
+ *i = '_';
+ }
+ line.erase(colon, 1);
+ }
+ }
}
}
}
diff --git a/src/modules/m_spanningtree/main.cpp b/src/modules/m_spanningtree/main.cpp
index bfd3f75ea..92d274679 100644
--- a/src/modules/m_spanningtree/main.cpp
+++ b/src/modules/m_spanningtree/main.cpp
@@ -537,7 +537,8 @@ void ModuleSpanningTree::OnUserConnect(LocalUser* user)
if (user->IsOper())
{
params.clear();
- params.push_back(user->oper->name);
+ params.push_back(":");
+ params[0].append(user->oper->name);
Utils->DoOneToMany(user->uuid,"OPERTYPE",params);
}
@@ -775,7 +776,8 @@ void ModuleSpanningTree::OnOper(User* user, const std::string &opertype)
if (user->registered != REG_ALL || !IS_LOCAL(user))
return;
parameterlist params;
- params.push_back(opertype);
+ params.push_back(":");
+ params[0].append(opertype);
Utils->DoOneToMany(user->uuid,"OPERTYPE",params);
}
diff --git a/src/modules/m_spanningtree/netburst.cpp b/src/modules/m_spanningtree/netburst.cpp
index 21404e68e..c22ad3acb 100644
--- a/src/modules/m_spanningtree/netburst.cpp
+++ b/src/modules/m_spanningtree/netburst.cpp
@@ -204,7 +204,7 @@ void TreeSocket::SendUsers()
this->WriteLine(data);
if (u->second->IsOper())
{
- snprintf(data,MAXBUF,":%s OPERTYPE %s", u->second->uuid.c_str(), u->second->oper->name.c_str());
+ snprintf(data,MAXBUF,":%s OPERTYPE :%s", u->second->uuid.c_str(), u->second->oper->name.c_str());
this->WriteLine(data);
}
if (u->second->IsAway())
diff --git a/src/modules/m_spanningtree/opertype.cpp b/src/modules/m_spanningtree/opertype.cpp
index 4772e9222..021100870 100644
--- a/src/modules/m_spanningtree/opertype.cpp
+++ b/src/modules/m_spanningtree/opertype.cpp
@@ -53,7 +53,7 @@ CmdResult CommandOpertype::Handle(const std::vector<std::string>& params, User *
return CMD_SUCCESS;
}
- ServerInstance->SNO->WriteToSnoMask('O',"From %s: User %s (%s@%s) is now an IRC operator of type %s",u->server.c_str(), u->nick.c_str(),u->ident.c_str(), u->host.c_str(), irc::Spacify(opertype.c_str()));
+ ServerInstance->SNO->WriteToSnoMask('O',"From %s: User %s (%s@%s) is now an IRC operator of type %s",u->server.c_str(), u->nick.c_str(),u->ident.c_str(), u->host.c_str(), opertype.c_str());
return CMD_SUCCESS;
}
diff --git a/src/users.cpp b/src/users.cpp
index 9f4060968..3fd558daf 100644
--- a/src/users.cpp
+++ b/src/users.cpp
@@ -402,7 +402,7 @@ bool LocalUser::HasPrivPermission(const std::string &privstr, bool noisy)
}
if (noisy)
- this->WriteNotice("Oper type " + std::string(oper->NameStr()) + " does not have access to priv " + privstr);
+ this->WriteNotice("Oper type " + oper->name + " does not have access to priv " + privstr);
return false;
}
@@ -551,10 +551,10 @@ void User::Oper(OperInfo* info)
}
ServerInstance->SNO->WriteToSnoMask('o',"%s (%s@%s) is now an IRC operator of type %s (using oper '%s')",
- nick.c_str(), ident.c_str(), host.c_str(), oper->NameStr(), opername.c_str());
- this->WriteNumeric(381, "%s :You are now %s %s", nick.c_str(), strchr("aeiouAEIOU", oper->name[0]) ? "an" : "a", oper->NameStr());
+ nick.c_str(), ident.c_str(), host.c_str(), oper->name.c_str(), opername.c_str());
+ this->WriteNumeric(381, "%s :You are now %s %s", nick.c_str(), strchr("aeiouAEIOU", oper->name[0]) ? "an" : "a", oper->name.c_str());
- ServerInstance->Logs->Log("OPER", LOG_DEFAULT, "%s opered as type: %s", GetFullRealHost().c_str(), oper->NameStr());
+ ServerInstance->Logs->Log("OPER", LOG_DEFAULT, "%s opered as type: %s", GetFullRealHost().c_str(), oper->name.c_str());
ServerInstance->Users->all_opers.push_back(this);
// Expand permissions from config for faster lookup