ircu2/fix-whois-notifications.sh

223 lines
8.0 KiB
Bash

#!/bin/bash
#
# Script specializat pentru repararea notificărilor WHOIS la operatori în UnderChat IRCd
# Limba: Română
#
# Culori
ROSU='\033[0;31m'
VERDE='\033[0;32m'
GALBEN='\033[1;33m'
ALBASTRU='\033[0;34m'
NC='\033[0m'
log_info() { echo -e "${ALBASTRU}[INFO]${NC} $1"; }
log_success() { echo -e "${VERDE}[SUCCES]${NC} $1"; }
log_warn() { echo -e "${GALBEN}[AVERTIZARE]${NC} $1"; }
log_error() { echo -e "${ROSU}[EROARE]${NC} $1"; }
echo -e "${ALBASTRU}"
echo "════════════════════════════════════════"
echo " Reparare Notificări WHOIS Operatori"
echo "════════════════════════════════════════"
echo -e "${NC}"
# Detectează PREFIX
if [ -n "$1" ]; then
PREFIX="$1"
elif [ -d "$HOME/ircd" ]; then
PREFIX="$HOME/ircd"
elif [ -d "/home/ircd/ircd" ]; then
PREFIX="/home/ircd/ircd"
else
log_error "Nu pot detecta directorul IRCd!"
echo "Utilizare: $0 [PREFIX_PATH]"
exit 1
fi
CONFIG_FILE="$PREFIX/etc/ircd.conf"
log_info "Folosesc PREFIX: $PREFIX"
log_info "Config file: $CONFIG_FILE"
if [ ! -f "$CONFIG_FILE" ]; then
log_error "Fișierul de configurare nu există: $CONFIG_FILE"
exit 1
fi
echo ""
echo -e "${GALBEN}═══ DIAGNOSTIC NOTIFICĂRI WHOIS ═══${NC}"
# Verifică setările actuale pentru notificări WHOIS
echo ""
log_info "Verificare setări notificări WHOIS actuale..."
# Verifică features
if grep -q '"OPER_WHOIS_PARANOIA" = "TRUE"' "$CONFIG_FILE"; then
log_success "OPER_WHOIS_PARANOIA = TRUE găsit"
else
log_error "OPER_WHOIS_PARANOIA = TRUE LIPSEȘTE!"
fi
if grep -q '"WHOIS_NOTICE" = "TRUE"' "$CONFIG_FILE"; then
log_success "WHOIS_NOTICE = TRUE găsit"
else
log_error "WHOIS_NOTICE = TRUE LIPSEȘTE!"
fi
if grep -q '"SPY_WHOIS" = "TRUE"' "$CONFIG_FILE"; then
log_success "SPY_WHOIS = TRUE găsit"
else
log_error "SPY_WHOIS = TRUE LIPSEȘTE (necesar pentru notificări complete)!"
fi
# Verifică snomask
if grep -q 'SNOMASK_OPERDEFAULT' "$CONFIG_FILE"; then
SNOMASK_OP=$(grep 'SNOMASK_OPERDEFAULT' "$CONFIG_FILE" | sed -E 's/.*"SNOMASK_OPERDEFAULT" = "([^"]+)".*/\1/')
log_success "SNOMASK_OPERDEFAULT = $SNOMASK_OP găsit"
else
log_error "SNOMASK_OPERDEFAULT LIPSEȘTE!"
fi
# Verifică operatori
echo ""
log_info "Verificare configurație operatori..."
if grep -q 'PRIV_WHOIS_NOTICE' "$CONFIG_FILE"; then
log_success "Privilegiul PRIV_WHOIS_NOTICE găsit pentru operatori"
else
log_error "Privilegiul PRIV_WHOIS_NOTICE LIPSEȘTE pentru operatori!"
fi
if grep -A5 'Operator {' "$CONFIG_FILE" | grep -q 'snomask'; then
SNOMASK_OPER=$(grep -A10 'Operator {' "$CONFIG_FILE" | grep 'snomask' | head -1)
log_success "Snomask pentru operatori găsit: $SNOMASK_OPER"
else
log_error "Snomask pentru operatori LIPSEȘTE!"
fi
# Verifică clasa Opers
echo ""
log_info "Verificare clasa Opers..."
if grep -A10 'name = "Opers"' "$CONFIG_FILE" | grep -q 'usermode = "+Wx"'; then
log_success "Usermode +Wx găsit în clasa Opers (corect pentru notificări)"
else
if grep -A10 'name = "Opers"' "$CONFIG_FILE" | grep -q 'usermode = "+W"'; then
log_warn "Usermode +W găsit (ar trebui să fie +Wx pentru notificări complete)"
else
log_error "Niciun usermode +W găsit în clasa Opers!"
fi
fi
# Afișează setările actuale
echo ""
log_info "Setări WHOIS actuale în features:"
echo -e "${GALBEN}────────────────────────────────────────${NC}"
grep -A20 'features {' "$CONFIG_FILE" | grep -E 'WHOIS|SNOMASK' | head -10
echo -e "${GALBEN}────────────────────────────────────────${NC}"
echo ""
log_info "Configurație operatori actuală:"
echo -e "${GALBEN}────────────────────────────────────────${NC}"
sed -n '/^Operator {/,/^};$/p' "$CONFIG_FILE" | head -15
echo -e "${GALBEN}────────────────────────────────────────${NC}"
# Întrebă dacă să aplice reparațiile
echo ""
echo -e "${GALBEN}Vrei să aplic reparațiile pentru notificări WHOIS? [y/N]:${NC}"
read -r apply_fixes
if [[ "$apply_fixes" =~ ^[Yy]$ ]]; then
echo ""
echo -e "${VERDE}═══ APLICARE REPARAȚII NOTIFICĂRI WHOIS ═══${NC}"
# Backup
cp "$CONFIG_FILE" "$CONFIG_FILE.backup.whois.$(date +%s)"
log_success "Backup creat"
# 1. Adaugă sau corectează features pentru WHOIS
log_info "Configurez features pentru notificări WHOIS..."
if ! grep -q '"SPY_WHOIS"' "$CONFIG_FILE"; then
log_info "Adaug SPY_WHOIS pentru notificări complete..."
sed -i '/"WHOIS_NOTICE" = "TRUE"/a\ "SPY_WHOIS" = "TRUE";' "$CONFIG_FILE"
fi
if ! grep -q '"SNOMASK_OPERDEFAULT"' "$CONFIG_FILE"; then
log_info "Adaug SNOMASK_OPERDEFAULT..."
sed -i '/"SPY_WHOIS" = "TRUE"/a\ "SNOMASK_OPERDEFAULT" = "1024";' "$CONFIG_FILE"
fi
if ! grep -q '"SNOMASK_DEFAULT"' "$CONFIG_FILE"; then
log_info "Adaug SNOMASK_DEFAULT..."
sed -i '/"SNOMASK_OPERDEFAULT"/a\ "SNOMASK_DEFAULT" = "1024";' "$CONFIG_FILE"
fi
log_success "Features WHOIS configurate"
# 2. Configurează operatorii cu privilegii WHOIS
log_info "Configurez operatorii cu privilegii WHOIS..."
if ! grep -q 'PRIV_WHOIS_NOTICE' "$CONFIG_FILE"; then
log_info "Adaug privilegii WHOIS pentru operatori..."
# Găsește secțiunea Operator și adaugă privilegiile
sed -i '/admin = yes/a\ snomask = "+HACK,THROTTLE,OLDSNO,NETWORK,OPERKILL,GLINE";\n privileges = "PRIV_WHOIS_NOTICE", "PRIV_HIDE_OPER", "PRIV_ADMIN";' "$CONFIG_FILE"
fi
log_success "Privilegii WHOIS pentru operatori configurate"
# 3. Actualizează clasa Opers
log_info "Actualizez clasa Opers cu usermode +Wx..."
# Găsește și actualizează usermode în clasa Opers
sed -i '/name = "Opers"/,/}/ s/usermode = "[^"]*"/usermode = "+Wx"/' "$CONFIG_FILE"
log_success "Clasa Opers actualizată cu +Wx"
echo ""
echo -e "${VERDE}═══ TEST FINAL ═══${NC}"
# Test sintaxă
if [ -x "$PREFIX/bin/ircd" ]; then
log_info "Test sintaxă configurație..."
if "$PREFIX/bin/ircd" -c -f "$CONFIG_FILE" > /dev/null 2>&1; then
log_success "✓ Sintaxă configurație validă!"
else
log_error "✗ Erori în sintaxă găsite:"
"$PREFIX/bin/ircd" -c -f "$CONFIG_FILE" 2>&1 | head -10
fi
fi
echo ""
echo -e "${VERDE}════════════════════════════════════════${NC}"
echo -e "${VERDE} NOTIFICĂRI WHOIS REPARATE!${NC}"
echo -e "${VERDE}════════════════════════════════════════${NC}"
echo ""
echo -e "${GALBEN}Pași următori:${NC}"
echo "1. Restart server: $PREFIX/bin/ircd restart"
echo "2. Fă-te operator: /oper username parola"
echo "3. Verifică că primești +W: /mode nickname"
echo "4. Testează: askă pe cineva să-ți dea /whois"
echo ""
echo -e "${VERDE}Ar trebui să primești notificarea:${NC}"
echo -e "${ALBASTRU}*** Notice: nickname (user@host) is doing a WHOIS on you${NC}"
else
echo ""
log_info "Reparații anulate. Pentru aplicare manuală:"
echo ""
echo -e "${GALBEN}Setări necesare în features:${NC}"
echo ' "OPER_WHOIS_PARANOIA" = "TRUE";'
echo ' "WHOIS_NOTICE" = "TRUE";'
echo ' "SPY_WHOIS" = "TRUE";'
echo ' "SNOMASK_OPERDEFAULT" = "1024";'
echo ""
echo -e "${GALBEN}În secțiunea Operator:${NC}"
echo ' snomask = "+HACK,THROTTLE,OLDSNO,NETWORK,OPERKILL,GLINE";'
echo ' privileges = "PRIV_WHOIS_NOTICE", "PRIV_HIDE_OPER", "PRIV_ADMIN";'
echo ""
echo -e "${GALBEN}În clasa Opers:${NC}"
echo ' usermode = "+Wx";'
fi