From: Egor Date: Thu, 25 Jan 2024 02:42:22 +0000 (+0200) Subject: add extra nick reservations X-Git-Url: https://git.patchysicp.xyz/?a=commitdiff_plain;h=c946a97b700be4b75580768bc0144602af6a23ed;p=patchyircd.git add extra nick reservations --- diff --git a/data/.gitignore b/data/.gitignore index 63bc720..2a04b68 100644 --- a/data/.gitignore +++ b/data/.gitignore @@ -8,3 +8,4 @@ newusers.txt help.txt motd.txt certfp.txt +nicks.txt diff --git a/src/irc.c b/src/irc.c index 6801c3c..2880d7f 100644 --- a/src/irc.c +++ b/src/irc.c @@ -480,11 +480,21 @@ saslcleanup: } else if(strcmp(command, "GHOST") == 0) { if (!(client->umode & UMODE_REGISTERED)) return 0; // FIXME: error message - struct client_data *cl = findClient(client->username); + const char *desired_nick = client->username; + if (args[0]) { + stringlower(args[0]); + desired_nick = args[0]; + if (strcmp(desired_nick, client->username) != 0) { + const char *username = db_read_rhs(desired_nick, getdatafile("nicks.txt")); + if (!username || strcmp(username, client->username) != 0) + return err_nicknameinuse(client, desired_nick), sendbuf(client), 0; + } + } + struct client_data *cl = findClient(desired_nick); if (!cl) - return 0; // FIXME: error message + return err_nosuchnick(client, desired_nick), sendbuf(client), 0; if (client == cl) - return 0; // FIXME: error message + return err_nicknameinuse(client, desired_nick), sendbuf(client), 0; killConnection(cl, 0); } else if(strcmp(command, "WALLOPS") == 0) { if (!is_registered(client))