X-Git-Url: https://arthur.barton.de/cgi-bin/gitweb.cgi?p=ngircd-alex.git;a=blobdiff_plain;f=src%2Fngircd%2Firc-login.c;h=2de4bd584bec73e4a081d284a67c5d52332b5392;hp=1091852bbb0865da87c06a6275c91bc0961d95c7;hb=6e8cf51bb216f956e7a6fdb5c61b0f2799bf8d2d;hpb=1c7b9dbe931ecbb0f355ab66c9b422f7e6001058 diff --git a/src/ngircd/irc-login.c b/src/ngircd/irc-login.c index 1091852b..2de4bd58 100644 --- a/src/ngircd/irc-login.c +++ b/src/ngircd/irc-login.c @@ -1,6 +1,6 @@ /* * ngIRCd -- The Next Generation IRC Daemon - * Copyright (c)2001-2008 Alexander Barton (alex@barton.de) + * Copyright (c)2001-2010 Alexander Barton (alex@barton.de) * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -148,7 +148,6 @@ IRC_PASS( CLIENT *Client, REQUEST *Req ) } else { /* The peer seems to be a server supporting the * "original" IRC protocol (RFC 2813). */ - serverver = ""; if (strchr(orig_flags, 'Z')) flags = "Z"; else @@ -322,18 +321,18 @@ IRC_NICK( CLIENT *Client, REQUEST *Req ) info = Req->argv[0]; } - /* Nick ueberpruefen */ 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. */ + /* + * the new nick is already present on this server: + * the new and the old one have to be disconnected now. + */ Log( LOG_ERR, "Server %s introduces already registered nick \"%s\"!", Client_ID( Client ), Req->argv[0] ); Kill_Nick( Req->argv[0], "Nick collision" ); return CONNECTED; } - /* Server, zu dem der Client connectiert ist, suchen */ + /* Find the Server this client is connected to */ intr_c = Client_GetFromToken(Client, token); if( ! intr_c ) { @@ -342,14 +341,11 @@ IRC_NICK( CLIENT *Client, REQUEST *Req ) return CONNECTED; } - /* Neue Client-Struktur anlegen */ c = Client_NewRemoteUser(intr_c, nick, hops, user, hostname, token, modes, info, true); if( ! c ) { - /* Eine neue Client-Struktur konnte nicht angelegt werden. - * Der Client muss disconnectiert werden, damit der Netz- - * status konsistent bleibt. */ + /* out of memory, need to disconnect client to keep network state consistent */ Log( LOG_ALERT, "Can't create client structure! (on connection %d)", Client_Conn( Client )); Kill_Nick( Req->argv[0], "Server error" ); return CONNECTED; @@ -561,6 +557,31 @@ IRC_SERVICE(CLIENT *Client, REQUEST *Req) } /* IRC_SERVICE */ +/** + * Handler for the IRC command "WEBIRC". + * Syntax: WEBIRC + */ +GLOBAL bool +IRC_WEBIRC(CLIENT *Client, REQUEST *Req) +{ + /* Exactly 4 parameters are requited */ + if (Req->argc != 4) + return IRC_WriteStrClient(Client, ERR_NEEDMOREPARAMS_MSG, + Client_ID(Client), Req->command); + + if (!Conf_WebircPwd[0] || strcmp(Req->argv[0], Conf_WebircPwd) != 0) + return IRC_WriteStrClient(Client, ERR_PASSWDMISMATCH_MSG, + Client_ID(Client)); + + LogDebug("Connection %d: got valid WEBIRC command: user=%s, host=%s, ip=%s", + Client_Conn(Client), Req->argv[1], Req->argv[2], Req->argv[3]); + + Client_SetUser(Client, Req->argv[1], true); + Client_SetHostname(Client, Req->argv[2]); + return CONNECTED; +} /* IRC_WEBIRC */ + + GLOBAL bool IRC_QUIT( CLIENT *Client, REQUEST *Req ) { @@ -583,7 +604,6 @@ IRC_QUIT( CLIENT *Client, REQUEST *Req ) target = Client_Search( Req->prefix ); if( ! target ) { - /* Den Client kennen wir nicht (mehr), also nichts zu tun. */ Log( LOG_WARNING, "Got QUIT from %s for unknown client!?", Client_ID( Client )); return CONNECTED; } @@ -601,7 +621,7 @@ IRC_QUIT( CLIENT *Client, REQUEST *Req ) strlcat(quitmsg, "\"", sizeof quitmsg ); } - /* User, Service, oder noch nicht registriert */ + /* User, Service, or not yet registered */ Conn_Close( Client_Conn( Client ), "Got QUIT command.", Req->argc == 1 ? quitmsg : NULL, true); return DISCONNECTED; @@ -617,7 +637,6 @@ IRC_PING(CLIENT *Client, REQUEST *Req) assert(Client != NULL); assert(Req != NULL); - /* Wrong number of arguments? */ if (Req->argc < 1) return IRC_WriteStrClient(Client, ERR_NOORIGIN_MSG, Client_ID(Client));