#include "stdinc.h"
#include "ircd_defs.h"
#include "s_conf.h"
+#include "s_user.h"
#include "s_newconf.h"
#include "newconf.h"
#include "s_serv.h"
case NOT_AUTHORISED:
{
int port = -1;
- port = ntohs(GET_SS_PORT(&source_p->localClient->listener->addr));
+ port = ntohs(GET_SS_PORT(&source_p->localClient->listener->addr[0]));
ServerStats.is_ref++;
/* jdc - lists server name & port connections are on */
static char ipaddr[HOSTIPLEN];
rb_inet_ntop_sock(&source_p->localClient->ip, ipaddr, sizeof(ipaddr));
#endif
- sendto_realops_snomask(SNO_UNAUTH, L_ALL,
+ sendto_realops_snomask(SNO_UNAUTH, L_NETWIDE,
"Unauthorised client connection from "
"%s!%s%s@%s [%s] on [%s/%u].",
source_p->name, IsGotId(source_p) ? "" : "~",
source_p->name, IsGotId(source_p) ? "" : "~",
source_p->username, source_p->sockhost,
source_p->localClient->listener->name, port);
- add_reject(client_p, NULL, NULL);
- exit_client(client_p, source_p, &me,
- "You are not authorised to use this server");
+ add_reject(client_p, NULL, NULL, NULL, "You are not authorised to use this server.");
+ exit_client(client_p, source_p, &me, "You are not authorised to use this server.");
break;
}
case BANNED_CLIENT:
if(IsConfSpoofNotice(aconf))
{
- sendto_realops_snomask(SNO_GENERAL, L_ALL,
+ sendto_realops_snomask(SNO_GENERAL, L_NETWIDE,
"%s spoofing: %s as %s",
client_p->name,
show_ip(NULL, client_p) ? client_p->host : aconf->info.name,
form_str(ERR_YOUREBANNEDCREEP),
me.name, client_p->name,
get_user_ban_reason(aconf));
- add_reject(client_p, aconf->user, aconf->host);
+ add_reject(client_p, aconf->user, aconf->host, aconf, NULL);
return (BANNED_CLIENT);
}
return (attach_conf(client_p, aconf));
}
+/*
+ * deref_conf
+ *
+ * inputs - ConfItem that is referenced by something other than a client
+ * side effects - Decrement and free ConfItem if appropriate
+ */
+void
+deref_conf(struct ConfItem *aconf)
+{
+ aconf->clients--;
+ if(!aconf->clients && IsIllegal(aconf))
+ free_conf(aconf);
+}
+
/*
* detach_conf
*
if(IsIllegal(aconf))
return (NOT_AUTHORISED);
- if(ClassPtr(aconf))
- {
- if(!add_ip_limit(client_p, aconf))
- return (TOO_MANY_LOCAL);
- }
+ if(s_assert(ClassPtr(aconf)))
+ return (NOT_AUTHORISED);
+
+ if(!add_ip_limit(client_p, aconf))
+ return (TOO_MANY_LOCAL);
if((aconf->status & CONF_CLIENT) &&
ConfCurrUsers(aconf) >= ConfMaxUsers(aconf) && ConfMaxUsers(aconf) > 0)
bool
rehash(bool sig)
{
+ rb_dlink_node *n;
+
hook_data_rehash hdata = { sig };
if(sig)
- sendto_realops_snomask(SNO_GENERAL, L_ALL,
+ sendto_realops_snomask(SNO_GENERAL, L_NETWIDE,
"Got signal SIGHUP, reloading ircd conf. file");
rehash_authd();
open_logfiles();
+ RB_DLINK_FOREACH(n, local_oper_list.head)
+ {
+ struct Client *oper = n->data;
+ const char *modeparv[4];
+ modeparv[0] = modeparv[1] = oper->name;
+ modeparv[2] = "+";
+ modeparv[3] = NULL;
+ user_mode(oper, oper, 3, modeparv);
+ }
+
call_hook(h_rehash, &hdata);
return false;
}
memset(&ServerInfo.bind4, 0, sizeof(ServerInfo.bind4));
SET_SS_FAMILY(&ServerInfo.bind4, AF_UNSPEC);
-#ifdef RB_IPV6
memset(&ServerInfo.bind6, 0, sizeof(ServerInfo.bind6));
SET_SS_FAMILY(&ServerInfo.bind6, AF_UNSPEC);
-#endif
AdminInfo.name = NULL;
AdminInfo.email = NULL;
ConfigFileEntry.client_exit = true;
ConfigFileEntry.dline_with_reason = true;
ConfigFileEntry.kline_with_reason = true;
- ConfigFileEntry.kline_delay = 0;
ConfigFileEntry.warn_no_nline = true;
ConfigFileEntry.non_redundant_klines = true;
ConfigFileEntry.stats_e_disabled = false;
ConfigFileEntry.stats_o_oper_only = false;
ConfigFileEntry.stats_k_oper_only = 1; /* masked */
+ ConfigFileEntry.stats_l_oper_only = 1; /* self */
ConfigFileEntry.stats_i_oper_only = 1; /* masked */
ConfigFileEntry.stats_P_oper_only = false;
ConfigFileEntry.stats_c_oper_only = false;
ConfigFileEntry.use_propagated_bans = true;
ConfigFileEntry.max_ratelimit_tokens = 30;
ConfigFileEntry.away_interval = 30;
+ ConfigFileEntry.tls_ciphers_oper_only = false;
#ifdef HAVE_LIBZ
ConfigFileEntry.compression_level = 4;
ConfigChannel.channel_target_change = true;
ConfigChannel.disable_local_channels = false;
ConfigChannel.displayed_usercount = 3;
+ ConfigChannel.opmod_send_statusmsg = false;
ConfigChannel.autochanmodes = MODE_TOPICLIMIT | MODE_NOPRIVMSGS;
ConfigFileEntry.nicklen = NICKLEN;
ConfigFileEntry.certfp_method = RB_SSL_CERTFP_METH_CERT_SHA1;
ConfigFileEntry.hide_opers_in_whois = 0;
+ ConfigFileEntry.hide_opers = 0;
if (!alias_dict)
alias_dict = rb_dictionary_create("alias", rb_strcasecmp);
break;
}
if (aconf->lifetime != 0 && now < aconf->lifetime)
+ {
aconf->status |= CONF_ILLEGAL;
+ }
else
{
if (aconf->lifetime != 0)
rb_dlinkDestroy(ptr, &prop_bans);
- free_conf(aconf);
+ if (aconf->clients == 0)
+ free_conf(aconf);
+ else
+ aconf->status |= CONF_ILLEGAL;
}
}
get_oper_name(struct Client *client_p)
{
/* +5 for !,@,{,} and null */
- static char buffer[NICKLEN + USERLEN + HOSTLEN + HOSTLEN + 5];
+ static char buffer[NAMELEN + USERLEN + HOSTLEN + HOSTLEN + 5];
if(MyOper(client_p))
{
snprintf(buffer, sizeof(buffer), "%s!%s@%s{%s}",
client_p->name, client_p->username,
- client_p->host, client_p->localClient->opername);
+ client_p->host, client_p->user->opername);
return buffer;
}
{
static char reasonbuf[BUFSIZE];
- if (aconf->flags & CONF_FLAGS_TEMPORARY &&
+ if (!ConfigFileEntry.hide_tkdline_duration &&
+ aconf->flags & CONF_FLAGS_TEMPORARY &&
(aconf->status == CONF_KILL || aconf->status == CONF_DLINE))
snprintf(reasonbuf, sizeof reasonbuf,
"Temporary %c-line %d min. - ",
*user = EmptyString(aconf->user) ? null : aconf->user;
*reason = get_user_ban_reason(aconf);
- if(!IsOper(source_p))
+ if(!IsOperGeneral(source_p))
*oper_reason = NULL;
else
{
}
else
{
- sendto_realops_snomask(SNO_GENERAL, L_ALL,
+ sendto_realops_snomask(SNO_GENERAL, L_NETWIDE,
"Can't open file '%s' - aborting rehash!", filename);
return;
}
MaxUsers(cltmp) = -1;
}
- clear_out_address_conf();
+ clear_out_address_conf(AC_CONFIG);
clear_s_newconf();
/* clean out module paths */
rb_free(ConfigFileEntry.sasl_service);
ConfigFileEntry.sasl_service = NULL;
+ if (ConfigFileEntry.hidden_caps != NULL)
+ {
+ for (size_t i = 0; ConfigFileEntry.hidden_caps[i] != NULL; i++)
+ rb_free(ConfigFileEntry.hidden_caps[i]);
+ rb_free(ConfigFileEntry.hidden_caps);
+ }
+ ConfigFileEntry.hidden_caps = NULL;
+
/* clean out log */
rb_free(ConfigFileEntry.fname_userlog);
ConfigFileEntry.fname_userlog = NULL;
alias_dict = NULL;
}
- del_blacklist_all();
+ del_dnsbl_entry_all();
privilegeset_mark_all_illegal();
}
}
-static char *
-strip_tabs(char *dest, const char *src, size_t len)
+static void
+strip_tabs(char *dest, const char *src, size_t size)
{
char *d = dest;
if(dest == NULL || src == NULL)
- return NULL;
+ return;
- rb_strlcpy(dest, src, len);
+ rb_strlcpy(dest, src, size);
while(*d)
{
*d = ' ';
d++;
}
- return dest;
}
/*
{
char newlinebuf[BUFSIZE];
- strip_tabs(newlinebuf, yy_linebuf, strlen(yy_linebuf));
+ strip_tabs(newlinebuf, yy_linebuf, sizeof(newlinebuf));
ierror("\"%s\", line %d: %s at '%s'", conffilebuf, lineno + 1, msg, newlinebuf);
- sendto_realops_snomask(SNO_GENERAL, L_ALL, "\"%s\", line %d: %s at '%s'",
+ sendto_realops_snomask(SNO_GENERAL, L_NETWIDE, "\"%s\", line %d: %s at '%s'",
conffilebuf, lineno + 1, msg, newlinebuf);
}