X-Git-Url: https://arthur.barton.de/cgi-bin/gitweb.cgi?p=ngircd-alex.git;a=blobdiff_plain;f=src%2Fngircd%2Flogin.c;h=d79344b5941bcfa59ab61ff4a0acd49131fb4b48;hp=2c305402d77893158ac009ad989303ed53a8ddbf;hb=808c291c76b7ecb4ae13b6ee12e8afe658b627c1;hpb=edfcc2f9d5b796fd30f60138591e4f96d54cfcf6 diff --git a/src/ngircd/login.c b/src/ngircd/login.c index 2c305402..d79344b5 100644 --- a/src/ngircd/login.c +++ b/src/ngircd/login.c @@ -19,6 +19,7 @@ #include "imp.h" #include #include +#include #include #include @@ -26,6 +27,7 @@ #include "conn.h" #include "class.h" #include "client.h" +#include "client-cap.h" #include "channel.h" #include "conf.h" #include "io.h" @@ -78,19 +80,27 @@ Login_User(CLIENT * Client) } #endif + /* Still waiting for "CAP END" command? */ + if (Client_Cap(Client) & CLIENT_CAP_PENDING) { + Client_SetType(Client, CLIENT_WAITCAPEND); + LogDebug("Connection %d: Waiting for CAP END ...", conn); + return CONNECTED; + } + #ifdef PAM if (!Conf_PAM) { /* Don't do any PAM authentication at all, instead emulate * the beahiour of the daemon compiled without PAM support: * because there can't be any "server password", all * passwords supplied are classified as "wrong". */ - if(Client_Password(Client)[0] == '\0') + if(Conn_Password(conn)[0] == '\0') return Login_User_PostAuth(Client); Client_Reject(Client, "Non-empty password", false); return DISCONNECTED; } - if (Conf_PAMIsOptional && strcmp(Client_Password(Client), "") == 0) { + if (Conf_PAMIsOptional && + strcmp(Conn_Password(conn), "") == 0) { /* Clients are not required to send a password and to be PAM- * authenticated at all. If not, they won't become "identified" * and keep the "~" in their supplied user name. @@ -120,7 +130,7 @@ Login_User(CLIENT * Client) } #else /* Check global server password ... */ - if (strcmp(Client_Password(Client), Conf_ServerPwd) != 0) { + if (strcmp(Conn_Password(conn), Conf_ServerPwd) != 0) { /* Bad password! */ Client_Reject(Client, "Bad server password", false); return DISCONNECTED; @@ -153,8 +163,8 @@ Login_User_PostAuth(CLIENT *Client) return false; if (!IRC_WriteStrClient (Client, RPL_YOURHOST_MSG, Client_ID(Client), - Client_ID(Client_ThisServer()), PACKAGE_VERSION, TARGET_CPU, - TARGET_VENDOR, TARGET_OS)) + Client_ID(Client_ThisServer()), PACKAGE_VERSION, HOST_CPU, + HOST_VENDOR, HOST_OS)) return false; if (!IRC_WriteStrClient (Client, RPL_CREATED_MSG, Client_ID(Client), NGIRCd_StartStr))