223 lines
8.0 KiB
Bash
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
|