static void m_mode(sourceinfo_t *si, int parc, char *parv[]) { user_t *u; char *p; if (*parv[0] == '#') channel_mode(NULL, channel_find(parv[0]), parc - 1, &parv[1]); else { /* Yes this is a nick and not a UID -- jilles */ u = user_find_named(parv[0]); if (u == NULL) { slog(LG_DEBUG, "m_mode(): user mode for unknown user %s", parv[0]); return; } user_mode(u, parv[1]); if (strchr(parv[1], 'x')) { u->flags |= UF_HIDEHOSTREQ; check_hidehost(u); } if (strchr(parv[1], 'h')) { if (parc > 2) { /* assume +h */ p = strchr(parv[2], '@'); if (p == NULL) strlcpy(u->vhost, parv[2], sizeof u->vhost); else { strlcpy(u->vhost, p + 1, sizeof u->vhost); strlcpy(u->user, parv[2], sizeof u->user); p = strchr(u->user, '@'); if (p != NULL) *p = '\0'; } slog(LG_DEBUG, "m_mode(): user %s setting vhost %s@%s", u->nick, u->user, u->vhost); } else { /* must be -h */ /* XXX we don't know the original ident */ slog(LG_DEBUG, "m_mode(): user %s turning off vhost", u->nick); strlcpy(u->vhost, u->host, sizeof u->vhost); /* revert to +x vhost if applicable */ check_hidehost(u); } } } }
/* protocol-specific stuff to do on login */ static void asuka_on_login(user_t *u, myuser_t *account, const char *wantedhost) { return_if_fail(u != NULL); sts("%s AC %s %s %lu", me.numeric, u->uid, entity(u->myuser)->name, (unsigned long)account->registered); check_hidehost(u); }
/* protocol-specific stuff to do on login */ static void asuka_on_login(user_t *u, myuser_t *account, const char *wantedhost) { if (!me.connected || u == NULL) return; sts("%s AC %s %s %lu", me.numeric, u->uid, account->name, (unsigned long)account->registered); check_hidehost(u); }
static void m_mode(sourceinfo_t *si, int parc, char *parv[]) { user_t *u; if (*parv[0] == '#') channel_mode(NULL, channel_find(parv[0]), parc - 1, &parv[1]); else { /* Yes this is a nick and not a UID -- jilles */ u = user_find_named(parv[0]); if (u == NULL) { slog(LG_DEBUG, "m_mode(): user mode for unknown user %s", parv[0]); return; } user_mode(u, parv[1]); if (strchr(parv[1], 'x')) { u->flags |= UF_HIDEHOSTREQ; check_hidehost(u); } } }
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]); } }