1
0
mirror of https://github.com/osmarks/ngircd.git synced 2024-12-13 10:20:28 +00:00

Merge branch 'bug155-allowAtInUser'

* bug155-allowAtInUser:
  Allow "@" character in user names for authentication
This commit is contained in:
Alexander Barton 2013-02-11 13:58:30 +01:00
commit b95dfb3ffd
2 changed files with 17 additions and 3 deletions

View File

@ -444,7 +444,7 @@ IRC_USER(CLIENT * Client, REQUEST * Req)
ptr = Req->argv[0]; ptr = Req->argv[0];
while (*ptr) { while (*ptr) {
if (!isalnum((int)*ptr) && if (!isalnum((int)*ptr) &&
*ptr != '+' && *ptr != '-' && *ptr != '+' && *ptr != '-' && *ptr != '@' &&
*ptr != '.' && *ptr != '_') { *ptr != '.' && *ptr != '_') {
Conn_Close(Client_Conn(Client), NULL, Conn_Close(Client_Conn(Client), NULL,
"Invalid user name", true); "Invalid user name", true);
@ -453,6 +453,13 @@ IRC_USER(CLIENT * Client, REQUEST * Req)
ptr++; 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 #ifdef IDENTAUTH
ptr = Client_User(Client); ptr = Client_User(Client);
if (!ptr || !*ptr || *ptr == '~') if (!ptr || !*ptr || *ptr == '~')
@ -460,7 +467,6 @@ IRC_USER(CLIENT * Client, REQUEST * Req)
#else #else
Client_SetUser(Client, Req->argv[0], false); Client_SetUser(Client, Req->argv[0], false);
#endif #endif
Client_SetOrigUser(Client, Req->argv[0]);
/* "Real name" or user info text: Don't set it to the empty /* "Real name" or user info text: Don't set it to the empty
* string, the original ircd can't deal with such "real names" * string, the original ircd can't deal with such "real names"

View File

@ -202,6 +202,7 @@ Login_User_PostAuth(CLIENT *Client)
static void static void
cb_Read_Auth_Result(int r_fd, UNUSED short events) cb_Read_Auth_Result(int r_fd, UNUSED short events)
{ {
char user[CLIENT_USER_LEN], *ptr;
CONN_ID conn; CONN_ID conn;
CLIENT *client; CLIENT *client;
int result; int result;
@ -233,7 +234,14 @@ cb_Read_Auth_Result(int r_fd, UNUSED short events)
} }
if (result == true) { 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); (void)Login_User_PostAuth(client);
} else } else
Client_Reject(client, "Bad password", false); Client_Reject(client, "Bad password", false);