static void mo_chgident(struct Client *client_p, struct Client *source_p, int parc, char *parv[]) { struct Client *target_p = NULL; if (MyClient(source_p) && !IsOperAdmin(source_p)) { sendto_one(source_p, form_str(ERR_NOPRIVS), me.name, source_p->name, "CHGIDENT"); return; } if (EmptyString(parv[2])) { parv[2] = parv[1]; target_p = source_p; if (!IsClient(target_p)) return; } else { target_p = find_client(parv[1]); if (target_p == NULL || !IsClient(target_p)) { sendto_one(source_p, form_str(ERR_NOSUCHNICK), me.name, source_p->name, parv[1]); return; } } if (strlen(parv[2]) > USERLEN || !*parv[2] || !valid_username(parv[2])) { sendto_one(source_p, ":%s NOTICE %s :Invalid username", me.name, source_p->name); return; } if (IsUserHostIp(target_p)) delete_user_host(target_p->username, target_p->host, !MyConnect(target_p)); strlcpy(target_p->username, parv[2], sizeof(target_p->username)); add_user_host(target_p->username, target_p->host, !MyConnect(target_p)); SetUserHost(target_p); if (MyClient(source_p)) { sendto_server(client_p, NULL, NOCAPS, NOCAPS, ":%s ENCAP * CHGIDENT %s %s", source_p->name, target_p->name, parv[2]); sendto_one(source_p, ":%s NOTICE %s :%s changed to %s@%s", me.name, source_p->name, target_p->name, target_p->username, target_p->host); } if (MyConnect(target_p) && IsClient(source_p)) sendto_one(target_p, ":%s NOTICE %s :You are now %s@%s", me.name, target_p->name, target_p->username, target_p->host); }
void m_svscloak(struct Client *client_p, struct Client *source_p, int parc, char *parv[]) { struct Client *target_p; char *hostname, *target; if(parc < 3 || EmptyString(parv[2])) { sendto_one(source_p, form_str(ERR_NEEDMOREPARAMS), me.name, parv[0]); return; } target = parv[1]; hostname = parv[2]; if ((target_p = find_person(client_p, target))) { if(MyClient(target_p) && irccmp(target_p->host, hostname) != 0) { sendto_one(target_p, ":%s NOTICE %s :Activating Cloak: %s", me.name, target_p->name, hostname); sendto_gnotice_flags(UMODE_ALL, L_ALL, me.name, &me, NULL, "Activating Cloak: %s -> %s for %s", target_p->host, hostname, target_p->name); } /* Send to all Servers but the one WE got the SVSCLOAK from */ sendto_server(client_p, NULL, NOCAPS, NOCAPS, ":%s SVSCLOAK %s :%s", parv[0], parv[1], parv[2]); /* locally modify the clients structure */ if(target_p->realhost[0] == '\0') strncpy(target_p->realhost, target_p->host, HOSTLEN); if(IsUserHostIp(target_p)) { delete_user_host(target_p->username, target_p->host, !MyConnect(target_p)); add_user_host(target_p->username, hostname, !MyConnect(target_p)); } strncpy(target_p->host, hostname, HOSTLEN); off_history(target_p); } else { sendto_one(source_p, form_str(ERR_NOSUCHNICK), me.name, source_p->name, target); return; } return; }
static void mo_chghost(struct Client *client_p, struct Client *source_p, int parc, char *parv[]) { struct Client *target_p = NULL; if (MyClient(source_p) && !HasUMode(source_p, UMODE_ADMIN)) { sendto_one(source_p, form_str(ERR_NOPRIVS), me.name, source_p->name, "CHGHOST"); return; } if (EmptyString(parv[2])) { parv[2] = parv[1]; target_p = source_p; if (!IsClient(target_p)) return; } else { target_p = hash_find_client(parv[1]); if (target_p == NULL || !IsClient(target_p)) { sendto_one(source_p, form_str(ERR_NOSUCHNICK), me.name, source_p->name, parv[1]); return; } } if (strlen(parv[2]) > HOSTLEN || !*parv[2] || !valid_hostname(parv[2])) { sendto_one(source_p, ":%s NOTICE %s :Invalid hostname", me.name, source_p->name); return; } if (IsUserHostIp(target_p)) delete_user_host(target_p->username, target_p->host, !MyConnect(target_p)); strlcpy(target_p->host, parv[2], sizeof(target_p->host)); SetIPSpoof(target_p); add_user_host(target_p->username, target_p->host, !MyConnect(target_p)); SetUserHost(target_p); if (MyClient(source_p)) { sendto_server(client_p, NOCAPS, NOCAPS, ":%s ENCAP * CHGHOST %s %s", source_p->name, target_p->name, parv[2]); sendto_one(source_p, ":%s NOTICE %s :%s changed to %s@%s", me.name, source_p->name, target_p->name, target_p->username, target_p->host); } if (MyClient(target_p)) { if (IsClient(source_p)) sendto_one(target_p, ":%s NOTICE %s :You are now %s@%s", me.name, target_p->name, target_p->username, target_p->host); clear_ban_cache_client(target_p); } }