aboutsummaryrefslogtreecommitdiff
path: root/protocols/inspircd2.c
diff options
context:
space:
mode:
authorTest_User <hax@andrewyu.org>2024-07-18 20:12:29 -0400
committerTest_User <hax@andrewyu.org>2024-07-18 20:32:10 -0400
commite755e8b341eea1b37ef82584cd65a05edf8fdbaa (patch)
tree63862f2609e7470ec3cb432b416626b90fe6f3f8 /protocols/inspircd2.c
parent925da4ee0c7364900e67c1c6ce4a1323166d5198 (diff)
downloadhaxircd-e755e8b341eea1b37ef82584cd65a05edf8fdbaa.tar.gz
haxircd-e755e8b341eea1b37ef82584cd65a05edf8fdbaa.zip
Partial nickname enforcement implemented
Diffstat (limited to 'protocols/inspircd2.c')
-rw-r--r--protocols/inspircd2.c42
1 files changed, 31 insertions, 11 deletions
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 <nick> <timestamp>
-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 [<reason>?]
@@ -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;