]> arthur.barton.de Git - ngircd-alex.git/blobdiff - src/ngircd/irc-login.c
Merge pull request #3 from Cofyc/master
[ngircd-alex.git] / src / ngircd / irc-login.c
index e7d83eff301c3491c83d71f9892944c0f6e5c480..6969fa338c22018643c5b08aa976bb0b2257fb7c 100644 (file)
@@ -146,7 +146,7 @@ IRC_PASS( CLIENT *Client, REQUEST *Req )
                        } else
                                flags = "";
                        Log(LOG_INFO,
-                           "Peer on conenction %d announces itself as %s-%s using protocol %d.%d/IRC+ (flags: \"%s\").",
+                           "Peer on connection %d announces itself as %s-%s using protocol %d.%d/IRC+ (flags: \"%s\").",
                            Client_Conn(Client), impl, serverver,
                            protohigh, protolow, flags);
                } else {
@@ -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"