copy_strf(&databuf, ":%s 004 %s PatchyIRCD 0.0.1 i nt\n", hostname, client->nick);
send_log(client->FD, databuf.buf, databuf.len, 0);
// FIXME: output nicklen from the actual macro
- copy_strf(&databuf, ":%s 005 %s CASEMAPPING=rfc1459 NICKLEN=31 :are supported by this server\n", hostname, client->nick);
+ copy_strf(&databuf, ":%s 005 %s CASEMAPPING=rfc1459 NICKLEN=31 CHANTYPES=# :are supported by this server\n", hostname, client->nick);
send_log(client->FD, databuf.buf, databuf.len, 0);
copy_strf(&databuf, ":%s 251 %s :This server exists\n", hostname, client->nick);
send_log(client->FD, databuf.buf, databuf.len, 0);
void setNick(struct client_data *client, char* nickname) {
// TODO: perform basic sanitization
- char *bruh = strchr(nickname, ' ');
- if (bruh || strlen(nickname) >= MAX_NICKLEN) {
+ if (strlen(nickname) >= MAX_NICKLEN || nickname[0] == '\0') {
copy_strf(&databuf, ":%s 432 * %s :Erroneous nickname\n", hostname, nickname);
send_log(client->FD, databuf.buf, databuf.len, 0);
return;
}
+ const char *forbidden = " ,*?!@$:#&.";
+ while (*forbidden)
+ if (strchr(nickname, *forbidden++)) {
+ copy_strf(&databuf, ":%s 432 * %s :Erroneous nickname\n", hostname, nickname);
+ send_log(client->FD, databuf.buf, databuf.len, 0);
+ return;
+ }
char key[MAX_NICKLEN];
strcpy(key, nickname);