summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTest_User <hax@andrewyu.org>2023-08-10 05:56:47 -0400
committerTest_User <hax@andrewyu.org>2023-08-10 05:56:47 -0400
commitad16c4920dff936c48e519f8aa8d2c68732d4116 (patch)
treeb068a74392e7d31f2b1e31f7c079f794375e79a4
parent833f715ec2a6917c0afb4300e6505b135410ec3a (diff)
downloadcoupserv-ad16c4920dff936c48e519f8aa8d2c68732d4116.tar.gz
coupserv-ad16c4920dff936c48e519f8aa8d2c68732d4116.zip
NOTICE, ssl_cert faking, /dev/null
-rw-r--r--client_network.c10
-rw-r--r--config.h1
-rw-r--r--server_network.c61
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"), &notice_handler);
init_user_commands();