]> jfr.im git - solanum.git/blobdiff - ircd/s_serv.c
iter lists backwards when sending BMASK
[solanum.git] / ircd / s_serv.c
index bc77b43ca7f2219372ca5a365a595747e9f7023d..8351134937ca03e03cbb3bceec85f07cf4d6abcf 100644 (file)
@@ -103,6 +103,7 @@ unsigned int CLICAP_ECHO_MESSAGE;
 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. */
@@ -135,13 +136,13 @@ init_builtin_capabs(void)
 
        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);
 }
 
@@ -297,7 +298,7 @@ try_connections(void *unused)
                 */
                client_p = find_server(NULL, tmp_p->name);
 
-               if(!client_p && (CurrUsers(cltmp) < MaxUsers(cltmp)) && !connecting)
+               if(!client_p && (CurrUsers(cltmp) < MaxAutoconn(cltmp)) && !connecting)
                {
                        server_p = tmp_p;
 
@@ -329,7 +330,7 @@ try_connections(void *unused)
         * 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);
 
@@ -550,7 +551,7 @@ burst_modes_TS6(struct Client *client_p, struct Channel *chptr,
                                    me.id, (long) chptr->channelts, chptr->chname, flag);
        t = buf + mlen;
 
-       RB_DLINK_FOREACH(ptr, list->head)
+       RB_DLINK_FOREACH_PREV(ptr, list->tail)
        {
                banptr = ptr->data;
 
@@ -669,6 +670,12 @@ burst_TS6(struct Client *client_p)
                                   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);
+
                hclientinfo.target = target_p;
                call_hook(h_burst_client, &hclientinfo);
        }
@@ -807,7 +814,7 @@ server_estab(struct Client *client_p)
        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!");
        }
@@ -1099,7 +1106,7 @@ serv_connect(struct server_conf *server_p, struct Client *by)
         */
        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))
@@ -1109,7 +1116,7 @@ serv_connect(struct server_conf *server_p, struct Client *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))
@@ -1295,7 +1302,7 @@ serv_connect_callback(rb_fde_t *F, int status, void *data)
                 */
                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",
@@ -1307,7 +1314,7 @@ serv_connect_callback(rb_fde_t *F, int status, void *data)
                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",
@@ -1325,7 +1332,7 @@ serv_connect_callback(rb_fde_t *F, int status, void *data)
        /* 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;
@@ -1333,7 +1340,7 @@ serv_connect_callback(rb_fde_t *F, int status, void *data)
 
        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",
@@ -1365,7 +1372,7 @@ serv_connect_callback(rb_fde_t *F, int status, void *data)
         */
        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;