diff options
| author | Alexander Barton <alex@barton.de> | 2013-02-11 13:58:30 +0100 |
|---|---|---|
| committer | Alexander Barton <alex@barton.de> | 2013-02-11 13:58:30 +0100 |
| commit | b95dfb3ffd798e00df54b52496963d2a998ccbb0 (patch) | |
| tree | 180449386a979903a74263eafcb032422ba05e8e /src | |
| parent | 628c14d65686c4c848a17381b8ef61c78dbcf405 (diff) | |
| parent | 4b15f10fbb036da96caaf9ffcffd27cd9f6815d2 (diff) | |
| download | ngircd-b95dfb3ffd798e00df54b52496963d2a998ccbb0.tar.gz ngircd-b95dfb3ffd798e00df54b52496963d2a998ccbb0.zip | |
Merge branch 'bug155-allowAtInUser'
* bug155-allowAtInUser: Allow "@" character in user names for authentication
Diffstat (limited to 'src')
| -rw-r--r-- | src/ngircd/irc-login.c | 10 | ||||
| -rw-r--r-- | src/ngircd/login.c | 10 |
2 files changed, 17 insertions, 3 deletions
diff --git a/src/ngircd/irc-login.c b/src/ngircd/irc-login.c index e7d83eff..52c6e46e 100644 --- a/src/ngircd/irc-login.c +++ b/src/ngircd/irc-login.c @@ -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" diff --git a/src/ngircd/login.c b/src/ngircd/login.c index d79344b5..d8c8c40a 100644 --- a/src/ngircd/login.c +++ b/src/ngircd/login.c @@ -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); |