diff options
author | Attila Molnar <attilamolnar@hush.com> | 2014-01-19 16:48:41 +0100 |
---|---|---|
committer | Attila Molnar <attilamolnar@hush.com> | 2014-01-19 16:48:41 +0100 |
commit | f75a0d5482a09fffc0cc6cfece80bb2f1e4de815 (patch) | |
tree | e2031e58b6166c7690e1968be21f2294a4e81ef1 /src/modules/m_callerid.cpp | |
parent | 69af56f973b9d31f5ebd7d83e6afedb59bb08c92 (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.cpp | 17 |
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 |