void
init_builtin_capabs(void)
{
+ static struct ClientCapability high_priority = {.flags = CLICAP_FLAGS_PRIORITY};
serv_capindex = capability_index_create("server capabilities");
/* These two are not set via CAPAB/GCAP keywords. */
cli_capindex = capability_index_create("client capabilities");
- CLICAP_MULTI_PREFIX = capability_put(cli_capindex, "multi-prefix", NULL);
- CLICAP_ACCOUNT_NOTIFY = capability_put(cli_capindex, "account-notify", NULL);
- CLICAP_EXTENDED_JOIN = capability_put(cli_capindex, "extended-join", NULL);
- CLICAP_AWAY_NOTIFY = capability_put(cli_capindex, "away-notify", NULL);
- CLICAP_USERHOST_IN_NAMES = capability_put(cli_capindex, "userhost-in-names", NULL);
+ CLICAP_MULTI_PREFIX = capability_put(cli_capindex, "multi-prefix", &high_priority);
+ CLICAP_ACCOUNT_NOTIFY = capability_put(cli_capindex, "account-notify", &high_priority);
+ CLICAP_EXTENDED_JOIN = capability_put(cli_capindex, "extended-join", &high_priority);
+ CLICAP_AWAY_NOTIFY = capability_put(cli_capindex, "away-notify", &high_priority);
+ CLICAP_USERHOST_IN_NAMES = capability_put(cli_capindex, "userhost-in-names", &high_priority);
CLICAP_CAP_NOTIFY = capability_put(cli_capindex, "cap-notify", NULL);
- CLICAP_CHGHOST = capability_put(cli_capindex, "chghost", NULL);
+ CLICAP_CHGHOST = capability_put(cli_capindex, "chghost", &high_priority);
CLICAP_ECHO_MESSAGE = capability_put(cli_capindex, "echo-message", NULL);
}
* error afterwards if it fails.
* -- adrian
*/
- sendto_realops_snomask(SNO_GENERAL, L_ALL,
+ sendto_realops_snomask(SNO_GENERAL, L_NETWIDE,
"Connection to %s activated",
server_p->name);
{
rb_dlink_node *ptr;
struct ConfItem *aconf;
- const char *type, *oper;
- /* +5 for !,@,{,} and null */
- char operbuf[NICKLEN + USERLEN + HOSTLEN + HOSTLEN + 5];
- char *p;
- size_t melen;
+ const char *type;
- melen = strlen(me.name);
RB_DLINK_FOREACH(ptr, prop_bans.head)
{
aconf = ptr->data;
default:
continue;
}
- oper = aconf->info.oper;
- if(aconf->flags & CONF_FLAGS_MYOPER)
- {
- /* Our operator{} names may not be meaningful
- * to other servers, so rewrite to our server
- * name.
- */
- rb_strlcpy(operbuf, aconf->info.oper, sizeof operbuf);
- p = strrchr(operbuf, '{');
- if (p != NULL &&
- operbuf + sizeof operbuf - p > (ptrdiff_t)(melen + 2))
- {
- memcpy(p + 1, me.name, melen);
- p[melen + 1] = '}';
- p[melen + 2] = '\0';
- oper = operbuf;
- }
- }
sendto_one(client_p, ":%s BAN %s %s %s %lu %d %d %s :%s%s%s",
me.id,
type,
(unsigned long)aconf->created,
(int)(aconf->hold - aconf->created),
(int)(aconf->lifetime - aconf->created),
- oper,
+ aconf->info.oper,
aconf->passwd,
aconf->spasswd ? "|" : "",
aconf->spasswd ? aconf->spasswd : "");
{
rb_dlink_node *ptr;
struct Ban *banptr;
- char *t;
- int tlen;
- int mlen;
- int cur_len;
- cur_len = mlen = sprintf(buf, ":%s BMASK %ld %s %c :",
- me.id, (long) chptr->channelts, chptr->chname, flag);
- t = buf + mlen;
+ send_multiline_init(client_p, " ", ":%s BMASK %ld %s %c :",
+ me.id,
+ (long)chptr->channelts,
+ chptr->chname,
+ flag);
- RB_DLINK_FOREACH(ptr, list->head)
+ RB_DLINK_FOREACH_PREV(ptr, list->tail)
{
banptr = ptr->data;
- tlen = strlen(banptr->banstr) + (banptr->forward ? strlen(banptr->forward) + 1 : 0) + 1;
-
- /* uh oh */
- if(cur_len + tlen > BUFSIZE - 3)
- {
- /* the one we're trying to send doesnt fit at all! */
- if(cur_len == mlen)
- {
- s_assert(0);
- continue;
- }
-
- /* chop off trailing space and send.. */
- *(t-1) = '\0';
- sendto_one(client_p, "%s", buf);
- cur_len = mlen;
- t = buf + mlen;
- }
-
if (banptr->forward)
- sprintf(t, "%s$%s ", banptr->banstr, banptr->forward);
+ send_multiline_item(client_p, "%s$%s",
+ banptr->banstr,
+ banptr->forward);
else
- sprintf(t, "%s ", banptr->banstr);
- t += tlen;
- cur_len += tlen;
+ send_multiline_item(client_p, "%s", banptr->banstr);
}
- /* cant ever exit the loop above without having modified buf,
- * chop off trailing space and send.
- */
- *(t-1) = '\0';
- sendto_one(client_p, "%s", buf);
+ send_multiline_fini(client_p, NULL);
}
/*
use_id(target_p),
target_p->user->away);
- if(IsOper(target_p) && target_p->user && target_p->user->opername && target_p->user->privset)
- sendto_one(client_p, ":%s OPER %s %s",
- use_id(target_p),
- target_p->user->opername,
- target_p->user->privset->name);
+ if (IsOper(target_p) && target_p->user && target_p->user->opername)
+ {
+ if (target_p->user->privset)
+ sendto_one(client_p, ":%s OPER %s %s",
+ use_id(target_p),
+ target_p->user->opername,
+ target_p->user->privset->name);
+ else
+ sendto_one(client_p, ":%s OPER %s",
+ use_id(target_p),
+ target_p->user->opername);
+ }
hclientinfo.target = target_p;
call_hook(h_burst_client, &hclientinfo);
if((server_p = client_p->localClient->att_sconf) == NULL)
{
/* This shouldn't happen, better tell the ops... -A1kmm */
- sendto_realops_snomask(SNO_GENERAL, is_remote_connect(client_p) ? L_NETWIDE : L_ALL,
+ sendto_realops_snomask(SNO_GENERAL, L_NETWIDE,
"Warning: Lost connect{} block for server %s!", host);
return exit_client(client_p, client_p, client_p, "Lost connect{} block!");
}
*/
if((client_p = find_server(NULL, server_p->name)))
{
- sendto_realops_snomask(SNO_GENERAL, L_ALL,
+ sendto_realops_snomask(SNO_GENERAL, L_NETWIDE,
"Server %s already present from %s",
server_p->name, client_p->name);
if(by && IsPerson(by) && !MyClient(by))
}
if (CurrUsers(server_p->class) >= MaxUsers(server_p->class)) {
- sendto_realops_snomask(SNO_GENERAL, L_ALL,
+ sendto_realops_snomask(SNO_GENERAL, L_NETWIDE,
"No more connections allowed in class \"%s\" for server %s",
server_p->class->class_name, server_p->name);
if(by && IsPerson(by) && !MyClient(by))
*/
if(status == RB_ERR_TIMEOUT || status == RB_ERROR_SSL)
{
- sendto_realops_snomask(SNO_GENERAL, is_remote_connect(client_p) ? L_NETWIDE : L_ALL,
+ sendto_realops_snomask(SNO_GENERAL, L_NETWIDE,
"Error connecting to %s[%s]: %s",
client_p->name,
"255.255.255.255",
else
{
errstr = strerror(rb_get_sockerr(F));
- sendto_realops_snomask(SNO_GENERAL, is_remote_connect(client_p) ? L_NETWIDE : L_ALL,
+ sendto_realops_snomask(SNO_GENERAL, L_NETWIDE,
"Error connecting to %s[%s]: %s (%s)",
client_p->name,
"255.255.255.255",
/* Get the C/N lines */
if((server_p = client_p->localClient->att_sconf) == NULL)
{
- sendto_realops_snomask(SNO_GENERAL, is_remote_connect(client_p) ? L_NETWIDE : L_ALL, "Lost connect{} block for %s",
+ sendto_realops_snomask(SNO_GENERAL, L_NETWIDE, "Lost connect{} block for %s",
client_p->name);
exit_client(client_p, client_p, &me, "Lost connect{} block");
return;
if(server_p->certfp && (!client_p->certfp || rb_strcasecmp(server_p->certfp, client_p->certfp) != 0))
{
- sendto_realops_snomask(SNO_GENERAL, is_remote_connect(client_p) ? L_NETWIDE : L_ALL,
+ sendto_realops_snomask(SNO_GENERAL, L_NETWIDE,
"Connection to %s has invalid certificate fingerprint %s",
client_p->name, client_p->certfp);
ilog(L_SERVER, "Access denied, invalid certificate fingerprint %s from %s",
*/
if(IsAnyDead(client_p))
{
- sendto_realops_snomask(SNO_GENERAL, is_remote_connect(client_p) ? L_NETWIDE : L_ALL,
+ sendto_realops_snomask(SNO_GENERAL, L_NETWIDE,
"%s went dead during handshake", client_p->name);
exit_client(client_p, client_p, &me, "Went dead during handshake");
return;