]> jfr.im git - solanum.git/blobdiff - ircd/s_serv.c
ircd: do not shadow internal openssl symbol "ssl_ok" (yeah, i know)
[solanum.git] / ircd / s_serv.c
index 92e6a60466efc19284bcd61523ec9e0ca502c4bc..208a6fe16ef0c7366ac95bad017f235153c926ce 100644 (file)
@@ -20,8 +20,6 @@
  *  along with this program; if not, write to the Free Software
  *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307
  *  USA
- *
- *  $Id: s_serv.c 3550 2007-08-09 06:47:26Z nenolod $
  */
 
 #include "stdinc.h"
@@ -40,7 +38,6 @@
 #include "ircd_defs.h"
 #include "numeric.h"
 #include "packet.h"
-#include "res.h"
 #include "s_conf.h"
 #include "s_newconf.h"
 #include "logger.h"
@@ -73,6 +70,7 @@ static char buf[BUFSIZE];
  * extra argument to "PASS" takes care of checking that.  -orabidoo
  */
 struct CapabilityIndex *serv_capindex = NULL;
+struct CapabilityIndex *cli_capindex = NULL;
 
 unsigned int CAP_CAP;
 unsigned int CAP_QS;
@@ -95,6 +93,15 @@ unsigned int CAP_EOPMOD;
 unsigned int CAP_BAN;
 unsigned int CAP_MLOCK;
 
+unsigned int CLICAP_MULTI_PREFIX;
+unsigned int CLICAP_ACCOUNT_NOTIFY;
+unsigned int CLICAP_EXTENDED_JOIN;
+unsigned int CLICAP_AWAY_NOTIFY;
+unsigned int CLICAP_USERHOST_IN_NAMES;
+unsigned int CLICAP_CAP_NOTIFY;
+unsigned int CLICAP_CHGHOST;
+unsigned int CLICAP_ECHO_MESSAGE;
+
 /*
  * initialize our builtin capability table. --nenolod
  */
@@ -107,29 +114,40 @@ init_builtin_capabs(void)
        CAP_CAP = capability_put_anonymous(serv_capindex);
        CAP_TS6 = capability_put_anonymous(serv_capindex);
 
-       CAP_QS = capability_put(serv_capindex, "QS");
-       CAP_EX = capability_put(serv_capindex, "EX");
-       CAP_CHW = capability_put(serv_capindex, "CHW");
-       CAP_IE = capability_put(serv_capindex, "IE");
-       CAP_KLN = capability_put(serv_capindex, "KLN");
-       CAP_KNOCK = capability_put(serv_capindex, "KNOCK");
-       CAP_ZIP = capability_put(serv_capindex, "ZIP");
-       CAP_TB = capability_put(serv_capindex, "TB");
-       CAP_UNKLN = capability_put(serv_capindex, "UNKLN");
-       CAP_CLUSTER = capability_put(serv_capindex, "CLUSTER");
-       CAP_ENCAP = capability_put(serv_capindex, "ENCAP");
-       CAP_SERVICE = capability_put(serv_capindex, "SERVICES");
-       CAP_RSFNC = capability_put(serv_capindex, "RSFNC");
-       CAP_SAVE = capability_put(serv_capindex, "SAVE");
-       CAP_EUID = capability_put(serv_capindex, "EUID");
-       CAP_EOPMOD = capability_put(serv_capindex, "EOPMOD");
-       CAP_BAN = capability_put(serv_capindex, "BAN");
-       CAP_MLOCK = capability_put(serv_capindex, "MLOCK");
+       CAP_QS = capability_put(serv_capindex, "QS", NULL);
+       CAP_EX = capability_put(serv_capindex, "EX", NULL);
+       CAP_CHW = capability_put(serv_capindex, "CHW", NULL);
+       CAP_IE = capability_put(serv_capindex, "IE", NULL);
+       CAP_KLN = capability_put(serv_capindex, "KLN", NULL);
+       CAP_KNOCK = capability_put(serv_capindex, "KNOCK", NULL);
+       CAP_ZIP = capability_put(serv_capindex, "ZIP", NULL);
+       CAP_TB = capability_put(serv_capindex, "TB", NULL);
+       CAP_UNKLN = capability_put(serv_capindex, "UNKLN", NULL);
+       CAP_CLUSTER = capability_put(serv_capindex, "CLUSTER", NULL);
+       CAP_ENCAP = capability_put(serv_capindex, "ENCAP", NULL);
+       CAP_SERVICE = capability_put(serv_capindex, "SERVICES", NULL);
+       CAP_RSFNC = capability_put(serv_capindex, "RSFNC", NULL);
+       CAP_SAVE = capability_put(serv_capindex, "SAVE", NULL);
+       CAP_EUID = capability_put(serv_capindex, "EUID", NULL);
+       CAP_EOPMOD = capability_put(serv_capindex, "EOPMOD", NULL);
+       CAP_BAN = capability_put(serv_capindex, "BAN", NULL);
+       CAP_MLOCK = capability_put(serv_capindex, "MLOCK", NULL);
 
        capability_require(serv_capindex, "QS");
        capability_require(serv_capindex, "EX");
        capability_require(serv_capindex, "IE");
        capability_require(serv_capindex, "ENCAP");
+
+       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_CAP_NOTIFY = capability_put(cli_capindex, "cap-notify", NULL);
+       CLICAP_CHGHOST = capability_put(cli_capindex, "chghost", NULL);
+       CLICAP_ECHO_MESSAGE = capability_put(cli_capindex, "echo-message", NULL);
 }
 
 static CNCB serv_connect_callback;
