} 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))