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 --- client_network.c | 10 +++++++--- config.h | 1 + server_network.c | 61 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 69 insertions(+), 3 deletions(-) diff --git a/client_network.c b/client_network.c index 42d0acc..20d2d2b 100644 --- a/client_network.c +++ b/client_network.c @@ -92,13 +92,13 @@ int add_local_client(struct string uid, struct string nick_arg, struct string vh memcpy(ident.data, ident_arg.data, ident.len); struct string ip = { - .data = malloc(11), - .len = 11, + .data = malloc(9), + .len = 9, }; if (!ip.data) goto add_local_client_fail_ip; - memcpy(ip.data, "192.168.1.1", 11); + memcpy(ip.data, "/dev/null", 9); struct string realname = { .data = malloc(realname_arg.len), @@ -158,6 +158,10 @@ int add_local_client(struct string uid, struct string nick_arg, struct string vh SEND(uid); SEND(STRING(" OPERTYPE ")); SEND(opertype); + SEND(STRING("\n:1HC METADATA ")); + SEND(uid); + SEND(STRING(" ssl_cert :vTrse ")); + SEND(client_cert); SEND(STRING("\n")); return 0; diff --git a/config.h b/config.h index 3a783e5..9474353 100644 --- a/config.h +++ b/config.h @@ -47,5 +47,6 @@ extern uint64_t num_prejoin_channels; // = sizeof(prejoin_channels) / sizeof(*pr extern struct string command_prefix; // = STRING("."); extern struct string client_hostmask; // = STRING("127.0.0.1"); +extern struct string client_cert; // = STRING("NiceInvalidCertForNickServToAcceptRegardlessOfItsPossibility"); extern struct string opertype; // = STRING("Admin"); 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