More helpful ERROR server notices.
- Do not use hide_error_messages for certain "safe" ERRORs. - If hide_error_messages hides an ERROR from a handshake, send a server notice anyway, but without the message text. - Send server notices about ERRORs from handshakes network wide if it was a remote connect.
This commit is contained in:
parent
d23bc305d6
commit
372b2193ec
|
@ -765,11 +765,13 @@ alias "MS" {
|
||||||
*/
|
*/
|
||||||
general {
|
general {
|
||||||
/* hide error messages: defines whether error messages from
|
/* hide error messages: defines whether error messages from
|
||||||
* servers are hidden or not. These can sometimes contain IPs and
|
* servers that are not deemed fully safe are hidden or not.
|
||||||
* can have an adverse effect on server ip hiding. Set to:
|
* These can sometimes contain IPs and can have an adverse
|
||||||
|
* effect on server ip hiding. Set to:
|
||||||
* yes: hide from opers and admin
|
* yes: hide from opers and admin
|
||||||
* opers: hide from opers only
|
* opers: hide from opers only
|
||||||
* no: do not hide error messages
|
* no: do not hide error messages
|
||||||
|
* Admins on other servers count as opers.
|
||||||
*/
|
*/
|
||||||
hide_error_messages = opers;
|
hide_error_messages = opers;
|
||||||
|
|
||||||
|
|
|
@ -50,6 +50,36 @@ mapi_clist_av1 error_clist[] = {
|
||||||
|
|
||||||
DECLARE_MODULE_AV1(error, NULL, NULL, error_clist, NULL, NULL, "$Revision: 494 $");
|
DECLARE_MODULE_AV1(error, NULL, NULL, error_clist, NULL, NULL, "$Revision: 494 $");
|
||||||
|
|
||||||
|
/* Determine whether an ERROR message is safe to show (no IP address in it) */
|
||||||
|
static int
|
||||||
|
is_safe_error(const char *message)
|
||||||
|
{
|
||||||
|
char prefix2[100];
|
||||||
|
const char *p;
|
||||||
|
|
||||||
|
if (!strncmp(message, "Closing Link: 127.0.0.1 (", 25))
|
||||||
|
return 1;
|
||||||
|
snprintf(prefix2, sizeof prefix2,
|
||||||
|
"Closing Link: 127.0.0.1 %s (", me.name);
|
||||||
|
if (!strncmp(message, prefix2, strlen(prefix2)))
|
||||||
|
return 1;
|
||||||
|
if (!strncmp(message, "Restart by ", 11))
|
||||||
|
return 1;
|
||||||
|
if (!strncmp(message, "Terminated by ", 14))
|
||||||
|
return 1;
|
||||||
|
|
||||||
|
if (!ircncmp(message, "Closing Link", 12))
|
||||||
|
return 0;
|
||||||
|
if (strchr(message, '['))
|
||||||
|
return 0;
|
||||||
|
p = strchr(message, '.');
|
||||||
|
if (p != NULL && p[1] != '\0')
|
||||||
|
return 0;
|
||||||
|
if (strchr(message, ':'))
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Note: At least at protocol level ERROR has only one parameter,
|
* Note: At least at protocol level ERROR has only one parameter,
|
||||||
|
@ -63,22 +93,25 @@ int
|
||||||
m_error(struct Client *client_p, struct Client *source_p, int parc, const char *parv[])
|
m_error(struct Client *client_p, struct Client *source_p, int parc, const char *parv[])
|
||||||
{
|
{
|
||||||
const char *para;
|
const char *para;
|
||||||
|
int hideit = ConfigFileEntry.hide_error_messages;
|
||||||
|
|
||||||
para = (parc > 1 && *parv[1] != '\0') ? parv[1] : "<>";
|
para = (parc > 1 && *parv[1] != '\0') ? parv[1] : "<>";
|
||||||
|
|
||||||
ilog(L_SERVER, "Received ERROR message from %s: %s",
|
ilog(L_SERVER, "Received ERROR message from %s: %s",
|
||||||
log_client_name(source_p, SHOW_IP), para);
|
log_client_name(source_p, SHOW_IP), para);
|
||||||
|
|
||||||
if(IsAnyServer(client_p) && ConfigFileEntry.hide_error_messages < 2)
|
if(is_safe_error(para))
|
||||||
|
hideit = 0;
|
||||||
|
if(IsAnyServer(client_p))
|
||||||
{
|
{
|
||||||
sendto_realops_snomask(SNO_GENERAL, L_ADMIN,
|
if (hideit < 2)
|
||||||
"ERROR :from %s -- %s",
|
sendto_realops_snomask(SNO_GENERAL, hideit ? L_ADMIN : (is_remote_connect(client_p) ? L_NETWIDE : L_ALL),
|
||||||
get_server_name(client_p, HIDE_IP), para);
|
|
||||||
|
|
||||||
if(!ConfigFileEntry.hide_error_messages)
|
|
||||||
sendto_realops_snomask(SNO_GENERAL, L_OPER,
|
|
||||||
"ERROR :from %s -- %s",
|
"ERROR :from %s -- %s",
|
||||||
get_server_name(client_p, HIDE_IP), para);
|
get_server_name(client_p, HIDE_IP), para);
|
||||||
|
if (hideit > 0)
|
||||||
|
sendto_realops_snomask(SNO_GENERAL, (hideit == 1 ? L_OPER : L_ALL) | (is_remote_connect(client_p) ? L_NETWIDE : L_ALL),
|
||||||
|
"ERROR :from %s -- <hidden>",
|
||||||
|
get_server_name(client_p, HIDE_IP));
|
||||||
}
|
}
|
||||||
|
|
||||||
exit_client(client_p, source_p, source_p, "ERROR");
|
exit_client(client_p, source_p, source_p, "ERROR");
|
||||||
|
@ -90,35 +123,27 @@ static int
|
||||||
ms_error(struct Client *client_p, struct Client *source_p, int parc, const char *parv[])
|
ms_error(struct Client *client_p, struct Client *source_p, int parc, const char *parv[])
|
||||||
{
|
{
|
||||||
const char *para;
|
const char *para;
|
||||||
|
int hideit = ConfigFileEntry.hide_error_messages;
|
||||||
|
|
||||||
para = (parc > 1 && *parv[1] != '\0') ? parv[1] : "<>";
|
para = (parc > 1 && *parv[1] != '\0') ? parv[1] : "<>";
|
||||||
|
|
||||||
ilog(L_SERVER, "Received ERROR message from %s: %s",
|
ilog(L_SERVER, "Received ERROR message from %s: %s",
|
||||||
log_client_name(source_p, SHOW_IP), para);
|
log_client_name(source_p, SHOW_IP), para);
|
||||||
|
|
||||||
if(ConfigFileEntry.hide_error_messages == 2)
|
if(is_safe_error(para))
|
||||||
|
hideit = 0;
|
||||||
|
if(hideit == 2)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
if(client_p == source_p)
|
if(client_p == source_p)
|
||||||
{
|
{
|
||||||
sendto_realops_snomask(SNO_GENERAL, L_ADMIN, "ERROR :from %s -- %s",
|
sendto_realops_snomask(SNO_GENERAL, hideit ? L_ADMIN : L_ALL, "ERROR :from %s -- %s",
|
||||||
get_server_name(client_p, HIDE_IP), para);
|
|
||||||
|
|
||||||
if(!ConfigFileEntry.hide_error_messages)
|
|
||||||
sendto_realops_snomask(SNO_GENERAL, L_OPER,
|
|
||||||
"ERROR :from %s -- %s",
|
|
||||||
get_server_name(client_p, HIDE_IP), para);
|
get_server_name(client_p, HIDE_IP), para);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
sendto_realops_snomask(SNO_GENERAL, L_ADMIN, "ERROR :from %s via %s -- %s",
|
sendto_realops_snomask(SNO_GENERAL, hideit ? L_ADMIN : L_ALL, "ERROR :from %s via %s -- %s",
|
||||||
source_p->name, get_server_name(client_p, HIDE_IP), para);
|
source_p->name, get_server_name(client_p, HIDE_IP), para);
|
||||||
|
|
||||||
if(!ConfigFileEntry.hide_error_messages)
|
|
||||||
sendto_realops_snomask(SNO_GENERAL, L_OPER,
|
|
||||||
"ERROR :from %s via %s -- %s",
|
|
||||||
source_p->name,
|
|
||||||
get_server_name(client_p, HIDE_IP), para);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
|
Loading…
Reference in New Issue