strlcpy(source_p->name, nick, sizeof(source_p->name));
hash_add_client(source_p);
- if (parc > 8)
- {
- const char *m;
-
- /* parse usermodes */
- for (m = &parv[4][1]; *m; ++m)
- {
- unsigned int flag = user_modes[(unsigned char)*m];
+ const char *m;
- if ((flag & UMODE_INVISIBLE) && !HasUMode(source_p, UMODE_INVISIBLE))
- ++Count.invisi;
- if ((flag & UMODE_OPER) && !HasUMode(source_p, UMODE_OPER))
- ++Count.oper;
- if (flag & UMODE_SERVICE)
- AddFlag(source_p, FLAGS_SERVICE);
+ /* parse usermodes */
+ for (m = &parv[4][1]; *m; ++m)
+ {
+ unsigned int flag = user_modes[(unsigned char)*m];
- source_p->umodes |= flag;
- }
+ if ((flag & UMODE_INVISIBLE) && !HasUMode(source_p, UMODE_INVISIBLE))
+ ++Count.invisi;
+ if ((flag & UMODE_OPER) && !HasUMode(source_p, UMODE_OPER))
+ ++Count.oper;
+ if (flag & UMODE_SERVICE)
+ AddFlag(source_p, FLAGS_SERVICE);
- register_remote_user(source_p, parv[5], parv[6],
- parv[7], parv[9]);
- return;
+ source_p->umodes |= flag;
}
+
+ register_remote_user(source_p, parv[5], parv[6],
+ parv[7], parv[9]);
+ return;
}
- else if (source_p->name[0])
+
+ if (source_p->name[0])
{
samenick = !irccmp(source_p->name, nick);
if (parc < 3 || EmptyString(parv[parc - 1]))
return;
- if (parc >= 11)
+ if (parc == 11)
{
+ if (!IsServer(source_p))
+ /* users can't introduce other users */
+ return;
+
struct Client *server_p = hash_find_server(parv[7]);
if (server_p == NULL)
check_clean_host(client_p, parv[1], parv[6], server_p))
return;
- if (IsServer(source_p))
- newts = atol(parv[3]);
-
- if (IsServer(source_p))
- svsid = parv[8];
+ newts = atol(parv[3]);
+ svsid = parv[8];
}
else if (parc == 3)
{
newts = atol(parv[2]);
}
+ else
+ {
+ exit_client(client_p, &me, "Malformed NICK");
+ return;
+ }
/* If the nick doesnt exist, allow it and process like normal */
if ((target_p = hash_find_client(parv[1])) == NULL)