#!/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