]> arthur.barton.de Git - ngircd-alex.git/commitdiff
Merge branch 'bug155-allowAtInUser'
authorAlexander Barton <alex@barton.de>
Mon, 11 Feb 2013 12:58:30 +0000 (13:58 +0100)
committerAlexander Barton <alex@barton.de>
Mon, 11 Feb 2013 12:58:30 +0000 (13:58 +0100)
* bug155-allowAtInUser:
  Allow "@" character in user names for authentication

src/ngircd/irc-login.c
src/ngircd/login.c

index e7d83eff301c3491c83d71f9892944c0f6e5c480..52c6e46e6585ad5e9f4767f83b33e4a1b109c123 100644 (file)
@@ -444,7 +444,7 @@ IRC_USER(CLIENT * Client, REQUEST * Req)
                ptr = Req->argv[0];
                while (*ptr) {
                        if (!isalnum((int)*ptr) &&
-                           *ptr != '+' && *ptr != '-' &&
+                           *ptr != '+' && *ptr != '-' && *ptr != '@' &&
                            *ptr != '.' && *ptr != '_') {
                                Conn_Close(Client_Conn(Client), NULL,
                                           "Invalid user name", true);
@@ -453,6 +453,13 @@ IRC_USER(CLIENT * Client, REQUEST * Req)
                        ptr++;
                }
 
+               /* Save the received username for authentication, and use
+                * it up to the first '@' as default user name (like ircd2.11,
+                * bahamut, ircd-seven, ...), prefixed with '~', if needed: */
+               Client_SetOrigUser(Client, Req->argv[0]);
+               ptr = strchr(Req->argv[0], '@');
+               if (ptr)
+                       *ptr = '\0';
 #ifdef IDENTAUTH
                ptr = Client_User(Client);
                if (!ptr || !*ptr || *ptr == '~')
@@ -460,7 +467,6 @@ IRC_USER(CLIENT * Client, REQUEST * Req)
 #else
                Client_SetUser(Client, Req->argv[0], false);
 #endif
-               Client_SetOrigUser(Client, Req->argv[0]);
 
                /* "Real name" or user info text: Don't set it to the empty
                 * string, the original ircd can't deal with such "real names"
index d79344b5941bcfa59ab61ff4a0acd49131fb4b48..d8c8c40a2d6c0d0bf9f510c8299cf8f11c160d6b 100644 (file)
@@ -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);