X-Git-Url: https://jfr.im/git/solanum.git/blobdiff_plain/5203cba5cea34030f9775b6fac1263aacfa37b82..573896f6394104e46e8f6f1fccfd9ce0eaac65a8:/ircd/s_serv.c diff --git a/ircd/s_serv.c b/ircd/s_serv.c index f3e59389..448965a8 100644 --- a/ircd/s_serv.c +++ b/ircd/s_serv.c @@ -72,6 +72,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; @@ -94,6 +95,16 @@ unsigned int CAP_EOPMOD; unsigned int CAP_BAN; unsigned int CAP_MLOCK; +unsigned int CLICAP_MULTI_PREFIX; +unsigned int CLICAP_SASL; +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 */ @@ -106,29 +117,41 @@ 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_SASL = capability_put(cli_capindex, "sasl", 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; @@ -1157,6 +1180,11 @@ serv_connect_ssl_callback(rb_fde_t *F, int status, void *data) 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); }