From e755e8b341eea1b37ef82584cd65a05edf8fdbaa Mon Sep 17 00:00:00 2001 From: Test_User Date: Thu, 18 Jul 2024 20:12:29 -0400 Subject: Partial nickname enforcement implemented --- protocols/inspircd2.c | 42 +++++++++++++++++++++++++++++++----------- 1 file changed, 31 insertions(+), 11 deletions(-) (limited to 'protocols/inspircd2.c') diff --git a/protocols/inspircd2.c b/protocols/inspircd2.c index b19960e..c11577e 100644 --- a/protocols/inspircd2.c +++ b/protocols/inspircd2.c @@ -639,14 +639,34 @@ void inspircd2_protocol_propagate_new_user(struct string from, struct user_info } // :source NICK -void inspircd2_protocol_propagate_rename_user(struct string from, struct user_info *user, struct string nick, size_t timestamp, struct string timestamp_str) { - inspircd2_protocol_propagate(from, STRING(":")); - inspircd2_protocol_propagate(from, user->uid); - inspircd2_protocol_propagate(from, STRING(" NICK ")); - inspircd2_protocol_propagate(from, nick); - inspircd2_protocol_propagate(from, STRING(" ")); - inspircd2_protocol_propagate(from, timestamp_str); - inspircd2_protocol_propagate(from, STRING("\n")); +void inspircd2_protocol_propagate_rename_user(struct string from, struct user_info *user, struct string nick, size_t timestamp, struct string timestamp_str, char forced, char immediate) { + if (forced) { + if (STRING_EQ(user->uid, nick)) { + inspircd2_protocol_propagate(from, STRING(":")); + inspircd2_protocol_propagate(from, from); + inspircd2_protocol_propagate(from, STRING(" SAVE ")); + inspircd2_protocol_propagate(from, user->uid); + inspircd2_protocol_propagate(from, STRING(" :")); + inspircd2_protocol_propagate(from, user->nick_ts_str); + inspircd2_protocol_propagate(from, STRING("\n")); + } else { + inspircd2_protocol_propagate(from, STRING(":")); + inspircd2_protocol_propagate(from, from); + inspircd2_protocol_propagate(from, STRING(" SANICK ")); + inspircd2_protocol_propagate(from, user->uid); + inspircd2_protocol_propagate(from, STRING(" :")); + inspircd2_protocol_propagate(from, nick); + inspircd2_protocol_propagate(from, STRING("\n")); + } + } else { + inspircd2_protocol_propagate(from, STRING(":")); + inspircd2_protocol_propagate(from, user->uid); + inspircd2_protocol_propagate(from, STRING(" NICK ")); + inspircd2_protocol_propagate(from, nick); + inspircd2_protocol_propagate(from, STRING(" ")); + inspircd2_protocol_propagate(from, timestamp_str); + inspircd2_protocol_propagate(from, STRING("\n")); + } } // :source QUIT [?] @@ -860,7 +880,7 @@ int inspircd2_protocol_handle_new_user(struct string from, struct user_info *inf return 0; } -int inspircd2_protocol_handle_rename_user(struct string from, struct user_info *info, struct string nick, size_t timestamp, struct string timestamp_str) { +int inspircd2_protocol_handle_rename_user(struct string from, struct user_info *info, struct string nick, size_t timestamp, struct string timestamp_str, char forced, char immediate) { return 0; } @@ -908,7 +928,7 @@ void inspircd2_protocol_fail_new_user(struct string from, struct user_info *info return; } -void inspircd2_protocol_fail_rename_user(struct string from, struct user_info *info, struct string nick, size_t timestamp, struct string timestamp_str) { +void inspircd2_protocol_fail_rename_user(struct string from, struct user_info *info, struct string nick, size_t timestamp, struct string timestamp_str, char forced, char immediate) { return; } @@ -1404,7 +1424,7 @@ int inspircd2_protocol_handle_nick(struct string source, size_t argc, struct str if (!user) return 0; // KILL timings, etc - if (rename_user(config->sid, user, argv[0], nick_ts) != 0) + if (rename_user(config->sid, user, argv[0], nick_ts, 0, 1) != 0) return -1; return 0; -- cgit v1.2.3