void unserialize(SerializeFormat format, Extensible* container, const std::string& value)
{
+ void* old = get_raw(container);
+ if (old)
+ this->free(old);
callerid_data* dat = new callerid_data;
+ set_raw(container, dat);
+
irc::commasepstream s(value);
std::string tok;
if (s.GetToken(tok))
}
}
}
-
- void* old = set_raw(container, dat);
- if (old)
- this->free(old);
}
callerid_data* get(User* user, bool create)
extInfo(Creator)
{
allow_empty_last_param = false;
- syntax = "{[+|-]<nicks>}|*}";
+ syntax = "*|(+|-)<nick>[,(+|-)<nick> ...]";
TRANSLATE2(TR_CUSTOM, TR_END);
}
/* 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 == "*")
{
}
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
}
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