]> arthur.barton.de Git - ngircd-alex.git/blobdiff - src/ngircd/login.c
Allow "@" character in user names for authentication
[ngircd-alex.git] / src / ngircd / login.c
index 460fcd1e4c1954e80d946d6ac1a08a0ba9e7722e..d8c8c40a2d6c0d0bf9f510c8299cf8f11c160d6b 100644 (file)
@@ -163,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))
@@ -202,6 +202,7 @@ Login_User_PostAuth(CLIENT *Client)
 static void
 cb_Read_Auth_Result(int r_fd, UNUSED short events)
 {
+       char user[CLIENT_USER_LEN], *ptr;
        CONN_ID conn;
        CLIENT *client;
        int result;
@@ -233,7 +234,14 @@ cb_Read_Auth_Result(int r_fd, UNUSED short events)
        }
 
        if (result == true) {
-               Client_SetUser(client, Client_OrigUser(client), true);
+               /* Authentication succeeded, now set the correct user name
+                * supplied by the client (without prepended '~' for exmaple),
+                * but cut it at the first '@' character: */
+               strlcpy(user, Client_OrigUser(client), sizeof(user));
+               ptr = strchr(user, '@');
+               if (ptr)
+                       *ptr = '\0';
+               Client_SetUser(client, user, true);
                (void)Login_User_PostAuth(client);
        } else
                Client_Reject(client, "Bad password", false);