X-Git-Url: https://arthur.barton.de/cgi-bin/gitweb.cgi?p=ngircd-alex.git;a=blobdiff_plain;f=src%2Fngircd%2Firc-metadata.c;h=2a3de1b454cbba48cb0cbe6739f5f49a3350c801;hp=d64ffb2178c8fff634e377a1c82964135cde9956;hb=HEAD;hpb=69ce65bacb0155be5fb9159a3dfc5c8e3390cc0d diff --git a/src/ngircd/irc-metadata.c b/src/ngircd/irc-metadata.c index d64ffb21..00205f16 100644 --- a/src/ngircd/irc-metadata.c +++ b/src/ngircd/irc-metadata.c @@ -1,6 +1,6 @@ /* * ngIRCd -- The Next Generation IRC Daemon - * Copyright (c)2001-2012 Alexander Barton (alex@barton.de) and Contributors. + * Copyright (c)2001-2015 Alexander Barton (alex@barton.de) and Contributors. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -18,21 +18,18 @@ * IRC metadata commands */ -#include "imp.h" #include -#include +#include #include #include "conn-func.h" #include "channel.h" -#include "conn-encoding.h" +#include "irc-macros.h" #include "irc-write.h" #include "log.h" #include "messages.h" #include "parse.h" -#include "tool.h" -#include "exp.h" #include "irc-metadata.h" /** @@ -51,33 +48,33 @@ IRC_METADATA(CLIENT *Client, REQUEST *Req) assert(Client != NULL); assert(Req != NULL); - if (Req->argc != 3) - return IRC_WriteStrClient(Client, ERR_NEEDMOREPARAMS_MSG, - Client_ID(Client), Req->command); + _IRC_REQUIRE_PREFIX_OR_RETURN_(Client, Req) prefix = Client_Search(Req->prefix); if (!prefix) - return IRC_WriteStrClient(Client, ERR_NOSUCHNICK_MSG, + return IRC_WriteErrClient(Client, ERR_NOSUCHNICK_MSG, Client_ID(Client), Req->prefix); target = Client_Search(Req->argv[0]); if (!target) - return IRC_WriteStrClient(Client, ERR_NOSUCHNICK_MSG, + return IRC_WriteErrClient(Client, ERR_NOSUCHNICK_MSG, Client_ID(Client), Req->argv[0]); LogDebug("Got \"METADATA\" command from \"%s\" for client \"%s\": \"%s=%s\".", Client_ID(prefix), Client_ID(target), Req->argv[1], Req->argv[2]); - /* Mark client: it has receiveda a METADATA command */ - if (!strchr(Client_Flags(target), 'M')) { + /* Mark client: it has received a METADATA command */ + if (!Client_HasFlag(target, 'M')) { snprintf(new_flags, sizeof new_flags, "%sM", Client_Flags(target)); Client_SetFlags(target, new_flags); } if (strcasecmp(Req->argv[1], "cloakhost") == 0) { - Client_UpdateCloakedHostname(target, prefix, Req->argv[2]); + /* Set or remove a "cloaked hostname". */ + Client_UpdateCloakedHostname(target, prefix, + *Req->argv[2] ? Req->argv[2] : NULL); if (Client_Conn(target) > NONE && Client_HasMode(target, 'x')) IRC_WriteStrClientPrefix(target, prefix, RPL_HOSTHIDDEN_MSG, Client_ID(target), @@ -96,8 +93,10 @@ IRC_METADATA(CLIENT *Client, REQUEST *Req) Client_SetInfo(target, Req->argv[2]); else if (*Req->argv[2] && strcasecmp(Req->argv[1], "user") == 0) Client_SetUser(target, Req->argv[2], true); + else if (strcasecmp(Req->argv[1], "accountname") == 0) + Client_SetAccountName(target, Req->argv[2]); else if (*Req->argv[2] && strcasecmp(Req->argv[1], "certfp") == 0) - Conn_SetFingerprint(Client_Conn(target), Req->argv[2]); + Conn_SetCertFp(Client_Conn(target), Req->argv[2]); else Log(LOG_WARNING, "Ignored metadata update from \"%s\" for client \"%s\": \"%s=%s\" - unknown key!",