X-Git-Url: https://jfr.im/git/solanum.git/blobdiff_plain/f53d2f45de5f9bde3eb7b62c7e31995c6e91ef14..36828ff7205558bda3857b402e1bf0f62783ed1a:/ircd/client.c diff --git a/ircd/client.c b/ircd/client.c index 20ae47f3..136c30a4 100644 --- a/ircd/client.c +++ b/ircd/client.c @@ -1,5 +1,5 @@ /* - * charybdis: an advanced ircd. + * Solanum: a slightly advanced ircd * client.c: Controls clients. * * Copyright (C) 1990 Jarkko Oikarinen and University of Oulu, Co Center @@ -399,7 +399,7 @@ check_pings_list(rb_dlink_list * list) { if(IsServer(client_p)) { - sendto_realops_snomask(SNO_GENERAL, L_ALL, + sendto_realops_snomask(SNO_GENERAL, L_NETWIDE, "No response from %s, closing link", client_p->name); ilog(L_SERVER, @@ -466,7 +466,7 @@ check_unknowns_list(rb_dlink_list * list) { if(IsAnyServer(client_p)) { - sendto_realops_snomask(SNO_GENERAL, is_remote_connect(client_p) ? L_NETWIDE : L_ALL, + sendto_realops_snomask(SNO_GENERAL, L_NETWIDE, "No response from %s, closing link", client_p->name); ilog(L_SERVER, @@ -548,16 +548,16 @@ check_klines(void) { if(IsExemptKline(client_p)) { - sendto_realops_snomask(SNO_GENERAL, L_ALL, + sendto_realops_snomask(SNO_GENERAL, L_NETWIDE, "KLINE over-ruled for %s, client is kline_exempt [%s@%s]", get_client_name(client_p, HIDE_IP), aconf->user, aconf->host); continue; } - sendto_realops_snomask(SNO_GENERAL, L_ALL, - "KLINE active for %s", - get_client_name(client_p, HIDE_IP)); + sendto_realops_snomask(SNO_GENERAL, L_NETWIDE, + "KLINE active for %s (%s@%s)", + get_client_name(client_p, HIDE_IP), aconf->user, aconf->host); notify_banned_client(client_p, aconf, K_LINED); continue; @@ -583,6 +583,7 @@ check_one_kline(struct ConfItem *kline) int masktype; int bits; struct rb_sockaddr_storage sockaddr; + struct sockaddr_in ip4; masktype = parse_netmask(kline->host, (struct sockaddr_storage *)&sockaddr, &bits); @@ -602,12 +603,27 @@ check_one_kline(struct ConfItem *kline) switch (masktype) { case HM_IPV4: case HM_IPV6: - if (comp_with_mask_sock((struct sockaddr *)&client_p->localClient->ip, - (struct sockaddr *)&sockaddr, bits)) + if (IsConfDoSpoofIp(client_p->localClient->att_conf) && + IsConfKlineSpoof(client_p->localClient->att_conf)) + continue; + if (client_p->localClient->ip.ss_family == AF_INET6 && sockaddr.ss_family == AF_INET && + rb_ipv4_from_ipv6((struct sockaddr_in6 *)&client_p->localClient->ip, &ip4) + && comp_with_mask_sock((struct sockaddr *)&ip4, (struct sockaddr *)&sockaddr, bits)) matched = 1; + else if (client_p->localClient->ip.ss_family == sockaddr.ss_family && + comp_with_mask_sock((struct sockaddr *)&client_p->localClient->ip, + (struct sockaddr *)&sockaddr, bits)) + matched = 1; + break; case HM_HOST: if (match(kline->host, client_p->orighost)) matched = 1; + if (IsConfDoSpoofIp(client_p->localClient->att_conf) && + IsConfKlineSpoof(client_p->localClient->att_conf)) + continue; + if (match(kline->host, client_p->sockhost)) + matched = 1; + break; } if (!matched) @@ -622,9 +638,9 @@ check_one_kline(struct ConfItem *kline) continue; } - sendto_realops_snomask(SNO_GENERAL, L_ALL, - "KLINE active for %s", - get_client_name(client_p, HIDE_IP)); + sendto_realops_snomask(SNO_GENERAL, L_NETWIDE, + "KLINE active for %s (%s@%s)", + get_client_name(client_p, HIDE_IP), kline->user, kline->host); notify_banned_client(client_p, kline, K_LINED); } @@ -657,9 +673,9 @@ check_dlines(void) if(aconf->status & CONF_EXEMPTDLINE) continue; - sendto_realops_snomask(SNO_GENERAL, L_ALL, - "DLINE active for %s", - get_client_name(client_p, HIDE_IP)); + sendto_realops_snomask(SNO_GENERAL, L_NETWIDE, + "DLINE active for %s (%s)", + get_client_name(client_p, HIDE_IP), aconf->host); notify_banned_client(client_p, aconf, D_LINED); continue; @@ -706,15 +722,16 @@ check_xlines(void) { if(IsExemptKline(client_p)) { - sendto_realops_snomask(SNO_GENERAL, L_ALL, + sendto_realops_snomask(SNO_GENERAL, L_NETWIDE, "XLINE over-ruled for %s, client is kline_exempt [%s]", get_client_name(client_p, HIDE_IP), aconf->host); continue; } - sendto_realops_snomask(SNO_GENERAL, L_ALL, "XLINE active for %s", - get_client_name(client_p, HIDE_IP)); + sendto_realops_snomask(SNO_GENERAL, L_NETWIDE, + "XLINE active for %s (%s)", + get_client_name(client_p, HIDE_IP), aconf->host); (void) exit_client(client_p, client_p, &me, "Bad user info"); continue; @@ -756,11 +773,11 @@ resv_nick_fnc(const char *mask, const char *reason, int temp_time) nick = client_p->id; /* Tell opers. */ - sendto_realops_snomask(SNO_GENERAL, L_ALL, + sendto_realops_snomask(SNO_GENERAL, L_NETWIDE, "RESV forced nick change for %s!%s@%s to %s; nick matched [%s] (%s)", client_p->name, client_p->username, client_p->host, nick, mask, reason); - sendto_realops_snomask(SNO_NCHANGE, L_ALL, + sendto_realops_snomask(SNO_NCHANGE, L_NETWIDE, "Nick change: From %s to %s [%s@%s]", client_p->name, nick, client_p->username, client_p->host); @@ -1131,7 +1148,7 @@ free_exited_clients(void *unused) target_p->name, (unsigned int) target_p->status, (unsigned long long)target_p->flags, target_p->handler); sendto_realops_snomask(SNO_GENERAL, L_ALL, - "Please report this to the charybdis developers!"); + "Please report this to the solanum developers!"); found++; } } @@ -1275,7 +1292,7 @@ exit_aborted_clients(void *unused) abt->client->name, (unsigned int) abt->client->status, (unsigned long long)abt->client->flags, abt->client->handler); sendto_realops_snomask(SNO_GENERAL, L_ALL, - "Please report this to the charybdis developers!"); + "Please report this to the solanum developers!"); continue; } } @@ -1285,7 +1302,7 @@ exit_aborted_clients(void *unused) rb_dlinkDelete(ptr, &abort_list); if(IsAnyServer(abt->client)) - sendto_realops_snomask(SNO_GENERAL, L_ALL, + sendto_realops_snomask(SNO_GENERAL, L_NETWIDE, "Closing link to %s: %s", abt->client->name, abt->notice); @@ -1817,11 +1834,11 @@ show_ip(struct Client *source_p, struct Client *target_p) * to local opers. */ if(!ConfigFileEntry.hide_spoof_ips && - (source_p == NULL || MyOper(source_p))) + (source_p == NULL || HasPrivilege(source_p, "auspex:hostname"))) return 1; return 0; } - else if(IsDynSpoof(target_p) && (source_p != NULL && !IsOper(source_p))) + else if(IsDynSpoof(target_p) && (source_p != NULL && !HasPrivilege(source_p, "auspex:hostname"))) return 0; else return 1; @@ -2119,7 +2136,7 @@ error_exit_client(struct Client *client_p, int error) { if(error == 0) { - sendto_realops_snomask(SNO_GENERAL, is_remote_connect(client_p) && !IsServer(client_p) ? L_NETWIDE : L_ALL, + sendto_realops_snomask(SNO_GENERAL, L_NETWIDE, "Server %s closed the connection", client_p->name); @@ -2128,7 +2145,7 @@ error_exit_client(struct Client *client_p, int error) } else { - sendto_realops_snomask(SNO_GENERAL, is_remote_connect(client_p) && !IsServer(client_p) ? L_NETWIDE : L_ALL, + sendto_realops_snomask(SNO_GENERAL, L_NETWIDE, "Lost connection to %s: %s", client_p->name, strerror(current_error)); ilog(L_SERVER, "Lost connection to %s: %s",