repo: ngircd action: commit revision: path_from: revision_from: 904c8a4375cb9deed64007b06c6a7ba42313d93d: path_to: revision_to:
commit 904c8a4375cb9deed64007b06c6a7ba42313d93d Author: Alexander BartonDate: Tue Aug 6 23:37:21 2013 +0200 Introduce new function IRC_WriteErrClient() This function is used to send "error messages", including numerics, back to clients and to automatically enforce a 2 second penalty. With this patch, all error results enforces a delay for the client. All callers of IRC_WriteStrClient(ERR_xxx) have been converted. Please note that this patch prolongs the time "make check" needs to complete its tests, because of lots of new enforced penalties ... diff --git a/src/ngircd/channel.c b/src/ngircd/channel.c
--- a/src/ngircd/channel.c
+++ b/src/ngircd/channel.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-2013 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
@@ -223,7 +223,7 @@ Channel_Join( CLIENT *Client, const char *Name )
/* Check that the channel name is valid */
if (! Channel_IsValidName(Name)) {
- IRC_WriteStrClient(Client, ERR_NOSUCHCHANNEL_MSG,
+ IRC_WriteErrClient(Client, ERR_NOSUCHCHANNEL_MSG,
Client_ID(Client), Name);
return false;
}
@@ -268,14 +268,14 @@ Channel_Part(CLIENT * Client, CLIENT * Origin, const char *Name, const char *Rea
/* Check that specified channel exists */
chan = Channel_Search(Name);
if (!chan) {
- IRC_WriteStrClient(Client, ERR_NOSUCHCHANNEL_MSG,
+ IRC_WriteErrClient(Client, ERR_NOSUCHCHANNEL_MSG,
Client_ID(Client), Name);
return false;
}
/* Check that the client is in the channel */
if (!Get_Cl2Chan(chan, Client)) {
- IRC_WriteStrClient(Client, ERR_NOTONCHANNEL_MSG,
+ IRC_WriteErrClient(Client, ERR_NOTONCHANNEL_MSG,
Client_ID(Client), Name);
return false;
}
@@ -309,9 +309,9 @@ Channel_Kick(CLIENT *Peer, CLIENT *Target, CLIENT *Origin, const char *Name,
/* Check that channel exists */
chan = Channel_Search( Name );
- if( ! chan )
- {
- IRC_WriteStrClient( Origin, ERR_NOSUCHCHANNEL_MSG, Client_ID( Origin ), Name );
+ if (!chan) {
+ IRC_WriteErrClient(Origin, ERR_NOSUCHCHANNEL_MSG,
+ Client_ID(Origin), Name);
return;
}
@@ -319,15 +319,15 @@ Channel_Kick(CLIENT *Peer, CLIENT *Target, CLIENT *Origin, const char *Name,
Client_Type(Origin) != CLIENT_SERVICE) {
/* Check that user is on the specified channel */
if (!Channel_IsMemberOf(chan, Origin)) {
- IRC_WriteStrClient( Origin, ERR_NOTONCHANNEL_MSG,
- Client_ID(Origin), Name);
+ IRC_WriteErrClient(Origin, ERR_NOTONCHANNEL_MSG,
+ Client_ID(Origin), Name);
return;
}
}
/* Check that the client to be kicked is on the specified channel */
if (!Channel_IsMemberOf(chan, Target)) {
- IRC_WriteStrClient(Origin, ERR_USERNOTINCHANNEL_MSG,
+ IRC_WriteErrClient(Origin, ERR_USERNOTINCHANNEL_MSG,
Client_ID(Origin), Client_ID(Target), Name );
return;
}
@@ -339,7 +339,7 @@ Channel_Kick(CLIENT *Peer, CLIENT *Target, CLIENT *Origin, const char *Name,
|| Client_HasMode(Target, 'q')
|| Client_Type(Target) == CLIENT_SERVICE)
&& !Client_HasMode(Origin, 'o')) {
- IRC_WriteStrClient(Origin, ERR_KICKDENY_MSG,
+ IRC_WriteErrClient(Origin, ERR_KICKDENY_MSG,
Client_ID(Origin), Name,
Client_ID(Target));
return;
@@ -370,8 +370,8 @@ Channel_Kick(CLIENT *Peer, CLIENT *Target, CLIENT *Origin, const char *Name,
can_kick = true;
if(!can_kick) {
- IRC_WriteStrClient(Origin, ERR_CHANOPPRIVTOOLOW_MSG,
- Client_ID(Origin), Name);
+ IRC_WriteErrClient(Origin, ERR_CHANOPPRIVTOOLOW_MSG,
+ Client_ID(Origin), Name);
return;
}
}
@@ -921,10 +921,10 @@ Channel_Write(CHANNEL *Chan, CLIENT *From, CLIENT *Client, const char *Command,
if (! SendErrors)
return CONNECTED; /* no error, see RFC 2812 */
if (Channel_HasMode(Chan, 'M'))
- return IRC_WriteStrClient(From, ERR_NEEDREGGEDNICK_MSG,
+ return IRC_WriteErrClient(From, ERR_NEEDREGGEDNICK_MSG,
Client_ID(From), Channel_Name(Chan));
else
- return IRC_WriteStrClient(From, ERR_CANNOTSENDTOCHAN_MSG,
+ return IRC_WriteErrClient(From, ERR_CANNOTSENDTOCHAN_MSG,
Client_ID(From), Channel_Name(Chan));
}
diff --git a/src/ngircd/client.c b/src/ngircd/client.c
--- a/src/ngircd/client.c
+++ b/src/ngircd/client.c
@@ -1,6 +1,6 @@
/*
* ngIRCd -- The Next Generation IRC Daemon
- * Copyright (c)2001-2012 Alexander Barton (alex@barton.de)
+ * Copyright (c)2001-2013 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
@@ -991,11 +991,11 @@ Client_CheckNick(CLIENT *Client, char *Nick)
if (!Client_IsValidNick(Nick)) {
if (strlen(Nick ) >= Conf_MaxNickLength)
- IRC_WriteStrClient(Client, ERR_NICKNAMETOOLONG_MSG,
+ IRC_WriteErrClient(Client, ERR_NICKNAMETOOLONG_MSG,
Client_ID(Client), Nick,
Conf_MaxNickLength - 1);
else
- IRC_WriteStrClient(Client, ERR_ERRONEUSNICKNAME_MSG,
+ IRC_WriteErrClient(Client, ERR_ERRONEUSNICKNAME_MSG,
Client_ID(Client), Nick);
return false;
}
@@ -1004,7 +1004,7 @@ Client_CheckNick(CLIENT *Client, char *Nick)
&& Client_Type(Client) != CLIENT_SERVICE) {
/* Make sure that this isn't a restricted/forbidden nickname */
if (Conf_NickIsBlocked(Nick)) {
- IRC_WriteStrClient(Client, ERR_FORBIDDENNICKNAME_MSG,
+ IRC_WriteErrClient(Client, ERR_FORBIDDENNICKNAME_MSG,
Client_ID(Client), Nick);
return false;
}
@@ -1012,7 +1012,7 @@ Client_CheckNick(CLIENT *Client, char *Nick)
/* Nickname already registered? */
if (Client_Search(Nick)) {
- IRC_WriteStrClient(Client, ERR_NICKNAMEINUSE_MSG,
+ IRC_WriteErrClient(Client, ERR_NICKNAMEINUSE_MSG,
Client_ID(Client), Nick);
return false;
}
@@ -1033,7 +1033,8 @@ Client_CheckID( CLIENT *Client, char *ID )
/* ID too long? */
if (strlen(ID) > CLIENT_ID_LEN) {
- IRC_WriteStrClient(Client, ERR_ERRONEUSNICKNAME_MSG, Client_ID(Client), ID);
+ IRC_WriteErrClient(Client, ERR_ERRONEUSNICKNAME_MSG,
+ Client_ID(Client), ID);
return false;
}
diff --git a/src/ngircd/irc-cap.c b/src/ngircd/irc-cap.c
--- a/src/ngircd/irc-cap.c +++ b/src/ngircd/irc-cap.c @@ -274,7 +274,7 @@ IRC_CAP(CLIENT *Client, REQUEST *Req) return Handle_CAP_ACK(Client, Req->argv[1]); } - return IRC_WriteStrClient(Client, ERR_INVALIDCAP_MSG, + return IRC_WriteErrClient(Client, ERR_INVALIDCAP_MSG, Client_ID(Client), Req->argv[0]); } diff --git a/src/ngircd/irc-channel.c b/src/ngircd/irc-channel.c
--- a/src/ngircd/irc-channel.c
+++ b/src/ngircd/irc-channel.c
@@ -1,6 +1,6 @@
/*
* ngIRCd -- The Next Generation IRC Daemon
- * Copyright (c)2001-2013 Alexander Barton (alex@barton.de)
+ * Copyright (c)2001-2013 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
@@ -93,14 +93,14 @@ join_allowed(CLIENT *Client, CHANNEL *chan, const char *channame,
if (is_banned && !is_invited && !is_exception) {
/* Client is banned from channel (and not on invite list) */
- IRC_WriteStrClient(Client, ERR_BANNEDFROMCHAN_MSG,
+ IRC_WriteErrClient(Client, ERR_BANNEDFROMCHAN_MSG,
Client_ID(Client), channame);
return false;
}
if (Channel_HasMode(chan, 'i') && !is_invited) {
/* Channel is "invite-only" and client is not on invite list */
- IRC_WriteStrClient(Client, ERR_INVITEONLYCHAN_MSG,
+ IRC_WriteErrClient(Client, ERR_INVITEONLYCHAN_MSG,
Client_ID(Client), channame);
return false;
}
@@ -108,7 +108,7 @@ join_allowed(CLIENT *Client, CHANNEL *chan, const char *channame,
if (!Channel_CheckKey(chan, Client, key ? key : "")) {
/* Channel is protected by a channel key and the client
* didn't specify the correct one */
- IRC_WriteStrClient(Client, ERR_BADCHANNELKEY_MSG,
+ IRC_WriteErrClient(Client, ERR_BADCHANNELKEY_MSG,
Client_ID(Client), channame);
return false;
}
@@ -116,7 +116,7 @@ join_allowed(CLIENT *Client, CHANNEL *chan, const char *channame,
if (Channel_HasMode(chan, 'l') &&
(Channel_MaxUsers(chan) <= Channel_MemberCount(chan))) {
/* There are more clints joined to this channel than allowed */
- IRC_WriteStrClient(Client, ERR_CHANNELISFULL_MSG,
+ IRC_WriteErrClient(Client, ERR_CHANNELISFULL_MSG,
Client_ID(Client), channame);
return false;
}
@@ -124,21 +124,21 @@ join_allowed(CLIENT *Client, CHANNEL *chan, const char *channame,
if (Channel_HasMode(chan, 'z') && !Conn_UsesSSL(Client_Conn(Client))) {
/* Only "secure" clients are allowed, but clients doesn't
* use SSL encryption */
- IRC_WriteStrClient(Client, ERR_SECURECHANNEL_MSG,
+ IRC_WriteErrClient(Client, ERR_SECURECHANNEL_MSG,
Client_ID(Client), channame);
return false;
}
if (Channel_HasMode(chan, 'O') && !Client_OperByMe(Client)) {
/* Only IRC operators are allowed! */
- IRC_WriteStrClient(Client, ERR_OPONLYCHANNEL_MSG,
+ IRC_WriteErrClient(Client, ERR_OPONLYCHANNEL_MSG,
Client_ID(Client), channame);
return false;
}
if (Channel_HasMode(chan, 'R') && !Client_HasMode(Client, 'R')) {
/* Only registered users are allowed! */
- IRC_WriteStrClient(Client, ERR_REGONLYCHANNEL_MSG,
+ IRC_WriteErrClient(Client, ERR_REGONLYCHANNEL_MSG,
Client_ID(Client), channame);
return false;
}
@@ -326,7 +326,7 @@ IRC_JOIN( CLIENT *Client, REQUEST *Req )
/* Make sure that "channame" is not the empty string ("JOIN :") */
if (! channame)
- return IRC_WriteStrClient(Client, ERR_NEEDMOREPARAMS_MSG,
+ return IRC_WriteErrClient(Client, ERR_NEEDMOREPARAMS_MSG,
Client_ID(Client), Req->command);
while (channame) {
@@ -344,7 +344,7 @@ IRC_JOIN( CLIENT *Client, REQUEST *Req )
chan = Channel_Search(channame);
if (!chan && !strchr(Conf_AllowedChannelTypes, channame[0])) {
/* channel must be created, but forbidden by config */
- IRC_WriteStrClient(Client, ERR_NOSUCHCHANNEL_MSG,
+ IRC_WriteErrClient(Client, ERR_NOSUCHCHANNEL_MSG,
Client_ID(Client), channame);
goto join_next;
}
@@ -360,7 +360,7 @@ IRC_JOIN( CLIENT *Client, REQUEST *Req )
/* Test if the user has reached the channel limit */
if ((Conf_MaxJoins > 0) &&
(Channel_CountForUser(Client) >= Conf_MaxJoins)) {
- if (!IRC_WriteStrClient(Client,
+ if (!IRC_WriteErrClient(Client,
ERR_TOOMANYCHANNELS_MSG,
Client_ID(Client), channame))
return DISCONNECTED;
@@ -447,7 +447,7 @@ IRC_PART(CLIENT * Client, REQUEST * Req)
/* Make sure that "chan" is not the empty string ("PART :") */
if (! chan)
- return IRC_WriteStrClient(Client, ERR_NEEDMOREPARAMS_MSG,
+ return IRC_WriteErrClient(Client, ERR_NEEDMOREPARAMS_MSG,
Client_ID(Client), Req->command);
while (chan) {
@@ -489,7 +489,7 @@ IRC_TOPIC( CLIENT *Client, REQUEST *Req )
chan = Channel_Search(Req->argv[0]);
if (!chan)
- return IRC_WriteStrClient(from, ERR_NOSUCHCHANNEL_MSG,
+ return IRC_WriteErrClient(from, ERR_NOSUCHCHANNEL_MSG,
Client_ID(from), Req->argv[0]);
/* Only remote servers and channel members are allowed to change the
@@ -499,7 +499,7 @@ IRC_TOPIC( CLIENT *Client, REQUEST *Req )
topic_power = Client_HasMode(from, 'o');
if (!Channel_IsMemberOf(chan, from)
&& !(Conf_OperCanMode && topic_power))
- return IRC_WriteStrClient(from, ERR_NOTONCHANNEL_MSG,
+ return IRC_WriteErrClient(from, ERR_NOTONCHANNEL_MSG,
Client_ID(from), Req->argv[0]);
} else
topic_power = true;
@@ -535,7 +535,7 @@ IRC_TOPIC( CLIENT *Client, REQUEST *Req )
!Channel_UserHasMode(chan, from, 'o') &&
!Channel_UserHasMode(chan, from, 'a') &&
!Channel_UserHasMode(chan, from, 'q'))
- return IRC_WriteStrClient(from, ERR_CHANOPRIVSNEEDED_MSG,
+ return IRC_WriteErrClient(from, ERR_CHANOPRIVSNEEDED_MSG,
Client_ID(from),
Channel_Name(chan));
}
@@ -595,7 +595,7 @@ IRC_LIST( CLIENT *Client, REQUEST *Req )
/* Forward to other server? */
target = Client_Search(Req->argv[1]);
if (! target || Client_Type(target) != CLIENT_SERVER)
- return IRC_WriteStrClient(from, ERR_NOSUCHSERVER_MSG,
+ return IRC_WriteErrClient(from, ERR_NOSUCHSERVER_MSG,
Client_ID(Client),
Req->argv[1]);
@@ -667,7 +667,7 @@ IRC_CHANINFO( CLIENT *Client, REQUEST *Req )
/* Bad number of parameters? */
if (Req->argc < 2 || Req->argc == 4 || Req->argc > 5)
- return IRC_WriteStrClient(Client, ERR_NEEDMOREPARAMS_MSG,
+ return IRC_WriteErrClient(Client, ERR_NEEDMOREPARAMS_MSG,
Client_ID(Client), Req->command);
/* Compatibility kludge */
diff --git a/src/ngircd/irc-encoding.c b/src/ngircd/irc-encoding.c
--- a/src/ngircd/irc-encoding.c +++ b/src/ngircd/irc-encoding.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-2013 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 @@ -49,14 +49,14 @@ IRC_CHARCONV(CLIENT *Client, REQUEST *Req) assert (Req != NULL); if (Req->argc != 1) - return IRC_WriteStrClient(Client, ERR_NEEDMOREPARAMS_MSG, + return IRC_WriteErrClient(Client, ERR_NEEDMOREPARAMS_MSG, Client_ID(Client), Req->command); strlcpy(encoding, Req->argv[0], sizeof(encoding)); ngt_UpperStr(encoding); if (!Conn_SetEncoding(Client_Conn(Client), encoding)) - return IRC_WriteStrClient(Client, ERR_IP_CHARCONV_MSG, + return IRC_WriteErrClient(Client, ERR_IP_CHARCONV_MSG, Client_ID(Client), encoding); return IRC_WriteStrClient(Client, RPL_IP_CHARCONV_MSG, diff --git a/src/ngircd/irc-info.c b/src/ngircd/irc-info.c
--- a/src/ngircd/irc-info.c
+++ b/src/ngircd/irc-info.c
@@ -903,7 +903,7 @@ IRC_STATS( CLIENT *Client, REQUEST *Req )
case 'k': /* Server-local bans ("K-Lines") */
case 'K':
if (!Client_HasMode(from, 'o'))
- return IRC_WriteStrClient(from, ERR_NOPRIVILEGES_MSG,
+ return IRC_WriteErrClient(from, ERR_NOPRIVILEGES_MSG,
Client_ID(from));
if (query == 'g' || query == 'G')
list = Class_GetList(CLASS_GLINE);
@@ -997,9 +997,7 @@ IRC_SUMMON(CLIENT * Client, UNUSED REQUEST * Req)
{
assert(Client != NULL);
- IRC_SetPenalty(Client, 1);
-
- return IRC_WriteStrClient(Client, ERR_SUMMONDISABLED_MSG,
+ return IRC_WriteErrClient(Client, ERR_SUMMONDISABLED_MSG,
Client_ID(Client));
} /* IRC_SUMMON */
@@ -1101,9 +1099,7 @@ IRC_USERS(CLIENT * Client, UNUSED REQUEST * Req)
{
assert(Client != NULL);
- IRC_SetPenalty(Client, 1);
-
- return IRC_WriteStrClient(Client, ERR_USERSDISABLED_MSG,
+ return IRC_WriteErrClient(Client, ERR_USERSDISABLED_MSG,
Client_ID(Client));
} /* IRC_USERS */
@@ -1168,7 +1164,7 @@ IRC_WHO(CLIENT *Client, REQUEST *Req)
only_ops = true;
#ifdef STRICT_RFC
else
- return IRC_WriteStrClient(Client,
+ return IRC_WriteErrClient(Client,
ERR_NEEDMOREPARAMS_MSG,
Client_ID(Client),
Req->command);
@@ -1217,7 +1213,7 @@ IRC_WHOIS( CLIENT *Client, REQUEST *Req )
/* Bad number of parameters? */
if (Req->argc < 1 || Req->argc > 2)
- return IRC_WriteStrClient(Client, ERR_NEEDMOREPARAMS_MSG,
+ return IRC_WriteErrClient(Client, ERR_NEEDMOREPARAMS_MSG,
Client_ID(Client), Req->command);
_IRC_GET_SENDER_OR_RETURN_(from, Req, Client)
@@ -1259,7 +1255,7 @@ IRC_WHOIS( CLIENT *Client, REQUEST *Req )
if (!IRC_WHOIS_SendReply(Client, from, c))
return DISCONNECTED;
} else {
- if (!IRC_WriteStrClient(Client,
+ if (!IRC_WriteErrClient(Client,
ERR_NOSUCHNICK_MSG,
Client_ID(Client),
query))
@@ -1269,7 +1265,7 @@ IRC_WHOIS( CLIENT *Client, REQUEST *Req )
}
if (got_wildcard) {
/* we already handled one wildcard query */
- if (!IRC_WriteStrClient(Client, ERR_NOSUCHNICK_MSG,
+ if (!IRC_WriteErrClient(Client, ERR_NOSUCHNICK_MSG,
Client_ID(Client), query))
return DISCONNECTED;
continue;
@@ -1293,7 +1289,7 @@ IRC_WHOIS( CLIENT *Client, REQUEST *Req )
}
if (match_count == 0)
- IRC_WriteStrClient(Client, ERR_NOSUCHNICK_MSG,
+ IRC_WriteErrClient(Client, ERR_NOSUCHNICK_MSG,
Client_ID(Client),
Req->argv[Req->argc - 1]);
}
@@ -1326,7 +1322,7 @@ IRC_WHOWAS( CLIENT *Client, REQUEST *Req )
/* Wrong number of parameters? */
if (Req->argc < 1)
- return IRC_WriteStrClient(Client, ERR_NONICKNAMEGIVEN_MSG,
+ return IRC_WriteErrClient(Client, ERR_NONICKNAMEGIVEN_MSG,
Client_ID(Client));
_IRC_ARGC_LE_OR_RETURN_(Client, Req, 3)
@@ -1381,7 +1377,7 @@ IRC_WHOWAS( CLIENT *Client, REQUEST *Req )
break;
} while (i != last);
- if (nc == 0 && !IRC_WriteStrClient(prefix, ERR_WASNOSUCHNICK_MSG,
+ if (nc == 0 && !IRC_WriteErrClient(prefix, ERR_WASNOSUCHNICK_MSG,
Client_ID(prefix), nick))
return DISCONNECTED;
}
@@ -1471,7 +1467,7 @@ IRC_Show_MOTD( CLIENT *Client )
len_tot = array_bytes(&Conf_Motd);
if (len_tot == 0 && !Conn_UsesSSL(Client_Conn(Client)))
- return IRC_WriteStrClient(Client, ERR_NOMOTD_MSG, Client_ID(Client));
+ return IRC_WriteErrClient(Client, ERR_NOMOTD_MSG, Client_ID(Client));
if (!IRC_WriteStrClient(Client, RPL_MOTDSTART_MSG, Client_ID(Client),
Client_ID(Client_ThisServer())))
diff --git a/src/ngircd/irc-login.c b/src/ngircd/irc-login.c
--- a/src/ngircd/irc-login.c
+++ b/src/ngircd/irc-login.c
@@ -61,7 +61,7 @@ IRC_PASS( CLIENT *Client, REQUEST *Req )
/* Return an error if this is not a local client */
if (Client_Conn(Client) <= NONE)
- return IRC_WriteStrClient(Client, ERR_UNKNOWNCOMMAND_MSG,
+ return IRC_WriteErrClient(Client, ERR_UNKNOWNCOMMAND_MSG,
Client_ID(Client), Req->command);
if (Client_Type(Client) == CLIENT_UNKNOWN && Req->argc == 1) {
@@ -81,13 +81,11 @@ IRC_PASS( CLIENT *Client, REQUEST *Req )
} else if (Client_Type(Client) == CLIENT_UNKNOWN ||
Client_Type(Client) == CLIENT_UNKNOWNSERVER) {
/* Unregistered connection, but wrong number of arguments: */
- IRC_SetPenalty(Client, 2);
- return IRC_WriteStrClient(Client, ERR_NEEDMOREPARAMS_MSG,
+ return IRC_WriteErrClient(Client, ERR_NEEDMOREPARAMS_MSG,
Client_ID(Client), Req->command);
} else {
/* Registered connection, PASS command is not allowed! */
- IRC_SetPenalty(Client, 2);
- return IRC_WriteStrClient(Client, ERR_ALREADYREGISTRED_MSG,
+ return IRC_WriteErrClient(Client, ERR_ALREADYREGISTRED_MSG,
Client_ID(Client));
}
@@ -203,18 +201,16 @@ IRC_NICK( CLIENT *Client, REQUEST *Req )
if (Client_Type(Client) == CLIENT_SERVER) {
target = Client_Search(Req->prefix);
if (!target)
- return IRC_WriteStrClient( Client,
- ERR_NOSUCHNICK_MSG,
- Client_ID( Client ),
- Req->argv[0] );
+ return IRC_WriteErrClient(Client,
+ ERR_NOSUCHNICK_MSG,
+ Client_ID(Client),
+ Req->argv[0]);
} else {
/* Is this a restricted client? */
- if (Client_HasMode(Client, 'r')) {
- IRC_SetPenalty(Client, 2);
- return IRC_WriteStrClient( Client,
- ERR_RESTRICTED_MSG,
- Client_ID( Client ));
- }
+ if (Client_HasMode(Client, 'r'))
+ return IRC_WriteErrClient(Client,
+ ERR_RESTRICTED_MSG,
+ Client_ID(Client));
target = Client;
}
@@ -275,7 +271,7 @@ IRC_NICK( CLIENT *Client, REQUEST *Req )
/* Bad number of parameters? */
if (Req->argc != 2 && Req->argc != 7)
- return IRC_WriteStrClient(Client, ERR_NEEDMOREPARAMS_MSG,
+ return IRC_WriteErrClient(Client, ERR_NEEDMOREPARAMS_MSG,
Client_ID(Client), Req->command);
if (Req->argc >= 7) {
@@ -343,7 +339,7 @@ IRC_NICK( CLIENT *Client, REQUEST *Req )
return CONNECTED;
}
else
- return IRC_WriteStrClient(Client, ERR_ALREADYREGISTRED_MSG,
+ return IRC_WriteErrClient(Client, ERR_ALREADYREGISTRED_MSG,
Client_ID(Client));
} /* IRC_NICK */
@@ -372,7 +368,7 @@ IRC_SVSNICK(CLIENT *Client, REQUEST *Req)
/* Search the target */
target = Client_Search(Req->argv[0]);
if (!target || Client_Type(target) != CLIENT_USER) {
- return IRC_WriteStrClient(Client, ERR_NOSUCHNICK_MSG,
+ return IRC_WriteErrClient(Client, ERR_NOSUCHNICK_MSG,
Client_ID(Client), Req->argv[0]);
}
@@ -470,7 +466,7 @@ IRC_USER(CLIENT * Client, REQUEST * Req)
c = Client_Search(Req->prefix);
if (!c)
- return IRC_WriteStrClient(Client, ERR_NOSUCHNICK_MSG,
+ return IRC_WriteErrClient(Client, ERR_NOSUCHNICK_MSG,
Client_ID(Client),
Req->prefix);
@@ -490,13 +486,11 @@ IRC_USER(CLIENT * Client, REQUEST * Req)
return CONNECTED;
} else if (Client_Type(Client) == CLIENT_USER) {
/* Already registered connection */
- IRC_SetPenalty(Client, 2);
- return IRC_WriteStrClient(Client, ERR_ALREADYREGISTRED_MSG,
+ return IRC_WriteErrClient(Client, ERR_ALREADYREGISTRED_MSG,
Client_ID(Client));
} else {
/* Unexpected/invalid connection state? */
- IRC_SetPenalty(Client, 2);
- return IRC_WriteStrClient(Client, ERR_NOTREGISTERED_MSG,
+ return IRC_WriteErrClient(Client, ERR_NOTREGISTERED_MSG,
Client_ID(Client));
}
} /* IRC_USER */
@@ -523,16 +517,14 @@ IRC_SERVICE(CLIENT *Client, REQUEST *Req)
assert(Req != NULL);
if (Client_Type(Client) != CLIENT_GOTPASS &&
- Client_Type(Client) != CLIENT_SERVER) {
- IRC_SetPenalty(Client, 2);
- return IRC_WriteStrClient(Client, ERR_ALREADYREGISTRED_MSG,
+ Client_Type(Client) != CLIENT_SERVER)
+ return IRC_WriteErrClient(Client, ERR_ALREADYREGISTRED_MSG,
Client_ID(Client));
- }
_IRC_ARGC_EQ_OR_RETURN_(Client, Req, 6)
if (Client_Type(Client) != CLIENT_SERVER)
- return IRC_WriteStrClient(Client, ERR_ERRONEUSNICKNAME_MSG,
+ return IRC_WriteErrClient(Client, ERR_ERRONEUSNICKNAME_MSG,
Client_ID(Client), Req->argv[0]);
nick = Req->argv[0];
@@ -609,7 +601,7 @@ IRC_WEBIRC(CLIENT *Client, REQUEST *Req)
_IRC_ARGC_EQ_OR_RETURN_(Client, Req, 4)
if (!Conf_WebircPwd[0] || strcmp(Req->argv[0], Conf_WebircPwd) != 0)
- return IRC_WriteStrClient(Client, ERR_PASSWDMISMATCH_MSG,
+ return IRC_WriteErrClient(Client, ERR_PASSWDMISMATCH_MSG,
Client_ID(Client));
LogDebug("Connection %d: got valid WEBIRC command: user=%s, host=%s, ip=%s",
@@ -715,7 +707,7 @@ IRC_PING(CLIENT *Client, REQUEST *Req)
assert(Req != NULL);
if (Req->argc < 1)
- return IRC_WriteStrClient(Client, ERR_NOORIGIN_MSG,
+ return IRC_WriteErrClient(Client, ERR_NOORIGIN_MSG,
Client_ID(Client));
#ifdef STRICT_RFC
/* Don't ignore additional arguments when in "strict" mode */
@@ -727,7 +719,7 @@ IRC_PING(CLIENT *Client, REQUEST *Req)
target = Client_Search(Req->argv[1]);
if (!target || Client_Type(target) != CLIENT_SERVER)
- return IRC_WriteStrClient(Client, ERR_NOSUCHSERVER_MSG,
+ return IRC_WriteErrClient(Client, ERR_NOSUCHSERVER_MSG,
Client_ID(Client), Req->argv[1]);
if (target != Client_ThisServer()) {
@@ -737,7 +729,7 @@ IRC_PING(CLIENT *Client, REQUEST *Req)
else
from = Client;
if (!from)
- return IRC_WriteStrClient(Client,
+ return IRC_WriteErrClient(Client,
ERR_NOSUCHSERVER_MSG,
Client_ID(Client), Req->prefix);
@@ -755,7 +747,7 @@ IRC_PING(CLIENT *Client, REQUEST *Req)
} else
from = Client_ThisServer();
if (!from)
- return IRC_WriteStrClient(Client, ERR_NOSUCHSERVER_MSG,
+ return IRC_WriteErrClient(Client, ERR_NOSUCHSERVER_MSG,
Client_ID(Client), Req->prefix);
Log(LOG_DEBUG, "Connection %d: got PING, sending PONG ...",
@@ -795,7 +787,7 @@ IRC_PONG(CLIENT *Client, REQUEST *Req)
/* Wrong number of arguments? */
if (Req->argc < 1) {
if (Client_Type(Client) == CLIENT_USER)
- return IRC_WriteStrClient(Client, ERR_NOORIGIN_MSG,
+ return IRC_WriteErrClient(Client, ERR_NOORIGIN_MSG,
Client_ID(Client));
else
return CONNECTED;
@@ -808,7 +800,7 @@ IRC_PONG(CLIENT *Client, REQUEST *Req)
if (Req->argc == 2 && Client_Type(Client) == CLIENT_SERVER) {
target = Client_Search(Req->argv[0]);
if (!target)
- return IRC_WriteStrClient(Client, ERR_NOSUCHSERVER_MSG,
+ return IRC_WriteErrClient(Client, ERR_NOSUCHSERVER_MSG,
Client_ID(Client), Req->argv[0]);
from = Client_Search(Req->prefix);
@@ -816,7 +808,7 @@ IRC_PONG(CLIENT *Client, REQUEST *Req)
if (target != Client_ThisServer() && target != from) {
/* Ok, we have to forward the message. */
if (!from)
- return IRC_WriteStrClient(Client,
+ return IRC_WriteErrClient(Client,
ERR_NOSUCHSERVER_MSG,
Client_ID(Client), Req->prefix);
diff --git a/src/ngircd/irc-metadata.c b/src/ngircd/irc-metadata.c
--- 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-2013 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
@@ -52,17 +52,17 @@ IRC_METADATA(CLIENT *Client, REQUEST *Req)
assert(Req != NULL);
if (Req->argc != 3)
- return IRC_WriteStrClient(Client, ERR_NEEDMOREPARAMS_MSG,
+ return IRC_WriteErrClient(Client, ERR_NEEDMOREPARAMS_MSG,
Client_ID(Client), Req->command);
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\".",
diff --git a/src/ngircd/irc-mode.c b/src/ngircd/irc-mode.c
--- a/src/ngircd/irc-mode.c
+++ b/src/ngircd/irc-mode.c
@@ -85,7 +85,7 @@ IRC_MODE( CLIENT *Client, REQUEST *Req )
return Channel_Mode(Client, Req, origin, chan);
/* No target found! */
- return IRC_WriteStrClient(Client, ERR_NOSUCHNICK_MSG,
+ return IRC_WriteErrClient(Client, ERR_NOSUCHNICK_MSG,
Client_ID(Client), Req->argv[0]);
} /* IRC_MODE */
@@ -131,7 +131,7 @@ Client_Mode( CLIENT *Client, REQUEST *Req, CLIENT *Origin, CLIENT *Target )
if (Client_Type(Client) == CLIENT_USER) {
/* Users are only allowed to manipulate their own modes! */
if (Target != Client)
- return IRC_WriteStrClient(Client,
+ return IRC_WriteErrClient(Client,
ERR_USERSDONTMATCH_MSG,
Client_ID(Client));
}
@@ -153,7 +153,7 @@ Client_Mode( CLIENT *Client, REQUEST *Req, CLIENT *Origin, CLIENT *Target )
set = false;
strcpy(the_modes, "-");
} else
- return IRC_WriteStrClient(Origin, ERR_UMODEUNKNOWNFLAG_MSG,
+ return IRC_WriteErrClient(Origin, ERR_UMODEUNKNOWNFLAG_MSG,
Client_ID(Origin));
x[1] = '\0';
@@ -212,13 +212,13 @@ Client_Mode( CLIENT *Client, REQUEST *Req, CLIENT *Origin, CLIENT *Target )
x[0] = 'a';
Client_SetAway(Origin, DEFAULT_AWAY_MSG);
} else
- ok = IRC_WriteStrClient(Origin,
+ ok = IRC_WriteErrClient(Origin,
ERR_NOPRIVILEGES_MSG,
Client_ID(Origin));
break;
case 'B': /* Bot */
if (Client_HasMode(Client, 'r'))
- ok = IRC_WriteStrClient(Origin,
+ ok = IRC_WriteErrClient(Origin,
ERR_RESTRICTED_MSG,
Client_ID(Origin));
else
@@ -230,7 +230,7 @@ Client_Mode( CLIENT *Client, REQUEST *Req, CLIENT *Origin, CLIENT *Target )
|| Client_OperByMe(Origin))
x[0] = 'c';
else
- ok = IRC_WriteStrClient(Origin,
+ ok = IRC_WriteErrClient(Origin,
ERR_NOPRIVILEGES_MSG,
Client_ID(Origin));
break;
@@ -239,7 +239,7 @@ Client_Mode( CLIENT *Client, REQUEST *Req, CLIENT *Origin, CLIENT *Target )
Client_SetOperByMe(Target, false);
x[0] = 'o';
} else
- ok = IRC_WriteStrClient(Origin,
+ ok = IRC_WriteErrClient(Origin,
ERR_NOPRIVILEGES_MSG,
Client_ID(Origin));
break;
@@ -248,7 +248,7 @@ Client_Mode( CLIENT *Client, REQUEST *Req, CLIENT *Origin, CLIENT *Target )
|| Client_OperByMe(Origin))
x[0] = 'q';
else
- ok = IRC_WriteStrClient(Origin,
+ ok = IRC_WriteErrClient(Origin,
ERR_NOPRIVILEGES_MSG,
Client_ID(Origin));
break;
@@ -256,7 +256,7 @@ Client_Mode( CLIENT *Client, REQUEST *Req, CLIENT *Origin, CLIENT *Target )
if (set || Client_Type(Client) == CLIENT_SERVER)
x[0] = 'r';
else
- ok = IRC_WriteStrClient(Origin,
+ ok = IRC_WriteErrClient(Origin,
ERR_RESTRICTED_MSG,
Client_ID(Origin));
break;
@@ -264,13 +264,13 @@ Client_Mode( CLIENT *Client, REQUEST *Req, CLIENT *Origin, CLIENT *Target )
if (Client_Type(Client) == CLIENT_SERVER)
x[0] = 'R';
else
- ok = IRC_WriteStrClient(Origin,
+ ok = IRC_WriteErrClient(Origin,
ERR_NICKREGISTER_MSG,
Client_ID(Origin));
break;
case 'x': /* Cloak hostname */
if (Client_HasMode(Client, 'r'))
- ok = IRC_WriteStrClient(Origin,
+ ok = IRC_WriteErrClient(Origin,
ERR_RESTRICTED_MSG,
Client_ID(Origin));
else if (!set || Conf_CloakHostModeX[0]
@@ -279,7 +279,7 @@ Client_Mode( CLIENT *Client, REQUEST *Req, CLIENT *Origin, CLIENT *Target )
x[0] = 'x';
send_RPL_HOSTHIDDEN_MSG = true;
} else
- ok = IRC_WriteStrClient(Origin,
+ ok = IRC_WriteErrClient(Origin,
ERR_NOPRIVILEGES_MSG,
Client_ID(Origin));
break;
@@ -289,7 +289,7 @@ Client_Mode( CLIENT *Client, REQUEST *Req, CLIENT *Origin, CLIENT *Target )
"Unknown mode \"%c%c\" from \"%s\"!?",
set ? '+' : '-', *mode_ptr,
Client_ID(Origin));
- ok = IRC_WriteStrClient(Origin,
+ ok = IRC_WriteErrClient(Origin,
ERR_UMODEUNKNOWNFLAG2_MSG,
Client_ID(Origin),
set ? '+' : '-',
@@ -447,7 +447,7 @@ Channel_Mode(CLIENT *Client, REQUEST *Req, CLIENT *Origin, CHANNEL *Channel)
is_halfop = is_op = is_admin = is_owner = is_machine = is_oper = false;
if (Channel_IsModeless(Channel))
- return IRC_WriteStrClient(Client, ERR_NOCHANMODES_MSG,
+ return IRC_WriteErrClient(Client, ERR_NOCHANMODES_MSG,
Client_ID(Client), Channel_Name(Channel));
/* Mode request: let's answer it :-) */
@@ -468,7 +468,7 @@ Channel_Mode(CLIENT *Client, REQUEST *Req, CLIENT *Origin, CHANNEL *Channel)
/* Check if client is member of channel or an oper or an server/service */
if(!Channel_IsMemberOf(Channel, Client) && !is_oper && !is_machine)
- return IRC_WriteStrClient(Origin, ERR_NOTONCHANNEL_MSG,
+ return IRC_WriteErrClient(Origin, ERR_NOTONCHANNEL_MSG,
Client_ID(Origin),
Channel_Name(Channel));
@@ -568,7 +568,7 @@ Channel_Mode(CLIENT *Client, REQUEST *Req, CLIENT *Origin, CHANNEL *Channel)
case 'z': /* Secure connections only */
if(!is_oper && !is_machine && !is_owner &&
!is_admin && !is_op) {
- connected = IRC_WriteStrClient(Origin,
+ connected = IRC_WriteErrClient(Origin,
ERR_CHANOPRIVSNEEDED_MSG,
Client_ID(Origin), Channel_Name(Channel));
goto chan_exit;
@@ -584,7 +584,7 @@ Channel_Mode(CLIENT *Client, REQUEST *Req, CLIENT *Origin, CHANNEL *Channel)
is_admin || is_op || is_halfop)
x[0] = *mode_ptr;
else
- connected = IRC_WriteStrClient(Origin,
+ connected = IRC_WriteErrClient(Origin,
ERR_CHANOPRIVSNEEDED_MSG,
Client_ID(Origin), Channel_Name(Channel));
break;
@@ -596,7 +596,7 @@ Channel_Mode(CLIENT *Client, REQUEST *Req, CLIENT *Origin, CHANNEL *Channel)
is_admin || is_op || is_halfop)
x[0] = *mode_ptr;
else
- connected = IRC_WriteStrClient(Origin,
+ connected = IRC_WriteErrClient(Origin,
ERR_CHANOPRIVSNEEDED_MSG,
Client_ID(Origin),
Channel_Name(Channel));
@@ -612,7 +612,7 @@ Channel_Mode(CLIENT *Client, REQUEST *Req, CLIENT *Origin, CHANNEL *Channel)
sizeof(argadd));
x[0] = *mode_ptr;
} else {
- connected = IRC_WriteStrClient(Origin,
+ connected = IRC_WriteErrClient(Origin,
ERR_CHANOPRIVSNEEDED_MSG,
Client_ID(Origin),
Channel_Name(Channel));
@@ -623,7 +623,7 @@ Channel_Mode(CLIENT *Client, REQUEST *Req, CLIENT *Origin, CHANNEL *Channel)
#ifdef STRICT_RFC
/* Only send error message in "strict" mode,
* this is how ircd2.11 and others behave ... */
- connected = IRC_WriteStrClient(Origin,
+ connected = IRC_WriteErrClient(Origin,
ERR_NEEDMOREPARAMS_MSG,
Client_ID(Origin), Req->command);
#endif
@@ -638,7 +638,7 @@ Channel_Mode(CLIENT *Client, REQUEST *Req, CLIENT *Origin, CHANNEL *Channel)
is_admin || is_op || is_halfop)
x[0] = *mode_ptr;
else
- connected = IRC_WriteStrClient(Origin,
+ connected = IRC_WriteErrClient(Origin,
ERR_CHANOPRIVSNEEDED_MSG,
Client_ID(Origin),
Channel_Name(Channel));
@@ -656,7 +656,7 @@ Channel_Mode(CLIENT *Client, REQUEST *Req, CLIENT *Origin, CHANNEL *Channel)
x[0] = *mode_ptr;
}
} else {
- connected = IRC_WriteStrClient(Origin,
+ connected = IRC_WriteErrClient(Origin,
ERR_CHANOPRIVSNEEDED_MSG,
Client_ID(Origin),
Channel_Name(Channel));
@@ -667,7 +667,7 @@ Channel_Mode(CLIENT *Client, REQUEST *Req, CLIENT *Origin, CHANNEL *Channel)
#ifdef STRICT_RFC
/* Only send error message in "strict" mode,
* this is how ircd2.11 and others behave ... */
- connected = IRC_WriteStrClient(Origin,
+ connected = IRC_WriteErrClient(Origin,
ERR_NEEDMOREPARAMS_MSG,
Client_ID(Origin), Req->command);
#endif
@@ -681,14 +681,14 @@ Channel_Mode(CLIENT *Client, REQUEST *Req, CLIENT *Origin, CHANNEL *Channel)
if(is_oper || is_machine)
x[0] = 'O';
else
- connected = IRC_WriteStrClient(Origin,
+ connected = IRC_WriteErrClient(Origin,
ERR_NOPRIVILEGES_MSG,
Client_ID(Origin));
} else if(is_oper || is_machine || is_owner ||
is_admin || is_op)
x[0] = 'O';
else
- connected = IRC_WriteStrClient(Origin,
+ connected = IRC_WriteErrClient(Origin,
ERR_CHANOPRIVSNEEDED_MSG,
Client_ID(Origin),
Channel_Name(Channel));
@@ -700,14 +700,14 @@ Channel_Mode(CLIENT *Client, REQUEST *Req, CLIENT *Origin, CHANNEL *Channel)
if(is_oper || is_machine)
x[0] = 'P';
else
- connected = IRC_WriteStrClient(Origin,
+ connected = IRC_WriteErrClient(Origin,
ERR_NOPRIVILEGES_MSG,
Client_ID(Origin));
} else if(is_oper || is_machine || is_owner ||
is_admin || is_op)
x[0] = 'P';
else
- connected = IRC_WriteStrClient(Origin,
+ connected = IRC_WriteErrClient(Origin,
ERR_CHANOPRIVSNEEDED_MSG,
Client_ID(Origin),
Channel_Name(Channel));
@@ -716,7 +716,7 @@ Channel_Mode(CLIENT *Client, REQUEST *Req, CLIENT *Origin, CHANNEL *Channel)
case 'q': /* Owner */
case 'a': /* Channel admin */
if(!is_oper && !is_machine && !is_owner && !is_admin) {
- connected = IRC_WriteStrClient(Origin,
+ connected = IRC_WriteErrClient(Origin,
ERR_CHANOPPRIVTOOLOW_MSG,
Client_ID(Origin),
Channel_Name(Channel));
@@ -725,7 +725,7 @@ Channel_Mode(CLIENT *Client, REQUEST *Req, CLIENT *Origin, CHANNEL *Channel)
case 'o': /* Channel operator */
if(!is_oper && !is_machine && !is_owner &&
!is_admin && !is_op) {
- connected = IRC_WriteStrClient(Origin,
+ connected = IRC_WriteErrClient(Origin,
ERR_CHANOPRIVSNEEDED_MSG,
Client_ID(Origin),
Channel_Name(Channel));
@@ -734,7 +734,7 @@ Channel_Mode(CLIENT *Client, REQUEST *Req, CLIENT *Origin, CHANNEL *Channel)
case 'h': /* Half Op */
if(!is_oper && !is_machine && !is_owner &&
!is_admin && !is_op) {
- connected = IRC_WriteStrClient(Origin,
+ connected = IRC_WriteErrClient(Origin,
ERR_CHANOPRIVSNEEDED_MSG,
Client_ID(Origin),
Channel_Name(Channel));
@@ -748,12 +748,12 @@ Channel_Mode(CLIENT *Client, REQUEST *Req, CLIENT *Origin, CHANNEL *Channel)
if (client)
x[0] = *mode_ptr;
else
- connected = IRC_WriteStrClient(Origin,
+ connected = IRC_WriteErrClient(Origin,
ERR_NOSUCHNICK_MSG,
Client_ID(Origin),
Req->argv[arg_arg]);
} else {
- connected = IRC_WriteStrClient(Origin,
+ connected = IRC_WriteErrClient(Origin,
ERR_CHANOPRIVSNEEDED_MSG,
Client_ID(Origin),
Channel_Name(Channel));
@@ -768,7 +768,7 @@ Channel_Mode(CLIENT *Client, REQUEST *Req, CLIENT *Origin, CHANNEL *Channel)
* mode, because most other servers don't do
* it as well and some clients send "wired"
* MODE commands like "MODE #chan -ooo nick". */
- connected = IRC_WriteStrClient(Origin,
+ connected = IRC_WriteErrClient(Origin,
ERR_NEEDMOREPARAMS_MSG,
Client_ID(Origin), Req->command);
#endif
@@ -793,7 +793,7 @@ Channel_Mode(CLIENT *Client, REQUEST *Req, CLIENT *Origin, CHANNEL *Channel)
Client, Channel,
Req->argv[arg_arg]);
} else {
- connected = IRC_WriteStrClient(Origin,
+ connected = IRC_WriteErrClient(Origin,
ERR_CHANOPRIVSNEEDED_MSG,
Client_ID(Origin),
Channel_Name(Channel));
@@ -820,7 +820,7 @@ Channel_Mode(CLIENT *Client, REQUEST *Req, CLIENT *Origin, CHANNEL *Channel)
"Unknown mode \"%c%c\" from \"%s\" on %s!?",
set ? '+' : '-', *mode_ptr,
Client_ID(Origin), Channel_Name(Channel));
- connected = IRC_WriteStrClient(Origin,
+ connected = IRC_WriteErrClient(Origin,
ERR_UNKNOWNMODE_MSG,
Client_ID(Origin), *mode_ptr,
Channel_Name(Channel));
@@ -843,12 +843,11 @@ Channel_Mode(CLIENT *Client, REQUEST *Req, CLIENT *Origin, CHANNEL *Channel)
/* Validate target client */
if (client && (!Channel_IsMemberOf(Channel, client))) {
- if (!IRC_WriteStrClient
- (Origin, ERR_USERNOTINCHANNEL_MSG,
- Client_ID(Origin), Client_ID(client),
- Channel_Name(Channel)))
+ if (!IRC_WriteErrClient(Origin, ERR_USERNOTINCHANNEL_MSG,
+ Client_ID(Origin),
+ Client_ID(client),
+ Channel_Name(Channel)))
break;
-
continue;
}
@@ -1008,7 +1007,7 @@ Add_To_List(char what, CLIENT *Prefix, CLIENT *Client, CHANNEL *Channel,
return CONNECTED;
if (Client_Type(Client) == CLIENT_USER &&
current_count >= MAX_HNDL_CHANNEL_LISTS)
- return IRC_WriteStrClient(Client, ERR_LISTFULL_MSG,
+ return IRC_WriteErrClient(Client, ERR_LISTFULL_MSG,
Client_ID(Client),
Channel_Name(Channel), mask,
MAX_HNDL_CHANNEL_LISTS);
diff --git a/src/ngircd/irc-op.c b/src/ngircd/irc-op.c
--- a/src/ngircd/irc-op.c
+++ b/src/ngircd/irc-op.c
@@ -43,7 +43,8 @@ try_kick(CLIENT *peer, CLIENT* from, const char *nick, const char *channel,
CLIENT *target = Client_Search(nick);
if (!target)
- return IRC_WriteStrClient(from, ERR_NOSUCHNICK_MSG, Client_ID(from), nick);
+ return IRC_WriteErrClient(from, ERR_NOSUCHNICK_MSG,
+ Client_ID(from), nick);
Channel_Kick(peer, target, from, channel, reason);
return true;
@@ -122,7 +123,7 @@ IRC_KICK(CLIENT *Client, REQUEST *Req)
nickCount--;
}
} else {
- return IRC_WriteStrClient(Client, ERR_NEEDMOREPARAMS_MSG,
+ return IRC_WriteErrClient(Client, ERR_NEEDMOREPARAMS_MSG,
Client_ID(Client), Req->command);
}
return true;
@@ -152,19 +153,22 @@ IRC_INVITE(CLIENT *Client, REQUEST *Req)
/* Search user */
target = Client_Search(Req->argv[0]);
if (!target || (Client_Type(target) != CLIENT_USER))
- return IRC_WriteStrClient(from, ERR_NOSUCHNICK_MSG,
- Client_ID(Client), Req->argv[0]);
+ return IRC_WriteErrClient(from, ERR_NOSUCHNICK_MSG,
+ Client_ID(Client), Req->argv[0]);
chan = Channel_Search(Req->argv[1]);
if (chan) {
/* Channel exists. Is the user a valid member of the channel? */
if (!Channel_IsMemberOf(chan, from))
- return IRC_WriteStrClient(from, ERR_NOTONCHANNEL_MSG, Client_ID(Client), Req->argv[1]);
+ return IRC_WriteErrClient(from, ERR_NOTONCHANNEL_MSG,
+ Client_ID(Client),
+ Req->argv[1]);
/* Is the channel "invite-disallow"? */
if (Channel_HasMode(chan, 'V'))
- return IRC_WriteStrClient(from, ERR_NOINVITE_MSG,
- Client_ID(from), Channel_Name(chan));
+ return IRC_WriteErrClient(from, ERR_NOINVITE_MSG,
+ Client_ID(from),
+ Channel_Name(chan));
/* Is the channel "invite-only"? */
if (Channel_HasMode(chan, 'i')) {
@@ -173,15 +177,18 @@ IRC_INVITE(CLIENT *Client, REQUEST *Req)
!Channel_UserHasMode(chan, from, 'a') &&
!Channel_UserHasMode(chan, from, 'o') &&
!Channel_UserHasMode(chan, from, 'h'))
- return IRC_WriteStrClient(from, ERR_CHANOPRIVSNEEDED_MSG,
- Client_ID(from), Channel_Name(chan));
+ return IRC_WriteErrClient(from,
+ ERR_CHANOPRIVSNEEDED_MSG,
+ Client_ID(from),
+ Channel_Name(chan));
remember = true;
}
/* Is the target user already member of the channel? */
if (Channel_IsMemberOf(chan, target))
- return IRC_WriteStrClient(from, ERR_USERONCHANNEL_MSG,
- Client_ID(from), Req->argv[0], Req->argv[1]);
+ return IRC_WriteErrClient(from, ERR_USERONCHANNEL_MSG,
+ Client_ID(from),
+ Req->argv[0], Req->argv[1]);
/* If the target user is banned on that channel: remember invite */
if (Lists_Check(Channel_GetListBans(chan), target))
diff --git a/src/ngircd/irc-oper.c b/src/ngircd/irc-oper.c
--- a/src/ngircd/irc-oper.c
+++ b/src/ngircd/irc-oper.c
@@ -48,8 +48,7 @@ Bad_OperPass(CLIENT *Client, char *errtoken, char *errmsg)
{
Log(LOG_WARNING, "Got invalid OPER from \"%s\": \"%s\" -- %s",
Client_Mask(Client), errtoken, errmsg);
- IRC_SetPenalty(Client, 3);
- return IRC_WriteStrClient(Client, ERR_PASSWDMISMATCH_MSG,
+ return IRC_WriteErrClient(Client, ERR_PASSWDMISMATCH_MSG,
Client_ID(Client));
} /* Bad_OperPass */
@@ -197,7 +196,7 @@ IRC_RESTART( CLIENT *Client, REQUEST *Req )
/* Bad number of parameters? */
if (Req->argc != 0)
- return IRC_WriteStrClient(Client, ERR_NEEDMOREPARAMS_MSG,
+ return IRC_WriteErrClient(Client, ERR_NEEDMOREPARAMS_MSG,
Client_ID(Client), Req->command);
Log(LOG_NOTICE|LOG_snotice, "Got RESTART command from \"%s\" ...",
@@ -229,12 +228,12 @@ IRC_CONNECT(CLIENT * Client, REQUEST * Req)
/* Bad number of parameters? */
if (Req->argc != 1 && Req->argc != 2 && Req->argc != 3 &&
Req->argc != 5 && Req->argc != 6)
- return IRC_WriteStrClient(Client, ERR_NEEDMOREPARAMS_MSG,
+ return IRC_WriteErrClient(Client, ERR_NEEDMOREPARAMS_MSG,
Client_ID(Client), Req->command);
/* Invalid port number? */
if ((Req->argc > 1) && atoi(Req->argv[1]) < 1)
- return IRC_WriteStrClient(Client, ERR_NEEDMOREPARAMS_MSG,
+ return IRC_WriteErrClient(Client, ERR_NEEDMOREPARAMS_MSG,
Client_ID(Client), Req->command);
from = Client;
@@ -245,14 +244,14 @@ IRC_CONNECT(CLIENT * Client, REQUEST * Req)
if (Client_Type(Client) == CLIENT_SERVER && Req->prefix)
from = Client_Search(Req->prefix);
if (! from)
- return IRC_WriteStrClient(Client, ERR_NOSUCHNICK_MSG,
- Client_ID(Client), Req->prefix);
+ return IRC_WriteErrClient(Client, ERR_NOSUCHNICK_MSG,
+ Client_ID(Client), Req->prefix);
target = (Req->argc == 3) ? Client_Search(Req->argv[2])
: Client_Search(Req->argv[5]);
if (! target || Client_Type(target) != CLIENT_SERVER)
- return IRC_WriteStrClient(from, ERR_NOSUCHSERVER_MSG,
- Client_ID(from), Req->argv[0]);
+ return IRC_WriteErrClient(from, ERR_NOSUCHSERVER_MSG,
+ Client_ID(from), Req->argv[0]);
}
if (target != Client_ThisServer()) {
@@ -275,7 +274,7 @@ IRC_CONNECT(CLIENT * Client, REQUEST * Req)
switch (Req->argc) {
case 1:
if (!Conf_EnablePassiveServer(Req->argv[0]))
- return IRC_WriteStrClient(from, ERR_NOSUCHSERVER_MSG,
+ return IRC_WriteErrClient(from, ERR_NOSUCHSERVER_MSG,
Client_ID(from),
Req->argv[0]);
break;
@@ -284,7 +283,7 @@ IRC_CONNECT(CLIENT * Client, REQUEST * Req)
/* Connect configured server */
if (!Conf_EnableServer
(Req->argv[0], (UINT16) atoi(Req->argv[1])))
- return IRC_WriteStrClient(from, ERR_NOSUCHSERVER_MSG,
+ return IRC_WriteErrClient(from, ERR_NOSUCHSERVER_MSG,
Client_ID(from),
Req->argv[0]);
break;
@@ -293,7 +292,7 @@ IRC_CONNECT(CLIENT * Client, REQUEST * Req)
if (!Conf_AddServer
(Req->argv[0], (UINT16) atoi(Req->argv[1]), Req->argv[2],
Req->argv[3], Req->argv[4]))
- return IRC_WriteStrClient(from, ERR_NOSUCHSERVER_MSG,
+ return IRC_WriteErrClient(from, ERR_NOSUCHSERVER_MSG,
Client_ID(from),
Req->argv[0]);
}
@@ -331,7 +330,7 @@ IRC_DISCONNECT(CLIENT * Client, REQUEST * Req)
/* Bad number of parameters? */
if (Req->argc != 1)
- return IRC_WriteStrClient(Client, ERR_NEEDMOREPARAMS_MSG,
+ return IRC_WriteErrClient(Client, ERR_NEEDMOREPARAMS_MSG,
Client_ID(Client), Req->command);
IRC_SendWallops(Client_ThisServer(), Client_ThisServer(),
@@ -347,7 +346,7 @@ IRC_DISCONNECT(CLIENT * Client, REQUEST * Req)
/* Disconnect configured server */
if (!Conf_DisableServer(Req->argv[0]))
- return IRC_WriteStrClient(Client, ERR_NOSUCHSERVER_MSG,
+ return IRC_WriteErrClient(Client, ERR_NOSUCHSERVER_MSG,
Client_ID(Client), Req->argv[0]);
/* Are we still connected or were we killed, too? */
@@ -377,7 +376,7 @@ IRC_WALLOPS( CLIENT *Client, REQUEST *Req )
switch (Client_Type(Client)) {
case CLIENT_USER:
if (!Client_OperByMe(Client))
- return IRC_WriteStrClient(Client, ERR_NOPRIVILEGES_MSG,
+ return IRC_WriteErrClient(Client, ERR_NOPRIVILEGES_MSG,
Client_ID(Client));
from = Client;
break;
@@ -389,7 +388,7 @@ IRC_WALLOPS( CLIENT *Client, REQUEST *Req )
}
if (!from)
- return IRC_WriteStrClient(Client, ERR_NOSUCHNICK_MSG,
+ return IRC_WriteErrClient(Client, ERR_NOSUCHNICK_MSG,
Client_ID(Client), Req->prefix);
IRC_SendWallops(Client, from, "%s", Req->argv[0]);
@@ -419,7 +418,7 @@ IRC_xLINE(CLIENT *Client, REQUEST *Req)
/* Bad number of parameters? */
if (Req->argc != 1 && Req->argc != 3)
- return IRC_WriteStrClient(Client, ERR_NEEDMOREPARAMS_MSG,
+ return IRC_WriteErrClient(Client, ERR_NEEDMOREPARAMS_MSG,
Client_ID(Client), Req->command);
switch(Req->command[0]) {
diff --git a/src/ngircd/irc-server.c b/src/ngircd/irc-server.c
--- a/src/ngircd/irc-server.c
+++ b/src/ngircd/irc-server.c
@@ -62,7 +62,7 @@ IRC_SERVER( CLIENT *Client, REQUEST *Req )
/* Return an error if this is not a local client */
if (Client_Conn(Client) <= NONE)
- return IRC_WriteStrClient(Client, ERR_UNKNOWNCOMMAND_MSG,
+ return IRC_WriteErrClient(Client, ERR_UNKNOWNCOMMAND_MSG,
Client_ID(Client), Req->command);
if (Client_Type(Client) == CLIENT_GOTPASS ||
@@ -73,7 +73,7 @@ IRC_SERVER( CLIENT *Client, REQUEST *Req )
Client_Conn(Client));
if (Req->argc != 2 && Req->argc != 3)
- return IRC_WriteStrClient(Client, ERR_NEEDMOREPARAMS_MSG,
+ return IRC_WriteErrClient(Client, ERR_NEEDMOREPARAMS_MSG,
Client_ID(Client),
Req->command);
@@ -183,7 +183,9 @@ IRC_SERVER( CLIENT *Client, REQUEST *Req )
{
/* New server is being introduced to the network */
- if( Req->argc != 4 ) return IRC_WriteStrClient( Client, ERR_NEEDMOREPARAMS_MSG, Client_ID( Client ), Req->command );
+ if (Req->argc != 4)
+ return IRC_WriteErrClient(Client, ERR_NEEDMOREPARAMS_MSG,
+ Client_ID(Client), Req->command);
/* check for existing server with same ID */
if( ! Client_CheckID( Client, Req->argv[0] )) return DISCONNECTED;
@@ -213,7 +215,7 @@ IRC_SERVER( CLIENT *Client, REQUEST *Req )
return CONNECTED;
} else
- return IRC_WriteStrClient(Client, ERR_NEEDMOREPARAMS_MSG,
+ return IRC_WriteErrClient(Client, ERR_NEEDMOREPARAMS_MSG,
Client_ID(Client), Req->command);
} /* IRC_SERVER */
@@ -336,7 +338,7 @@ IRC_SQUIT(CLIENT * Client, REQUEST * Req)
} else
from = Client;
if (!from)
- return IRC_WriteStrClient(Client, ERR_NOSUCHNICK_MSG,
+ return IRC_WriteErrClient(Client, ERR_NOSUCHNICK_MSG,
Client_ID(Client), Req->prefix);
if (Client_Type(Client) == CLIENT_USER)
diff --git a/src/ngircd/irc-write.c b/src/ngircd/irc-write.c
--- a/src/ngircd/irc-write.c
+++ b/src/ngircd/irc-write.c
@@ -41,6 +41,43 @@ static void cb_writeStrServersPrefixFlag PARAMS((CLIENT *Client,
CLIENT *Prefix, void *Buffer));
static void Send_Marked_Connections PARAMS((CLIENT *Prefix, const char *Buffer));
+/**
+ * Send an error message to a client and enforce a penalty time.
+ *
+ * @param Client The target client.
+ * @param Format Format string.
+ * @return CONNECTED or DISCONNECTED.
+ */
+#ifdef PROTOTYPES
+GLOBAL bool
+IRC_WriteErrClient( CLIENT *Client, const char *Format, ... )
+#else
+GLOBAL bool
+IRC_WriteErrClient( Client, Format, va_alist )
+CLIENT *Client;
+const char *Format;
+va_dcl
+#endif
+{
+ char buffer[1000];
+ va_list ap;
+
+ assert(Client != NULL);
+ assert(Format != NULL);
+
+#ifdef PROTOTYPES
+ va_start(ap, Format);
+#else
+ va_start(ap);
+#endif
+ vsnprintf(buffer, 1000, Format, ap);
+ va_end(ap);
+
+ IRC_SetPenalty(Client, 2);
+ return IRC_WriteStrClientPrefix(Client, Client_ThisServer(),
+ "%s", buffer);
+}
+
/**
* Send a message to a client.
*
diff --git a/src/ngircd/irc-write.h b/src/ngircd/irc-write.h
--- a/src/ngircd/irc-write.h +++ b/src/ngircd/irc-write.h @@ -17,6 +17,8 @@ * Sending IRC commands over the network (header) */ +GLOBAL bool IRC_WriteErrClient PARAMS((CLIENT *Client, const char *Format, ...)); + GLOBAL bool IRC_WriteStrClient PARAMS((CLIENT *Client, const char *Format, ...)); GLOBAL bool IRC_WriteStrClientPrefix PARAMS((CLIENT *Client, CLIENT *Prefix, const char *Format, ...)); diff --git a/src/ngircd/irc.c b/src/ngircd/irc.c
--- a/src/ngircd/irc.c
+++ b/src/ngircd/irc.c
@@ -135,7 +135,7 @@ IRC_KILL(CLIENT *Client, REQUEST *Req)
assert (Req != NULL);
if (Client_Type(Client) != CLIENT_SERVER && !Client_OperByMe(Client))
- return IRC_WriteStrClient(Client, ERR_NOPRIVILEGES_MSG,
+ return IRC_WriteErrClient(Client, ERR_NOPRIVILEGES_MSG,
Client_ID(Client));
_IRC_ARGC_EQ_OR_RETURN_(Client, Req, 2)
@@ -192,7 +192,7 @@ IRC_KILL(CLIENT *Client, REQUEST *Req)
msg = ERR_CANTKILLSERVER_MSG;
else
msg = ERR_NOPRIVILEGES_MSG;
- return IRC_WriteStrClient(Client, msg,
+ return IRC_WriteErrClient(Client, msg,
Client_ID(Client));
}
@@ -282,7 +282,7 @@ IRC_TRACE(CLIENT *Client, REQUEST *Req)
/* Bad number of arguments? */
if (Req->argc > 1)
- return IRC_WriteStrClient(Client, ERR_NORECIPIENT_MSG,
+ return IRC_WriteErrClient(Client, ERR_NORECIPIENT_MSG,
Client_ID(Client), Req->command);
_IRC_GET_SENDER_OR_RETURN_(from, Req, Client)
@@ -490,19 +490,19 @@ Send_Message(CLIENT * Client, REQUEST * Req, int ForceType, bool SendErrors)
if (Req->argc == 0) {
if (!SendErrors)
return CONNECTED;
- return IRC_WriteStrClient(Client, ERR_NORECIPIENT_MSG,
+ return IRC_WriteErrClient(Client, ERR_NORECIPIENT_MSG,
Client_ID(Client), Req->command);
}
if (Req->argc == 1) {
if (!SendErrors)
return CONNECTED;
- return IRC_WriteStrClient(Client, ERR_NOTEXTTOSEND_MSG,
+ return IRC_WriteErrClient(Client, ERR_NOTEXTTOSEND_MSG,
Client_ID(Client));
}
if (Req->argc > 2) {
if (!SendErrors)
return CONNECTED;
- return IRC_WriteStrClient(Client, ERR_NEEDMOREPARAMS_MSG,
+ return IRC_WriteErrClient(Client, ERR_NEEDMOREPARAMS_MSG,
Client_ID(Client), Req->command);
}
@@ -511,7 +511,7 @@ Send_Message(CLIENT * Client, REQUEST * Req, int ForceType, bool SendErrors)
else
from = Client;
if (!from)
- return IRC_WriteStrClient(Client, ERR_NOSUCHNICK_MSG,
+ return IRC_WriteErrClient(Client, ERR_NOSUCHNICK_MSG,
Client_ID(Client), Req->prefix);
#ifdef ICONV
@@ -606,7 +606,7 @@ Send_Message(CLIENT * Client, REQUEST * Req, int ForceType, bool SendErrors)
#else
if (Client_Type(cl) != ForceType) {
#endif
- if (SendErrors && !IRC_WriteStrClient(
+ if (SendErrors && !IRC_WriteErrClient(
from, ERR_NOSUCHNICK_MSG,Client_ID(from),
currentTarget))
return DISCONNECTED;
@@ -627,7 +627,7 @@ Send_Message(CLIENT * Client, REQUEST * Req, int ForceType, bool SendErrors)
!Client_HasMode(from, 'o') &&
!(Client_Type(from) == CLIENT_SERVER) &&
!(Client_Type(from) == CLIENT_SERVICE)) {
- if (SendErrors && !IRC_WriteStrClient(from,
+ if (SendErrors && !IRC_WriteErrClient(from,
ERR_NONONREG_MSG,
Client_ID(from), Client_ID(cl)))
return DISCONNECTED;
@@ -643,7 +643,7 @@ Send_Message(CLIENT * Client, REQUEST * Req, int ForceType, bool SendErrors)
cl2chan = Channel_NextChannelOf(cl, cl2chan);
}
if (!cl2chan) {
- if (SendErrors && !IRC_WriteStrClient(
+ if (SendErrors && !IRC_WriteErrClient(
from, ERR_NOTONSAMECHANNEL_MSG,
Client_ID(from), Client_ID(cl)))
return DISCONNECTED;
@@ -683,7 +683,7 @@ Send_Message(CLIENT * Client, REQUEST * Req, int ForceType, bool SendErrors)
} else {
if (!SendErrors)
return CONNECTED;
- if (!IRC_WriteStrClient(from, ERR_NOSUCHNICK_MSG,
+ if (!IRC_WriteErrClient(from, ERR_NOSUCHNICK_MSG,
Client_ID(from), currentTarget))
return DISCONNECTED;
}
@@ -711,7 +711,7 @@ Send_Message_Mask(CLIENT * from, char * command, char * targetMask,
if (!Client_HasMode(from, 'o')) {
if (!SendErrors)
return true;
- return IRC_WriteStrClient(from, ERR_NOPRIVILEGES_MSG,
+ return IRC_WriteErrClient(from, ERR_NOPRIVILEGES_MSG,
Client_ID(from));
}
@@ -726,7 +726,7 @@ Send_Message_Mask(CLIENT * from, char * command, char * targetMask,
{
if (!SendErrors)
return true;
- return IRC_WriteStrClient(from, ERR_WILDTOPLEVEL, targetMask);
+ return IRC_WriteErrClient(from, ERR_WILDTOPLEVEL, targetMask);
}
/* #: hostmask, see RFC 2812, sec. 3.3.1 */
diff --git a/src/ngircd/op.c b/src/ngircd/op.c
--- a/src/ngircd/op.c
+++ b/src/ngircd/op.c
@@ -1,6 +1,6 @@
/*
* ngIRCd -- The Next Generation IRC Daemon
- * Copyright (c)2001-2008 Alexander Barton (alex@barton.de)
+ * Copyright (c)2001-2013 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
@@ -46,12 +46,12 @@ Op_NoPrivileges(CLIENT * Client, REQUEST * Req)
if (from) {
Log(LOG_NOTICE, "No privileges: client \"%s\" (%s), command \"%s\"",
Req->prefix, Client_Mask(Client), Req->command);
- return IRC_WriteStrClient(from, ERR_NOPRIVILEGES_MSG,
+ return IRC_WriteErrClient(from, ERR_NOPRIVILEGES_MSG,
Client_ID(from));
} else {
Log(LOG_NOTICE, "No privileges: client \"%s\", command \"%s\"",
Client_Mask(Client), Req->command);
- return IRC_WriteStrClient(Client, ERR_NOPRIVILEGES_MSG,
+ return IRC_WriteErrClient(Client, ERR_NOPRIVILEGES_MSG,
Client_ID(Client));
}
} /* Op_NoPrivileges */
diff --git a/src/ngircd/parse.c b/src/ngircd/parse.c
--- a/src/ngircd/parse.c
+++ b/src/ngircd/parse.c
@@ -1,6 +1,6 @@
/*
* ngIRCd -- The Next Generation IRC Daemon
- * Copyright (c)2001-2010 Alexander Barton (alex@barton.de)
+ * Copyright (c)2001-2013 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
@@ -515,11 +515,11 @@ Handle_Request( CONN_ID Idx, REQUEST *Req )
if (!(client_type & cmd->type)) {
if (client_type == CLIENT_USER
&& cmd->type & CLIENT_SERVER)
- return IRC_WriteStrClient(client,
+ return IRC_WriteErrClient(client,
ERR_NOTREGISTEREDSERVER_MSG,
Client_ID(client));
else
- return IRC_WriteStrClient(client,
+ return IRC_WriteErrClient(client,
ERR_NOTREGISTERED_MSG,
Client_ID(client));
}
@@ -549,11 +549,10 @@ Handle_Request( CONN_ID Idx, REQUEST *Req )
Req->argc == 1 ? "parameter" : "parameters",
Req->prefix ? "" : " no" );
- if (Client_Type(client) != CLIENT_SERVER) {
- result = IRC_WriteStrClient(client, ERR_UNKNOWNCOMMAND_MSG,
+ if (Client_Type(client) != CLIENT_SERVER)
+ result = IRC_WriteErrClient(client, ERR_UNKNOWNCOMMAND_MSG,
Client_ID(client), Req->command);
- Conn_SetPenalty(Idx, 1);
- }
+
return result;
} /* Handle_Request */
-----END OF PAGE-----