+
+ } else if (Client_Type(Client) == CLIENT_SERVER ||
+ Client_Type(Client) == CLIENT_SERVICE) {
+ /* Server/service updating an user */
+ if (Req->argc != 4)
+ return IRC_WriteStrClient(Client,
+ ERR_NEEDMOREPARAMS_MSG,
+ Client_ID(Client),
+ Req->command);
+ c = Client_Search(Req->prefix);
+ if (!c)
+ return IRC_WriteStrClient(Client, ERR_NOSUCHNICK_MSG,
+ Client_ID(Client),
+ Req->prefix);
+
+ Client_SetUser(c, Req->argv[0], true);
+ Client_SetHostname(c, Req->argv[1]);
+ Client_SetInfo(c, Req->argv[3]);
+
+ LogDebug("Connection %d: got valid USER command for \"%s\".",
+ Client_Conn(Client), Client_Mask(c));
+
+ /* RFC 1459 style user registration? Inform other servers! */
+ if (Client_Type(c) == CLIENT_GOTNICK) {
+ strlcat(modes, Client_Modes(c), sizeof(modes));
+ Introduce_Client(Client, Client_ID(c), Client_Hops(c),
+ Client_User(c), Client_Hostname(c),
+ Client_Introducer(c), modes,
+ Client_Info(c));
+ LogDebug("User \"%s\" (%s) registered (via %s, on %s, %d hop%s).",
+ Client_Mask(c), modes, Client_ID(Client),
+ Client_ID(Client_Introducer(c)), Client_Hops(c),
+ Client_Hops(c) > 1 ? "s": "");
+ Client_SetType(c, CLIENT_USER);
+ }
+
+ return CONNECTED;
+ } else if (Client_Type(Client) == CLIENT_USER) {
+ /* Already registered connection */
+ return IRC_WriteStrClient(Client, ERR_ALREADYREGISTRED_MSG,
+ Client_ID(Client));
+ } else {
+ /* Unexpected/invalid connection state? */
+ return IRC_WriteStrClient(Client, ERR_NOTREGISTERED_MSG,
+ Client_ID(Client));