Allow IRC services to change their nick names.

This commit is contained in:
Alexander Barton 2008-08-16 17:33:53 +02:00
parent 33f32dbd67
commit 4e125fb67c
1 changed files with 21 additions and 29 deletions

View File

@ -180,22 +180,17 @@ IRC_NICK( CLIENT *Client, REQUEST *Req )
assert( Client != NULL ); assert( Client != NULL );
assert( Req != NULL ); assert( Req != NULL );
#ifndef STRICT_RFC
/* Some IRC clients, for example BitchX, send the NICK and USER /* Some IRC clients, for example BitchX, send the NICK and USER
* commands in the wrong order ... */ * commands in the wrong order ... */
if( Client_Type( Client ) == CLIENT_UNKNOWN if(Client_Type(Client) == CLIENT_UNKNOWN
|| Client_Type( Client ) == CLIENT_GOTPASS || Client_Type(Client) == CLIENT_GOTPASS
|| Client_Type( Client ) == CLIENT_GOTNICK || Client_Type(Client) == CLIENT_GOTNICK
|| Client_Type( Client ) == CLIENT_GOTUSER #ifndef STRICT_RFC
|| Client_Type( Client ) == CLIENT_USER || Client_Type(Client) == CLIENT_GOTUSER
|| ( Client_Type( Client ) == CLIENT_SERVER && Req->argc == 1 ))
#else
if( Client_Type( Client ) == CLIENT_UNKNOWN
|| Client_Type( Client ) == CLIENT_GOTPASS
|| Client_Type( Client ) == CLIENT_GOTNICK
|| Client_Type( Client ) == CLIENT_USER
|| ( Client_Type( Client ) == CLIENT_SERVER && Req->argc == 1 ))
#endif #endif
|| Client_Type(Client) == CLIENT_USER
|| Client_Type(Client) == CLIENT_SERVICE
|| (Client_Type(Client) == CLIENT_SERVER && Req->argc == 1))
{ {
/* User registration or change of nickname */ /* User registration or change of nickname */
@ -243,9 +238,9 @@ IRC_NICK( CLIENT *Client, REQUEST *Req )
return CONNECTED; return CONNECTED;
} }
if(( Client_Type( target ) != CLIENT_USER ) if (Client_Type(target) != CLIENT_USER &&
&& ( Client_Type( target ) != CLIENT_SERVER )) Client_Type(target) != CLIENT_SERVICE &&
{ Client_Type(target) != CLIENT_SERVER) {
/* New client */ /* New client */
Log( LOG_DEBUG, "Connection %d: got valid NICK command ...", Log( LOG_DEBUG, "Connection %d: got valid NICK command ...",
Client_Conn( Client )); Client_Conn( Client ));
@ -259,25 +254,22 @@ IRC_NICK( CLIENT *Client, REQUEST *Req )
return Hello_User( Client ); return Hello_User( Client );
else else
Client_SetType( Client, CLIENT_GOTNICK ); Client_SetType( Client, CLIENT_GOTNICK );
} } else {
else
{
/* Nickname change */ /* Nickname change */
if (Client_Conn(target) > NONE) { if (Client_Conn(target) > NONE) {
/* Local client */ /* Local client */
Log(LOG_INFO, Log(LOG_INFO,
"User \"%s\" changed nick (connection %d): \"%s\" -> \"%s\".", "%s \"%s\" changed nick (connection %d): \"%s\" -> \"%s\".",
Client_Mask(target), Client_Conn(target), Client_TypeText(target), Client_Mask(target),
Client_ID(target), Req->argv[0]); Client_Conn(target), Client_ID(target),
Req->argv[0]);
Conn_UpdateIdle(Client_Conn(target)); Conn_UpdateIdle(Client_Conn(target));
} } else {
else
{
/* Remote client */ /* Remote client */
Log( LOG_DEBUG, LogDebug("%s \"%s\" changed nick: \"%s\" -> \"%s\".",
"User \"%s\" changed nick: \"%s\" -> \"%s\".", Client_TypeText(target),
Client_Mask( target ), Client_ID( target ), Client_Mask(target), Client_ID(target),
Req->argv[0] ); Req->argv[0]);
} }
/* Inform all users and servers (which have to know) /* Inform all users and servers (which have to know)