+ sendto_match_servs(user, "*.test", 0, CAP_BAN, "Hello %s!", "World");
+ is_client_sendq(":" TEST_ID " Hello World!" CRLF, server, MSG);
+ is_client_sendq(":" TEST_ID " Hello World!" CRLF, server2, MSG);
+ is_client_sendq_empty(server3, MSG);
+
+ sendto_match_servs(remote, "*.test", 0, CAP_BAN, "Hello %s!", "World");
+ is_client_sendq_empty(server, MSG);
+ is_client_sendq(":" TEST_REMOTE_ID " Hello World!" CRLF, server2, MSG);
+ is_client_sendq_empty(server3, MSG);
+
+ sendto_match_servs(server, "*.test", 0, CAP_BAN, "Hello %s!", "World");
+ is_client_sendq_empty(server, MSG);
+ is_client_sendq(":" TEST_SERVER_ID " Hello World!" CRLF, server2, MSG);
+ is_client_sendq_empty(server3, MSG);
+
+ // Match all, CAP_BAN but not CAP_KNOCK
+ sendto_match_servs(&me, "*.test", CAP_BAN, CAP_KNOCK, "Hello %s!", "World");
+ is_client_sendq_empty(server, MSG);
+ is_client_sendq_empty(server2, MSG);
+ is_client_sendq(":" TEST_ME_ID " Hello World!" CRLF, server3, MSG);
+
+ sendto_match_servs(user, "*.test", CAP_BAN, CAP_KNOCK, "Hello %s!", "World");
+ is_client_sendq_empty(server, MSG);
+ is_client_sendq_empty(server2, MSG);
+ is_client_sendq(":" TEST_ID " Hello World!" CRLF, server3, MSG);
+
+ sendto_match_servs(remote, "*.test", CAP_BAN, CAP_KNOCK, "Hello %s!", "World");
+ is_client_sendq_empty(server, MSG);
+ is_client_sendq_empty(server2, MSG);
+ is_client_sendq(":" TEST_REMOTE_ID " Hello World!" CRLF, server3, MSG);
+
+ sendto_match_servs(server, "*.test", CAP_BAN, CAP_KNOCK, "Hello %s!", "World");
+ is_client_sendq_empty(server, MSG);
+ is_client_sendq_empty(server2, MSG);
+ is_client_sendq(":" TEST_SERVER_ID " Hello World!" CRLF, server3, MSG);
+
+ // Match all, CAP_KNOCK
+ sendto_match_servs(&me, "*.test", CAP_KNOCK, 0, "Hello %s!", "World");
+ is_client_sendq_empty(server, MSG);
+ is_client_sendq(":" TEST_ME_ID " Hello World!" CRLF, server2, MSG);
+ is_client_sendq_empty(server3, MSG);
+
+ sendto_match_servs(user, "*.test", CAP_KNOCK, 0, "Hello %s!", "World");
+ is_client_sendq_empty(server, MSG);
+ is_client_sendq(":" TEST_ID " Hello World!" CRLF, server2, MSG);
+ is_client_sendq_empty(server3, MSG);
+
+ sendto_match_servs(remote, "*.test", CAP_KNOCK, 0, "Hello %s!", "World");
+ is_client_sendq_empty(server, MSG);
+ is_client_sendq(":" TEST_REMOTE_ID " Hello World!" CRLF, server2, MSG);
+ is_client_sendq_empty(server3, MSG);
+
+ sendto_match_servs(server, "*.test", CAP_KNOCK, 0, "Hello %s!", "World");
+ is_client_sendq_empty(server, MSG);
+ is_client_sendq(":" TEST_SERVER_ID " Hello World!" CRLF, server2, MSG);
+ is_client_sendq_empty(server3, MSG);
+
+ // Match none
+ sendto_match_servs(&me, "*.invalid", 0, 0, "Hello %s!", "World");
+ is_client_sendq_empty(server, MSG);
+ is_client_sendq_empty(server2, MSG);
+ is_client_sendq_empty(server3, MSG);
+
+ sendto_match_servs(user, "*.invalid", 0, 0, "Hello %s!", "World");
+ is_client_sendq_empty(server, MSG);
+ is_client_sendq_empty(server2, MSG);
+ is_client_sendq_empty(server3, MSG);
+
+ sendto_match_servs(remote, "*.invalid", 0, 0, "Hello %s!", "World");
+ is_client_sendq_empty(server, MSG);
+ is_client_sendq_empty(server2, MSG);
+ is_client_sendq_empty(server3, MSG);
+
+ sendto_match_servs(server, "*.invalid", 0, 0, "Hello %s!", "World");
+ is_client_sendq_empty(server, MSG);
+ is_client_sendq_empty(server2, MSG);
+ is_client_sendq_empty(server3, MSG);
+
+ standard_free();
+}
+
+static void sendto_match_servs1__tags(void)
+{
+ standard_init();
+
+ strcpy(user->user->suser, "test");
+ strcpy(remote->user->suser, "rtest");
+ user->localClient->caps |= CAP_ACCOUNT_TAG;
+ user->localClient->caps |= CAP_SERVER_TIME;
+
+ server->localClient->caps = CAP_ENCAP;
+ server2->localClient->caps = CAP_ENCAP;
+ server2->localClient->caps |= CAP_KNOCK;
+ server3->localClient->caps = CAP_BAN;
+
+ // This function does not support TS5...
+ standard_ids();
+
+ // Match all
+ sendto_match_servs(&me, "*.test", 0, 0, "Hello %s!", "World");
+ is_client_sendq(":" TEST_ME_ID " Hello World!" CRLF, server, MSG);
+ is_client_sendq(":" TEST_ME_ID " Hello World!" CRLF, server2, MSG);
+ is_client_sendq(":" TEST_ME_ID " Hello World!" CRLF, server3, MSG);
+
+ sendto_match_servs(user, "*.test", 0, 0, "Hello %s!", "World");
+ is_client_sendq(":" TEST_ID " Hello World!" CRLF, server, MSG);
+ is_client_sendq(":" TEST_ID " Hello World!" CRLF, server2, MSG);
+ is_client_sendq(":" TEST_ID " Hello World!" CRLF, server3, MSG);
+
+ sendto_match_servs(remote, "*.test", 0, 0, "Hello %s!", "World");
+ is_client_sendq_empty(server, MSG);
+ is_client_sendq(":" TEST_REMOTE_ID " Hello World!" CRLF, server2, MSG);
+ is_client_sendq(":" TEST_REMOTE_ID " Hello World!" CRLF, server3, MSG);
+
+ sendto_match_servs(server, "*.test", 0, 0, "Hello %s!", "World");
+ is_client_sendq_empty(server, MSG);
+ is_client_sendq(":" TEST_SERVER_ID " Hello World!" CRLF, server2, MSG);
+ is_client_sendq(":" TEST_SERVER_ID " Hello World!" CRLF, server3, MSG);
+
+ // Match all, CAP_ENCAP but not CAP_KNOCK
+ sendto_match_servs(&me, "*.test", CAP_ENCAP, CAP_KNOCK, "Hello %s!", "World");
+ is_client_sendq(":" TEST_ME_ID " Hello World!" CRLF, server, MSG);
+ is_client_sendq_empty(server2, MSG);
+ is_client_sendq_empty(server3, MSG);
+
+ sendto_match_servs(user, "*.test", CAP_ENCAP, CAP_KNOCK, "Hello %s!", "World");
+ is_client_sendq(":" TEST_ID " Hello World!" CRLF, server, MSG);
+ is_client_sendq_empty(server2, MSG);
+ is_client_sendq_empty(server3, MSG);
+
+ sendto_match_servs(remote, "*.test", CAP_ENCAP, CAP_KNOCK, "Hello %s!", "World");
+ is_client_sendq_empty(server, MSG);
+ is_client_sendq_empty(server2, MSG);
+ is_client_sendq_empty(server3, MSG);
+
+ sendto_match_servs(server, "*.test", CAP_ENCAP, CAP_KNOCK, "Hello %s!", "World");
+ is_client_sendq_empty(server, MSG);
+ is_client_sendq_empty(server2, MSG);
+ is_client_sendq_empty(server3, MSG);
+
+ // Match all, but not CAP_BAN
+ sendto_match_servs(&me, "*.test", 0, CAP_BAN, "Hello %s!", "World");
+ is_client_sendq(":" TEST_ME_ID " Hello World!" CRLF, server, MSG);
+ is_client_sendq(":" TEST_ME_ID " Hello World!" CRLF, server2, MSG);
+ is_client_sendq_empty(server3, MSG);
+
+ sendto_match_servs(user, "*.test", 0, CAP_BAN, "Hello %s!", "World");
+ is_client_sendq(":" TEST_ID " Hello World!" CRLF, server, MSG);
+ is_client_sendq(":" TEST_ID " Hello World!" CRLF, server2, MSG);
+ is_client_sendq_empty(server3, MSG);
+
+ sendto_match_servs(remote, "*.test", 0, CAP_BAN, "Hello %s!", "World");
+ is_client_sendq_empty(server, MSG);
+ is_client_sendq(":" TEST_REMOTE_ID " Hello World!" CRLF, server2, MSG);
+ is_client_sendq_empty(server3, MSG);
+
+ sendto_match_servs(server, "*.test", 0, CAP_BAN, "Hello %s!", "World");
+ is_client_sendq_empty(server, MSG);
+ is_client_sendq(":" TEST_SERVER_ID " Hello World!" CRLF, server2, MSG);
+ is_client_sendq_empty(server3, MSG);
+
+ // Match all, CAP_BAN but not CAP_KNOCK
+ sendto_match_servs(&me, "*.test", CAP_BAN, CAP_KNOCK, "Hello %s!", "World");
+ is_client_sendq_empty(server, MSG);
+ is_client_sendq_empty(server2, MSG);
+ is_client_sendq(":" TEST_ME_ID " Hello World!" CRLF, server3, MSG);
+
+ sendto_match_servs(user, "*.test", CAP_BAN, CAP_KNOCK, "Hello %s!", "World");
+ is_client_sendq_empty(server, MSG);
+ is_client_sendq_empty(server2, MSG);
+ is_client_sendq(":" TEST_ID " Hello World!" CRLF, server3, MSG);
+
+ sendto_match_servs(remote, "*.test", CAP_BAN, CAP_KNOCK, "Hello %s!", "World");
+ is_client_sendq_empty(server, MSG);
+ is_client_sendq_empty(server2, MSG);
+ is_client_sendq(":" TEST_REMOTE_ID " Hello World!" CRLF, server3, MSG);
+
+ sendto_match_servs(server, "*.test", CAP_BAN, CAP_KNOCK, "Hello %s!", "World");
+ is_client_sendq_empty(server, MSG);
+ is_client_sendq_empty(server2, MSG);
+ is_client_sendq(":" TEST_SERVER_ID " Hello World!" CRLF, server3, MSG);
+
+ // Match all, CAP_KNOCK
+ sendto_match_servs(&me, "*.test", CAP_KNOCK, 0, "Hello %s!", "World");
+ is_client_sendq_empty(server, MSG);
+ is_client_sendq(":" TEST_ME_ID " Hello World!" CRLF, server2, MSG);
+ is_client_sendq_empty(server3, MSG);
+
+ sendto_match_servs(user, "*.test", CAP_KNOCK, 0, "Hello %s!", "World");
+ is_client_sendq_empty(server, MSG);
+ is_client_sendq(":" TEST_ID " Hello World!" CRLF, server2, MSG);
+ is_client_sendq_empty(server3, MSG);
+
+ sendto_match_servs(remote, "*.test", CAP_KNOCK, 0, "Hello %s!", "World");
+ is_client_sendq_empty(server, MSG);
+ is_client_sendq(":" TEST_REMOTE_ID " Hello World!" CRLF, server2, MSG);
+ is_client_sendq_empty(server3, MSG);
+
+ sendto_match_servs(server, "*.test", CAP_KNOCK, 0, "Hello %s!", "World");
+ is_client_sendq_empty(server, MSG);
+ is_client_sendq(":" TEST_SERVER_ID " Hello World!" CRLF, server2, MSG);
+ is_client_sendq_empty(server3, MSG);
+
+ // Match none
+ sendto_match_servs(&me, "*.invalid", 0, 0, "Hello %s!", "World");
+ is_client_sendq_empty(server, MSG);
+ is_client_sendq_empty(server2, MSG);
+ is_client_sendq_empty(server3, MSG);
+
+ sendto_match_servs(user, "*.invalid", 0, 0, "Hello %s!", "World");
+ is_client_sendq_empty(server, MSG);
+ is_client_sendq_empty(server2, MSG);
+ is_client_sendq_empty(server3, MSG);
+
+ sendto_match_servs(remote, "*.invalid", 0, 0, "Hello %s!", "World");
+ is_client_sendq_empty(server, MSG);
+ is_client_sendq_empty(server2, MSG);
+ is_client_sendq_empty(server3, MSG);
+
+ sendto_match_servs(server, "*.invalid", 0, 0, "Hello %s!", "World");
+ is_client_sendq_empty(server, MSG);
+ is_client_sendq_empty(server2, MSG);
+ is_client_sendq_empty(server3, MSG);
+
+ standard_free();
+}
+
+static void sendto_realops_snomask1(void)
+{
+ struct Client *oper1 = make_local_person_nick("oper1");
+ struct Client *oper2 = make_local_person_nick("oper2");
+ struct Client *oper3 = make_local_person_nick("oper3");
+ struct Client *oper4 = make_local_person_nick("oper4");
+
+ standard_init();
+
+ make_local_person_oper(oper1);
+ make_local_person_oper(oper2);
+ make_local_person_oper(oper3);
+ make_local_person_oper(oper4);
+
+ oper1->snomask = SNO_BOTS | SNO_SKILL;
+ oper2->snomask = SNO_GENERAL | SNO_REJ;
+ oper3->snomask = SNO_BOTS | SNO_SKILL;
+ oper4->snomask = SNO_GENERAL | SNO_REJ;
+
+ oper3->user->privset = privilegeset_get("admin");
+ oper4->user->privset = privilegeset_get("admin");
+
+ server->localClient->caps = CAP_ENCAP | CAP_TS6;
+ server2->localClient->caps = 0;
+
+ ConfigFileEntry.global_snotices = 0;
+ remote_rehash_oper_p = NULL;
+
+ sendto_realops_snomask(SNO_BOTS, L_ALL, "Hello %s!", "World");
+ is_client_sendq(":" TEST_ME_NAME " NOTICE * :*** Notice -- Hello World!" CRLF, oper1, "Matches mask; " MSG);
+ is_client_sendq_empty(oper2, "Doesn't match mask; " MSG);
+ is_client_sendq(":" TEST_ME_NAME " NOTICE * :*** Notice -- Hello World!" CRLF, oper3, "Matches mask; " MSG);
+ is_client_sendq_empty(oper4, "Doesn't match mask; " MSG);
+ is_client_sendq_empty(server, MSG);
+
+ sendto_realops_snomask(SNO_BOTS, L_ADMIN, "Hello %s!", "World");
+ is_client_sendq_empty(oper1, "Not an admin; " MSG);
+ is_client_sendq_empty(oper2, "Doesn't match mask; " MSG);
+ is_client_sendq(":" TEST_ME_NAME " NOTICE * :*** Notice -- Hello World!" CRLF, oper3, "Matches mask; " MSG);
+ is_client_sendq_empty(oper4, "Doesn't match mask; " MSG);
+ is_client_sendq_empty(server, MSG);
+
+ sendto_realops_snomask(SNO_BOTS, L_OPER, "Hello %s!", "World");
+ is_client_sendq(":" TEST_ME_NAME " NOTICE * :*** Notice -- Hello World!" CRLF, oper1, "Matches mask; " MSG);
+ is_client_sendq_empty(oper2, "Doesn't match mask; " MSG);
+ is_client_sendq_empty(oper3, "Not an oper; " MSG);
+ is_client_sendq_empty(oper4, "Doesn't match mask; " MSG);
+ is_client_sendq_empty(server, MSG);
+
+ sendto_realops_snomask(SNO_GENERAL, L_ALL, "Hello %s!", "World");
+ is_client_sendq_empty(oper1, "Doesn't match mask; " MSG);
+ is_client_sendq(":" TEST_ME_NAME " NOTICE * :*** Notice -- Hello World!" CRLF, oper2, "Matches mask; " MSG);
+ is_client_sendq_empty(oper3, "Doesn't match mask; " MSG);
+ is_client_sendq(":" TEST_ME_NAME " NOTICE * :*** Notice -- Hello World!" CRLF, oper4, "Matches mask; " MSG);
+ is_client_sendq_empty(server, MSG);
+
+ sendto_realops_snomask(SNO_GENERAL, L_ADMIN, "Hello %s!", "World");
+ is_client_sendq_empty(oper1, "Doesn't match mask; " MSG);
+ is_client_sendq_empty(oper2, "Not an admin; " MSG);
+ is_client_sendq_empty(oper3, "Doesn't match mask; " MSG);
+ is_client_sendq(":" TEST_ME_NAME " NOTICE * :*** Notice -- Hello World!" CRLF, oper4, "Matches mask; " MSG);
+ is_client_sendq_empty(server, MSG);
+
+ sendto_realops_snomask(SNO_GENERAL, L_OPER, "Hello %s!", "World");
+ is_client_sendq_empty(oper1, "Doesn't match mask; " MSG);
+ is_client_sendq(":" TEST_ME_NAME " NOTICE * :*** Notice -- Hello World!" CRLF, oper2, "Matches mask; " MSG);
+ is_client_sendq_empty(oper3, "Doesn't match mask; " MSG);
+ is_client_sendq_empty(oper4, "Not an oper; " MSG);
+ is_client_sendq_empty(server, MSG);
+
+ remote_rehash_oper_p = remote;
+
+ sendto_realops_snomask(SNO_BOTS, L_ALL, "Hello %s!", "World");
+ is_client_sendq(":" TEST_ME_NAME " NOTICE * :*** Notice -- Hello World!" CRLF, oper1, "Matches mask; " MSG);
+ is_client_sendq_empty(oper2, "Doesn't match mask; " MSG);
+ is_client_sendq(":" TEST_ME_NAME " NOTICE * :*** Notice -- Hello World!" CRLF, oper3, "Matches mask; " MSG);
+ is_client_sendq_empty(oper4, "Doesn't match mask; " MSG);
+ is_client_sendq(":" TEST_ME_NAME " NOTICE " TEST_REMOTE_NICK " :*** Notice -- Hello World!" CRLF, server, MSG);
+
+ sendto_realops_snomask(SNO_BOTS, L_ADMIN, "Hello %s!", "World");
+ is_client_sendq_empty(oper1, "Not an admin; " MSG);
+ is_client_sendq_empty(oper2, "Doesn't match mask; " MSG);
+ is_client_sendq(":" TEST_ME_NAME " NOTICE * :*** Notice -- Hello World!" CRLF, oper3, "Matches mask; " MSG);
+ is_client_sendq_empty(oper4, "Doesn't match mask; " MSG);
+ is_client_sendq(":" TEST_ME_NAME " NOTICE " TEST_REMOTE_NICK " :*** Notice -- Hello World!" CRLF, server, MSG);
+
+ sendto_realops_snomask(SNO_BOTS, L_OPER, "Hello %s!", "World");
+ is_client_sendq(":" TEST_ME_NAME " NOTICE * :*** Notice -- Hello World!" CRLF, oper1, "Matches mask; " MSG);
+ is_client_sendq_empty(oper2, "Doesn't match mask; " MSG);
+ is_client_sendq_empty(oper3, "Not an oper; " MSG);
+ is_client_sendq_empty(oper4, "Doesn't match mask; " MSG);
+ is_client_sendq(":" TEST_ME_NAME " NOTICE " TEST_REMOTE_NICK " :*** Notice -- Hello World!" CRLF, server, MSG);
+
+ sendto_realops_snomask(SNO_GENERAL, L_ALL, "Hello %s!", "World");
+ is_client_sendq_empty(oper1, "Doesn't match mask; " MSG);
+ is_client_sendq(":" TEST_ME_NAME " NOTICE * :*** Notice -- Hello World!" CRLF, oper2, "Matches mask; " MSG);
+ is_client_sendq_empty(oper3, "Doesn't match mask; " MSG);
+ is_client_sendq(":" TEST_ME_NAME " NOTICE * :*** Notice -- Hello World!" CRLF, oper4, "Matches mask; " MSG);
+ is_client_sendq(":" TEST_ME_NAME " NOTICE " TEST_REMOTE_NICK " :*** Notice -- Hello World!" CRLF, server, MSG);
+
+ sendto_realops_snomask(SNO_GENERAL, L_ADMIN, "Hello %s!", "World");
+ is_client_sendq_empty(oper1, "Doesn't match mask; " MSG);
+ is_client_sendq_empty(oper2, "Not an admin; " MSG);
+ is_client_sendq_empty(oper3, "Doesn't match mask; " MSG);
+ is_client_sendq(":" TEST_ME_NAME " NOTICE * :*** Notice -- Hello World!" CRLF, oper4, "Matches mask; " MSG);
+ is_client_sendq(":" TEST_ME_NAME " NOTICE " TEST_REMOTE_NICK " :*** Notice -- Hello World!" CRLF, server, MSG);
+
+ sendto_realops_snomask(SNO_GENERAL, L_OPER, "Hello %s!", "World");
+ is_client_sendq_empty(oper1, "Doesn't match mask; " MSG);
+ is_client_sendq(":" TEST_ME_NAME " NOTICE * :*** Notice -- Hello World!" CRLF, oper2, "Matches mask; " MSG);
+ is_client_sendq_empty(oper3, "Doesn't match mask; " MSG);
+ is_client_sendq_empty(oper4, "Not an oper; " MSG);
+ is_client_sendq(":" TEST_ME_NAME " NOTICE " TEST_REMOTE_NICK " :*** Notice -- Hello World!" CRLF, server, MSG);