X-Git-Url: https://arthur.barton.de/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Fngircd%2Fclient.c;h=16c551f97a89b422bf356465f45b0cc85a522e11;hb=1ea681161652c118d7acb7932678e1acf6646611;hp=e01c424091dc274b559cedd95d87f6275e895ead;hpb=fa8b83e69b0d7edcfdcf8f0a4496c79f9c5ec161;p=ngircd-alex.git diff --git a/src/ngircd/client.c b/src/ngircd/client.c index e01c4240..16c551f9 100644 --- a/src/ngircd/client.c +++ b/src/ngircd/client.c @@ -335,8 +335,10 @@ Client_SetID( CLIENT *Client, const char *ID ) strlcpy( Client->id, ID, sizeof( Client->id )); - if (Conf_CloakUserToNick) + if (Conf_CloakUserToNick) { strlcpy( Client->user, ID, sizeof( Client->user )); + strlcpy( Client->info, ID, sizeof( Client->info )); + } /* Hash */ Client->hash = Hash( Client->id ); @@ -351,9 +353,9 @@ Client_SetUser( CLIENT *Client, const char *User, bool Idented ) assert( Client != NULL ); assert( User != NULL ); - if (Conf_CloakUserToNick) return; - - if (Idented) { + if (Conf_CloakUserToNick) { + strlcpy(Client->user, Client->id, sizeof(Client->user)); + } else if (Idented) { strlcpy(Client->user, User, sizeof(Client->user)); } else { Client->user[0] = '~'; @@ -390,7 +392,10 @@ Client_SetInfo( CLIENT *Client, const char *Info ) assert( Client != NULL ); assert( Info != NULL ); - strlcpy(Client->info, Info, sizeof(Client->info)); + if (Conf_CloakUserToNick) + strlcpy(Client->info, Client->id, sizeof(Client->info)); + else + strlcpy(Client->info, Info, sizeof(Client->info)); } /* Client_SetInfo */ @@ -842,23 +847,37 @@ Client_Away( CLIENT *Client ) } /* Client_Away */ +/** + * Make sure that a given nickname is valid. + * + * If the nickname is not valid for the given client, this function sends back + * the appropriate error messages. + * + * @param Client Client that wants to change the nickname. + * @param Nick New nick name. + * @returns true if nickname is valid, false otherwise. + */ GLOBAL bool -Client_CheckNick( CLIENT *Client, char *Nick ) +Client_CheckNick(CLIENT *Client, char *Nick) { - assert( Client != NULL ); - assert( Nick != NULL ); - - if (! Client_IsValidNick( Nick )) - { - IRC_WriteStrClient( Client, ERR_ERRONEUSNICKNAME_MSG, Client_ID( Client ), Nick ); + assert(Client != NULL); + assert(Nick != NULL); + + if (!Client_IsValidNick(Nick)) { + if (strlen(Nick ) >= Conf_MaxNickLength) + IRC_WriteStrClient(Client, ERR_NICKNAMETOOLONG_MSG, + Client_ID(Client), Nick, + Conf_MaxNickLength - 1); + else + IRC_WriteStrClient(Client, ERR_ERRONEUSNICKNAME_MSG, + Client_ID(Client), Nick); return false; } - /* Nick bereits vergeben? */ - if( Client_Search( Nick )) - { - /* den Nick gibt es bereits */ - IRC_WriteStrClient( Client, ERR_NICKNAMEINUSE_MSG, Client_ID( Client ), Nick ); + /* Nickname already registered? */ + if (Client_Search(Nick)) { + IRC_WriteStrClient(Client, ERR_NICKNAMEINUSE_MSG, + Client_ID(Client), Nick); return false; } @@ -1014,23 +1033,31 @@ Client_MyMaxUserCount( void ) } /* Client_MyMaxUserCount */ +/** + * Check that a given nickname is valid. + * + * @param Nick the nickname to check. + * @returns true if nickname is valid, false otherwise. + */ GLOBAL bool -Client_IsValidNick( const char *Nick ) +Client_IsValidNick(const char *Nick) { const char *ptr; static const char goodchars[] = ";0123456789-"; - assert( Nick != NULL ); + assert (Nick != NULL); - if( Nick[0] == '#' ) return false; - if( strchr( goodchars, Nick[0] )) return false; - if( strlen( Nick ) >= Conf_MaxNickLength) return false; + if (strchr(goodchars, Nick[0])) + return false; + if (strlen(Nick ) >= Conf_MaxNickLength) + return false; ptr = Nick; - while( *ptr ) - { - if (( *ptr < 'A' ) && ( ! strchr( goodchars, *ptr ))) return false; - if ( *ptr > '}' ) return false; + while (*ptr) { + if (*ptr < 'A' && !strchr(goodchars, *ptr )) + return false; + if (*ptr > '}') + return false; ptr++; } @@ -1187,6 +1214,10 @@ Client_RegisterWhowas( CLIENT *Client ) assert( Client != NULL ); + /* Don't register WHOWAS information when "MorePrivacy" is enabled. */ + if (Conf_MorePrivacy) + return; + now = time(NULL); /* Don't register clients that were connected less than 30 seconds. */ if( now - Client->starttime < 30 )