From: Pekka Riikonen Date: Thu, 24 Apr 2003 17:51:35 +0000 (+0000) Subject: Disallow @ and ! in nicknames as they are reseved by INVITE X-Git-Tag: silc.toolkit.0.9.10~108 X-Git-Url: http://git.silcnet.org/gitweb/?a=commitdiff_plain;h=b08ec33cf227e392de1910f23a38a49fa6b8000f;p=silc.git Disallow @ and ! in nicknames as they are reseved by INVITE and BAN. --- diff --git a/CHANGES b/CHANGES index 458c1e0b..f9414e3c 100644 --- a/CHANGES +++ b/CHANGES @@ -1,3 +1,11 @@ +Thu Apr 24 19:50:25 EEST 2003 Pekka Riikonen + + * Deny '@' and '!' from nicknames since they are reserved + by the SILC_COMMAND_INVITE and SILC_COMMAND_BAN commands. + Updated protocol specs and the code. + + Affected files are silcd/server_util.[ch]. + Wed Apr 9 18:51:59 EEST 2003 Pekka Riikonen * Fixed stack overflow in Irssi SILC client. Affected diff --git a/apps/silcd/command.c b/apps/silcd/command.c index 94afea2f..73fc7dcc 100644 --- a/apps/silcd/command.c +++ b/apps/silcd/command.c @@ -2203,7 +2203,7 @@ SILC_SERVER_CMD_FUNC(join) if (tmp_len > 256) channel_name[255] = '\0'; - if (silc_server_name_bad_chars(channel_name, tmp_len) == TRUE) { + if (silc_server_name_bad_chchars(channel_name, tmp_len) == TRUE) { silc_server_command_send_status_reply(cmd, SILC_COMMAND_JOIN, SILC_STATUS_ERR_BAD_CHANNEL, 0); goto out; diff --git a/apps/silcd/server_util.c b/apps/silcd/server_util.c index 839599d2..f697323d 100644 --- a/apps/silcd/server_util.c +++ b/apps/silcd/server_util.c @@ -1017,6 +1017,27 @@ bool silc_server_name_bad_chars(const char *name, SilcUInt32 name_len) { int i; + for (i = 0; i < name_len; i++) { + if (!isascii(name[i])) + return TRUE; + if (name[i] <= 32) return TRUE; + if (name[i] == ' ') return TRUE; + if (name[i] == '*') return TRUE; + if (name[i] == '?') return TRUE; + if (name[i] == ',') return TRUE; + if (name[i] == '@') return TRUE; + if (name[i] == '!') return TRUE; + } + + return FALSE; +} + +/* Same as silc_server_name_bad_chars but check for channel names. */ + +bool silc_server_name_bad_chchars(const char *name, SilcUInt32 name_len) +{ + int i; + for (i = 0; i < name_len; i++) { if (!isascii(name[i])) return TRUE; diff --git a/apps/silcd/server_util.h b/apps/silcd/server_util.h index 489abf87..7209c04c 100644 --- a/apps/silcd/server_util.h +++ b/apps/silcd/server_util.h @@ -95,6 +95,7 @@ bool silc_server_client_on_channel(SilcClientEntry client, /* Checks string for bad characters and returns TRUE if they are found. */ bool silc_server_name_bad_chars(const char *name, SilcUInt32 name_len); +bool silc_server_name_bad_chchars(const char *name, SilcUInt32 name_len); /* Modifies the `nick' if it includes bad characters and returns new allocated nickname that does not include bad characters. */