+ if( Req->argc != 7 ) return IRC_WriteStrClient( Client, Client_ThisServer( ), ERR_NEEDMOREPARAMS_MSG, Client_ID( Client ), Req->command );
+
+ /* Nick ueberpruefen */
+ c = Client_GetFromID( Req->argv[0] );
+ if( c )
+ {
+ /* Der neue Nick ist auf diesem Server bereits registriert:
+ * sowohl der neue, als auch der alte Client muessen nun
+ * disconnectiert werden. */
+ Log( LOG_ALERT, "Server %s introduces already registered nick %s!", Client_ID( Client ), Req->argv[0] );
+ Kill_Nick( Req->argv[0] );
+ return CONNECTED;
+ }
+
+ /* Server, zu dem der Client connectiert ist, suchen */
+ intr_c = Client_GetFromToken( Client, atoi( Req->argv[4] ));
+ if( ! intr_c )
+ {
+ Log( LOG_ALERT, "Server %s introduces nick %s with unknown host server!?", Client_ID( Client ), Req->argv[0] );
+ Kill_Nick( Req->argv[0] );
+ return CONNECTED;
+ }
+
+ /* Neue Client-Struktur anlegen */
+ c = Client_NewRemoteUser( intr_c, Req->argv[0], atoi( Req->argv[1] ), Req->argv[2], Req->argv[3], atoi( Req->argv[4] ), Req->argv[5], Req->argv[6] );
+ if( ! c )
+ {
+ /* Eine neue Client-Struktur konnte nicht angelegt werden.
+ * Der Client muss disconnectiert werden, damit der Netz-
+ * status konsistent bleibt. */
+ Log( LOG_ALERT, "Can't allocate client structure! (on connection %d)", Client_Conn( Client ));
+ Kill_Nick( Req->argv[0] );
+ return CONNECTED;
+ }
+
+ Log( LOG_NOTICE, "User \"%s\" registered (via %s, on %s, %d hop%s).", Client_ID( c ), Client_ID( Client ), Client_ID( intr_c ), Client_Hops( c ), Client_Hops( c ) > 1 ? "s": "" );