- if(( Client_Type( Client ) == CLIENT_UNKNOWN ) && ( Req->argc == 1))
- {
- /* noch nicht registrierte unbekannte Verbindung */
- Log( LOG_DEBUG, "Connection %d: got PASS command ...", Client_Conn( Client ));
-
- /* Passwort speichern */
- Client_SetPassword( Client, Req->argv[0] );
-
- Client_SetType( Client, CLIENT_GOTPASS );
- return CONNECTED;
+ if (Client_Type(Client) == CLIENT_UNKNOWN && Req->argc == 1) {
+ /* Not yet registered "unknown" connection, PASS with one
+ * argument: either a regular client, service, or server
+ * using the old RFC 1459 section 4.1.1 syntax. */
+ LogDebug("Connection %d: got PASS command ...",
+ Client_Conn(Client));
+ } else if ((Client_Type(Client) == CLIENT_UNKNOWN ||
+ Client_Type(Client) == CLIENT_UNKNOWNSERVER) &&
+ (Req->argc == 3 || Req->argc == 4)) {
+ /* Not yet registered "unknown" connection or outgoing server
+ * link, PASS with three or four argument: server using the
+ * RFC 2813 section 4.1.1 syntax. */
+ LogDebug("Connection %d: got PASS command (new server link) ...",
+ Client_Conn(Client));
+ } else if (Client_Type(Client) == CLIENT_UNKNOWN ||
+ Client_Type(Client) == CLIENT_UNKNOWNSERVER) {
+ /* Unregistered connection, but wrong number of arguments: */
+ return IRC_WriteStrClient(Client, ERR_NEEDMOREPARAMS_MSG,
+ Client_ID(Client), Req->command);
+ } else {
+ /* Registered connection, PASS command is not allowed! */
+ return IRC_WriteStrClient(Client, ERR_ALREADYREGISTRED_MSG,
+ Client_ID(Client));