@@ -243,7 +261,7 @@ try_connections(void *unused)
        struct server_conf *tmp_p;
        struct Class *cltmp;
        rb_dlink_node *ptr;
-       int connecting = FALSE;
+       bool connecting = false;
        int confrq = 0;
        time_t next = 0;
 
@@ -255,7 +273,7 @@ try_connections(void *unused)
                        continue;
 
                /* don't allow ssl connections if ssl isn't setup */
-               if(ServerConfSSL(tmp_p) && (!ssl_ok || !get_ssld_count()))
+               if(ServerConfSSL(tmp_p) && (!ircd_ssl_ok || !get_ssld_count()))
                        continue;
 
                cltmp = tmp_p->class;
@@ -288,7 +306,7 @@ try_connections(void *unused)
                        server_p = tmp_p;
 
                        /* We connect only one at time... */
-                       connecting = TRUE;
+                       connecting = true;
                }
 
                if((next > tmp_p->hold) || (next == 0))
@@ -418,7 +436,6 @@ check_server(const char *name, struct Client *client_p)
  *             - int flag of capabilities that this server has
  * output      - NONE
  * side effects        - send the CAPAB line to a server  -orabidoo
- *
  */
 void
 send_capabilities(struct Client *client_p, unsigned int cap_can_send)
@@ -504,7 +521,7 @@ burst_modes_TS6(struct Client *client_p, struct Channel *chptr,
        int mlen;
        int cur_len;
 
-       cur_len = mlen = rb_sprintf(buf, ":%s BMASK %ld %s %c :",
+       cur_len = mlen = sprintf(buf, ":%s BMASK %ld %s %c :",
                                    me.id, (long) chptr->channelts, chptr->chname, flag);
        t = buf + mlen;
 
@@ -532,9 +549,9 @@ burst_modes_TS6(struct Client *client_p, struct Channel *chptr,
                }
 
                if (banptr->forward)
-                       rb_sprintf(t, "%s$%s ", banptr->banstr, banptr->forward);
+                       sprintf(t, "%s$%s ", banptr->banstr, banptr->forward);
                else
-                       rb_sprintf(t, "%s ", banptr->banstr);
+                       sprintf(t, "%s ", banptr->banstr);
                t += tlen;
                cur_len += tlen;
        }
@@ -635,7 +652,7 @@ burst_TS6(struct Client *client_p)
                if(*chptr->chname != '#')
                        continue;
 
-               cur_len = mlen = rb_sprintf(buf, ":%s SJOIN %ld %s %s :", me.id,
+               cur_len = mlen = sprintf(buf, ":%s SJOIN %ld %s %s :", me.id,
                                (long) chptr->channelts, chptr->chname,
                                channel_modes(chptr, client_p));
 
@@ -659,7 +676,7 @@ burst_TS6(struct Client *client_p)
                                t = buf + mlen;
                        }
 
-                       rb_sprintf(t, "%s%s ", find_channel_status(msptr, 1),
+                       sprintf(t, "%s%s ", find_channel_status(msptr, 1),
                                   use_id(msptr->client_p));
 
                        cur_len += tlen;
@@ -869,7 +886,7 @@ server_estab(struct Client *client_p)
        hdata.target = client_p;
        call_hook(h_server_introduced, &hdata);
 
-       rb_snprintf(note, sizeof(note), "Server: %s", client_p->name);
+       snprintf(note, sizeof(note), "Server: %s", client_p->name);
        rb_note(client_p->localClient->F, note);
 
        /*
@@ -974,7 +991,7 @@ server_estab(struct Client *client_p)
 /*
  * serv_connect() - initiate a server connection
  *
- * inputs      - pointer to conf 
+ * inputs      - pointer to conf
  *             - pointer to client doing the connet
  * output      -
  * side effects        -
@@ -1026,7 +1043,7 @@ serv_connect(struct server_conf *server_p, struct Client *by)
        }
 
        /* servernames are always guaranteed under HOSTLEN chars */
-       rb_snprintf(note, sizeof(note), "Server: %s", server_p->name);
+       snprintf(note, sizeof(note), "Server: %s", server_p->name);
        rb_note(F, note);
 
        /* Create a local client */
@@ -1037,7 +1054,6 @@ serv_connect(struct server_conf *server_p, struct Client *by)
        rb_strlcpy(client_p->host, server_p->host, sizeof(client_p->host));
        rb_strlcpy(client_p->sockhost, buf, sizeof(client_p->sockhost));
        client_p->localClient->F = F;
-       add_to_cli_connid_hash(client_p);
        /* shove the port number into the sockaddr */
 #ifdef RB_IPV6
        if(GET_SS_FAMILY(&server_p->my_ipnum) == AF_INET6)
@@ -1153,11 +1169,14 @@ serv_connect_ssl_callback(rb_fde_t *F, int status, void *data)
                return;
 
        }
-       del_from_cli_connid_hash(client_p);
        client_p->localClient->F = xF[0];
-       add_to_cli_connid_hash(client_p);
 
        client_p->localClient->ssl_ctl = start_ssld_connect(F, xF[1], rb_get_fd(xF[0]));
+       if(!client_p->localClient->ssl_ctl)
+       {
+               serv_connect_callback(client_p->localClient->F, RB_ERROR, data);
+               return;
+       }
        SetSSL(client_p);
        serv_connect_callback(client_p->localClient->F, RB_OK, client_p);
 }