From ad16c4920dff936c48e519f8aa8d2c68732d4116 Mon Sep 17 00:00:00 2001 From: Test_User Date: Thu, 10 Aug 2023 05:56:47 -0400 Subject: NOTICE, ssl_cert faking, /dev/null --- server_network.c | 61 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 61 insertions(+) (limited to 'server_network.c') diff --git a/server_network.c b/server_network.c index 342b254..3e8e6dd 100644 --- a/server_network.c +++ b/server_network.c @@ -813,6 +813,66 @@ int part_handler(struct string sender, uint64_t argc, struct string *argv) { return 0; } +int notice_handler(struct string sender, uint64_t argc, struct string *argv) { + if (argc < 2) { + WRITES(2, STRING("Invalid NOTICE received! (Missing parameters)\n")); + return 1; + } + + struct user_info *user = get_table_index(user_list, sender); + struct server_info *server; + if (user) + server = 0; + else + server = get_table_index(server_list, sender); + + if (!user && !server) { + WRITES(2, STRING("Invalid NOTICE received! (Unknown source)\n")); + return 1; + } + + if (argv[0].data[0] == '#') { + struct channel_info *channel = get_table_index(channel_list, argv[0]); + if (channel && has_table_index(channel->user_list, STRING("1HC000001"))) { + SENDCLIENT(STRING(":")); + if (user) { + SENDCLIENT(user->nick); + SENDCLIENT(STRING("!")); + SENDCLIENT(user->ident); + SENDCLIENT(STRING("@")); + SENDCLIENT(user->vhost); + } else { + SENDCLIENT(server->address); + } + + SENDCLIENT(STRING(" NOTICE ")); + SENDCLIENT(argv[0]); + SENDCLIENT(STRING(" :")); + SENDCLIENT(argv[1]); + SENDCLIENT(STRING("\r\n")); + } + } else if (STRING_EQ(argv[0], STRING("1HC000001"))) { + SENDCLIENT(STRING(":")); + if (user) { + SENDCLIENT(user->nick); + SENDCLIENT(STRING("!")); + SENDCLIENT(user->ident); + SENDCLIENT(STRING("@")); + SENDCLIENT(user->vhost); + } else { + SENDCLIENT(server->address); + } + + SENDCLIENT(STRING(" NOTICE ")); + SENDCLIENT(argv[0]); + SENDCLIENT(STRING(" :")); + SENDCLIENT(argv[1]); + SENDCLIENT(STRING("\r\n")); + } + + return 0; +} + int initservernetwork(void) { server_network_commands.array = malloc(0); server_list.array = malloc(0); @@ -830,6 +890,7 @@ int initservernetwork(void) { set_table_index(&server_network_commands, STRING("FJOIN"), &fjoin_handler); set_table_index(&server_network_commands, STRING("SQUIT"), &squit_handler); set_table_index(&server_network_commands, STRING("PART"), &part_handler); + set_table_index(&server_network_commands, STRING("NOTICE"), ¬ice_handler); init_user_commands(); -- cgit v1.2.3