NICK: allow servers and services to use RFC 1459 syntax (2 parameters).
This patch allows servers and services to call the NICK command using the syntax defined in RFC 1459 to register new users, with only two parameters. See section 4.1.2. Useful for some services packages, which emulate this protocol.
This commit is contained in:
parent
e56bd8ff89
commit
068d43352d
|
@ -168,7 +168,8 @@ GLOBAL bool
|
||||||
IRC_NICK( CLIENT *Client, REQUEST *Req )
|
IRC_NICK( CLIENT *Client, REQUEST *Req )
|
||||||
{
|
{
|
||||||
CLIENT *intr_c, *target, *c;
|
CLIENT *intr_c, *target, *c;
|
||||||
char *modes;
|
char *nick, *user, *hostname, *modes, *info;
|
||||||
|
int token, hops;
|
||||||
|
|
||||||
assert( Client != NULL );
|
assert( Client != NULL );
|
||||||
assert( Req != NULL );
|
assert( Req != NULL );
|
||||||
|
@ -294,18 +295,36 @@ IRC_NICK( CLIENT *Client, REQUEST *Req )
|
||||||
}
|
}
|
||||||
|
|
||||||
return CONNECTED;
|
return CONNECTED;
|
||||||
}
|
} else if(Client_Type(Client) == CLIENT_SERVER ||
|
||||||
else if( Client_Type( Client ) == CLIENT_SERVER )
|
Client_Type(Client) == CLIENT_SERVICE) {
|
||||||
{
|
/* Server or service introduces new client */
|
||||||
/* Server introduces new client */
|
|
||||||
|
|
||||||
/* Falsche Anzahl Parameter? */
|
/* Bad number of parameters? */
|
||||||
if( Req->argc != 7 ) return IRC_WriteStrClient( Client, ERR_NEEDMOREPARAMS_MSG, Client_ID( Client ), Req->command );
|
if (Req->argc != 2 && Req->argc != 7)
|
||||||
|
return IRC_WriteStrClient(Client, ERR_NEEDMOREPARAMS_MSG,
|
||||||
|
Client_ID(Client), Req->command);
|
||||||
|
|
||||||
|
if (Req->argc >= 7) {
|
||||||
|
nick = Req->argv[0];
|
||||||
|
hops = atoi(Req->argv[1]);
|
||||||
|
user = Req->argv[2];
|
||||||
|
hostname = Req->argv[3];
|
||||||
|
token = atoi(Req->argv[4]);
|
||||||
|
modes = Req->argv[5] + 1;
|
||||||
|
info = Req->argv[6];
|
||||||
|
} else {
|
||||||
|
nick = Req->argv[0];
|
||||||
|
hops = 1;
|
||||||
|
user = Req->argv[0];
|
||||||
|
hostname = Client_ID(Client);
|
||||||
|
token = atoi(Req->argv[1]);
|
||||||
|
modes = "";
|
||||||
|
info = Req->argv[0];
|
||||||
|
}
|
||||||
|
|
||||||
/* Nick ueberpruefen */
|
/* Nick ueberpruefen */
|
||||||
c = Client_Search( Req->argv[0] );
|
c = Client_Search(nick);
|
||||||
if( c )
|
if(c) {
|
||||||
{
|
|
||||||
/* Der neue Nick ist auf diesem Server bereits registriert:
|
/* Der neue Nick ist auf diesem Server bereits registriert:
|
||||||
* sowohl der neue, als auch der alte Client muessen nun
|
* sowohl der neue, als auch der alte Client muessen nun
|
||||||
* disconnectiert werden. */
|
* disconnectiert werden. */
|
||||||
|
@ -315,7 +334,7 @@ IRC_NICK( CLIENT *Client, REQUEST *Req )
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Server, zu dem der Client connectiert ist, suchen */
|
/* Server, zu dem der Client connectiert ist, suchen */
|
||||||
intr_c = Client_GetFromToken( Client, atoi( Req->argv[4] ));
|
intr_c = Client_GetFromToken(Client, token);
|
||||||
if( ! intr_c )
|
if( ! intr_c )
|
||||||
{
|
{
|
||||||
Log( LOG_ERR, "Server %s introduces nick \"%s\" on unknown server!?", Client_ID( Client ), Req->argv[0] );
|
Log( LOG_ERR, "Server %s introduces nick \"%s\" on unknown server!?", Client_ID( Client ), Req->argv[0] );
|
||||||
|
@ -324,7 +343,8 @@ IRC_NICK( CLIENT *Client, REQUEST *Req )
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Neue Client-Struktur anlegen */
|
/* Neue Client-Struktur anlegen */
|
||||||
c = Client_NewRemoteUser( intr_c, Req->argv[0], atoi( Req->argv[1] ), Req->argv[2], Req->argv[3], atoi( Req->argv[4] ), Req->argv[5] + 1, Req->argv[6], true);
|
c = Client_NewRemoteUser(intr_c, nick, hops, user, hostname,
|
||||||
|
token, modes, info, true);
|
||||||
if( ! c )
|
if( ! c )
|
||||||
{
|
{
|
||||||
/* Eine neue Client-Struktur konnte nicht angelegt werden.
|
/* Eine neue Client-Struktur konnte nicht angelegt werden.
|
||||||
|
|
Loading…
Reference in New Issue