commit - e56bd8ff89b224ba9d78dee69587643be909605b
commit + 068d43352d98ca584af944c70a87134c28880c0e
blob - 62e339769fcf2382293bc1dac59f643dcc11f4f9
blob + 2fdc5d44d8c9996f6e377a920985766f5e1ca692
--- src/ngircd/irc-login.c
+++ src/ngircd/irc-login.c
IRC_NICK( CLIENT *Client, REQUEST *Req )
{
CLIENT *intr_c, *target, *c;
- char *modes;
+ char *nick, *user, *hostname, *modes, *info;
+ int token, hops;
assert( Client != NULL );
assert( Req != NULL );
}
return CONNECTED;
- }
- else if( Client_Type( Client ) == CLIENT_SERVER )
- {
- /* Server introduces new client */
+ } else if(Client_Type(Client) == CLIENT_SERVER ||
+ Client_Type(Client) == CLIENT_SERVICE) {
+ /* Server or service introduces new client */
- /* Falsche Anzahl Parameter? */
- if( Req->argc != 7 ) return IRC_WriteStrClient( Client, ERR_NEEDMOREPARAMS_MSG, Client_ID( Client ), Req->command );
+ /* Bad number of parameters? */
+ 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 */
- c = Client_Search( Req->argv[0] );
- if( c )
- {
+ c = Client_Search(nick);
+ if(c) {
/* Der neue Nick ist auf diesem Server bereits registriert:
* sowohl der neue, als auch der alte Client muessen nun
* disconnectiert werden. */
}
/* 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 )
{
Log( LOG_ERR, "Server %s introduces nick \"%s\" on unknown server!?", Client_ID( Client ), Req->argv[0] );
}
/* 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 )
{
/* Eine neue Client-Struktur konnte nicht angelegt werden.