static void m_euid(sourceinfo_t *si, int parc, char *parv[]) { server_t *s; user_t *u; /* got the right number of args for an introduction? */ if (parc >= 11) { s = si->s; slog(LG_DEBUG, "m_euid(): new user on `%s': %s", s->name, parv[0]); u = user_add(parv[0], /* nick */ parv[4], /* user */ *parv[8] != '*' ? parv[8] : parv[5], /* hostname */ parv[5], /* hostname (visible) */ parv[6], /* ip */ parv[7], /* uid */ parv[parc - 1], /* gecos */ s, /* object parent (server) */ atoi(parv[2])); /* hopcount */ if (u == NULL) return; user_mode(u, parv[3]); if (*parv[9] != '*') { handle_burstlogin(u, parv[9], 0); /* If an account is given in burst, then either they logged in with sasl, * or they logged in before a split and are now returning. Either way we need * to check for identified-to-nick status and update the ircd state accordingly. * For sasl they should be marked identified, and when returning from a split * their nick may have been ungrouped, they may have changed nicks, or their account * may have been dropped. */ if (authservice_loaded) sts(":%s ENCAP * IDENTIFIED %s %s %s", ME, CLIENT_NAME(u), u->nick, should_reg_umode(u) ? "" : "OFF"); } /* server_eob() cannot know if a user was introduced * with NICK/UID or EUID and handle_nickchange() must * be called exactly once for each new user -- jilles */ if (s->flags & SF_EOB) handle_nickchange(u); } else { int i; slog(LG_DEBUG, "m_euid(): got EUID with wrong number of params"); for (i = 0; i < parc; i++) slog(LG_DEBUG, "m_euid(): parv[%d] = %s", i, parv[i]); } }
static void m_nick(sourceinfo_t *si, int parc, char *parv[]) { user_t *u; char ipstring[HOSTIPLEN]; char *p; /* got the right number of args for an introduction? */ if (parc >= 8) { /* -> AB N jilles 1 1137687480 jilles jaguar.test +oiwgrx jilles B]AAAB ABAAE :Jilles Tjoelker */ /* -> AB N test4 1 1137690148 jilles jaguar.test +iw B]AAAB ABAAG :Jilles Tjoelker */ slog(LG_DEBUG, "m_nick(): new user on `%s': %s", si->s->name, parv[0]); decode_p10_ip(parv[parc - 3], ipstring); u = user_add(parv[0], parv[3], parv[4], NULL, ipstring, parv[parc - 2], parv[parc - 1], si->s, atoi(parv[2])); if (u == NULL) return; if (parv[5][0] == '+') { user_mode(u, parv[5]); if (strchr(parv[5], 'r')) { p = strchr(parv[6], ':'); if (p != NULL) *p++ = '\0'; handle_burstlogin(u, parv[6], p ? atol(p) : 0); /* killed to force logout? */ if (user_find(parv[parc - 2]) == NULL) return; } if (strchr(parv[5], 'x')) { u->flags |= UF_HIDEHOSTREQ; /* this must be after setting the account name */ check_hidehost(u); } } handle_nickchange(u); } /* if it's only 2 then it's a nickname change */ else if (parc == 2) { if (!si->su) { slog(LG_DEBUG, "m_nick(): server trying to change nick: %s", si->s != NULL ? si->s->name : "<none>"); return; } slog(LG_DEBUG, "m_nick(): nickname change from `%s': %s", si->su->nick, parv[0]); if (user_changenick(si->su, parv[0], atoi(parv[1]))) return; handle_nickchange(si->su); } else { int i; slog(LG_DEBUG, "m_nick(): got NICK with wrong (%d) number of params", parc); for (i = 0; i < parc; i++) slog(LG_DEBUG, "m_nick(): parv[%d] = %s", i, parv[i]); } }