summaryrefslogtreecommitdiff
path: root/src/modules/m_callerid.cpp
diff options
context:
space:
mode:
authorAttila Molnar <attilamolnar@hush.com>2014-01-19 16:48:41 +0100
committerAttila Molnar <attilamolnar@hush.com>2014-01-19 16:48:41 +0100
commitf75a0d5482a09fffc0cc6cfece80bb2f1e4de815 (patch)
treee2031e58b6166c7690e1968be21f2294a4e81ef1 /src/modules/m_callerid.cpp
parent69af56f973b9d31f5ebd7d83e6afedb59bb08c92 (diff)
Use FindNickOnly() in a few more places if a local user is performing an action to prevent UID walking
Diffstat (limited to 'src/modules/m_callerid.cpp')
-rw-r--r--src/modules/m_callerid.cpp17
1 files changed, 14 insertions, 3 deletions
diff --git a/src/modules/m_callerid.cpp b/src/modules/m_callerid.cpp
index 74428f543..09c5c3f24 100644
--- a/src/modules/m_callerid.cpp
+++ b/src/modules/m_callerid.cpp
@@ -197,7 +197,7 @@ public:
/* Even if callerid mode is not set, we let them manage their ACCEPT list so that if they go +g they can
* have a list already setup. */
- std::string tok = parameters[0];
+ const std::string& tok = parameters[0];
if (tok == "*")
{
@@ -207,7 +207,12 @@ public:
}
else if (tok[0] == '-')
{
- User* whotoremove = ServerInstance->FindNick(tok.substr(1));
+ User* whotoremove;
+ if (IS_LOCAL(user))
+ whotoremove = ServerInstance->FindNickOnly(tok.substr(1));
+ else
+ whotoremove = ServerInstance->FindNick(tok.substr(1));
+
if (whotoremove)
return (RemoveAccept(user, whotoremove) ? CMD_SUCCESS : CMD_FAILURE);
else
@@ -215,7 +220,13 @@ public:
}
else
{
- User* whotoadd = ServerInstance->FindNick(tok[0] == '+' ? tok.substr(1) : tok);
+ const std::string target = (tok[0] == '+' ? tok.substr(1) : tok);
+ User* whotoadd;
+ if (IS_LOCAL(user))
+ whotoadd = ServerInstance->FindNickOnly(target);
+ else
+ whotoadd = ServerInstance->FindNick(target);
+
if ((whotoadd) && (whotoadd->registered == REG_ALL) && (!whotoadd->quitting) && (!IS_SERVER(whotoadd)))
return (AddAccept(user, whotoadd) ? CMD_SUCCESS : CMD_FAILURE);
else