ircu2/fix-host-hiding.sh

210 lines
7.2 KiB
Bash

lta a#!/bin/bash
#
# Script specializat pentru diagnosticarea și repararea host hiding î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 " Diagnostic și Reparare Host Hiding"
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 CURENT ═══${NC}"
# Verifică setările actuale de host hiding
echo ""
log_info "Verificare setări HOST_HIDING actuale..."
if grep -q '"HOST_HIDING" = "TRUE"' "$CONFIG_FILE"; then
log_success "HOST_HIDING = TRUE găsit"
else
log_error "HOST_HIDING = TRUE LIPSEȘTE!"
fi
if grep -q '"HOST_HIDING_STYLE"' "$CONFIG_FILE"; then
STYLE=$(grep '"HOST_HIDING_STYLE"' "$CONFIG_FILE" | sed -E 's/.*"HOST_HIDING_STYLE" = "([^"]+)".*/\1/')
log_success "HOST_HIDING_STYLE = $STYLE găsit"
else
log_error "HOST_HIDING_STYLE LIPSEȘTE!"
fi
if grep -q '"HIDDEN_HOST"' "$CONFIG_FILE"; then
HIDDEN_HOST=$(grep '"HIDDEN_HOST"' "$CONFIG_FILE" | sed -E 's/.*"HIDDEN_HOST" = "([^"]+)".*/\1/')
log_success "HIDDEN_HOST = $HIDDEN_HOST găsit"
else
log_error "HIDDEN_HOST LIPSEȘTE!"
fi
if grep -q '"HIDDEN_IP"' "$CONFIG_FILE"; then
HIDDEN_IP=$(grep '"HIDDEN_IP"' "$CONFIG_FILE" | sed -E 's/.*"HIDDEN_IP" = "([^"]+)".*/\1/')
log_success "HIDDEN_IP = $HIDDEN_IP găsit"
else
log_error "HIDDEN_IP LIPSEȘTE!"
fi
# Verifică modul utilizatorilor
echo ""
log_info "Verificare moduri utilizatori..."
if grep -A10 'Class {' "$CONFIG_FILE" | grep -q 'usermode = "+ix"'; then
log_success "Usermode +ix găsit în clase"
else
if grep -A10 'Class {' "$CONFIG_FILE" | grep -q 'usermode = "+i"'; then
log_warn "Usermode +i găsit (ar trebui să fie +ix)"
else
log_error "Niciun usermode +ix găsit!"
fi
fi
# Verifică placeholder-uri neînlocuite
echo ""
log_info "Verificare placeholder-uri..."
if grep -q "EOFCONFIG" "$CONFIG_FILE"; then
log_error "Placeholder-uri EOFCONFIG neînlocuite găsite:"
grep -n "EOFCONFIG" "$CONFIG_FILE" | head -5
fi
# Afișează setările features complete
echo ""
log_info "Secțiunea features actuală:"
echo -e "${GALBEN}────────────────────────────────────────${NC}"
sed -n '/^features {/,/^};$/p' "$CONFIG_FILE" | head -30
echo -e "${GALBEN}────────────────────────────────────────${NC}"
# Întrebă dacă să aplice reparațiile
echo ""
echo -e "${GALBEN}Vrei să aplic reparațiile automate? [y/N]:${NC}"
read -r apply_fixes
if [[ "$apply_fixes" =~ ^[Yy]$ ]]; then
echo ""
echo -e "${VERDE}═══ APLICARE REPARAȚII ═══${NC}"
# Backup
cp "$CONFIG_FILE" "$CONFIG_FILE.backup.hosthiding.$(date +%s)"
log_success "Backup creat"
# 1. Corectează placeholder-uri
if grep -q "EOFCONFIG" "$CONFIG_FILE"; then
log_info "Corectez placeholder-uri EOFCONFIG..."
sed -i "s|EOFCONFIG_PREFIX|$PREFIX|g" "$CONFIG_FILE"
sed -i "s|EOFCONFIG_NETWORK|underchat.org|g" "$CONFIG_FILE"
sed -i "s|\\.EOFCONFIG_NETWORK|.underchat.org|g" "$CONFIG_FILE"
sed -i "s|\\*\\.EOFCONFIG_NETWORK|*.underchat.org|g" "$CONFIG_FILE"
log_success "Placeholder-uri corectate"
fi
# 2. Adaugă HOST_HIDING_STYLE dacă lipsește
if ! grep -q '"HOST_HIDING_STYLE"' "$CONFIG_FILE"; then
log_info "Adaug HOST_HIDING_STYLE..."
sed -i '/"HOST_HIDING" = "TRUE"/a\ "HOST_HIDING_STYLE" = "1";' "$CONFIG_FILE"
log_success "HOST_HIDING_STYLE adăugat"
fi
# 3. Adaugă HIDDEN_IP dacă lipsește
if ! grep -q '"HIDDEN_IP"' "$CONFIG_FILE"; then
log_info "Adaug HIDDEN_IP..."
sed -i '/"HIDDEN_HOST" = /a\ "HIDDEN_IP" = "127.0.0.1";' "$CONFIG_FILE"
log_success "HIDDEN_IP adăugat"
fi
# 4. Corectează usermode
if grep -q 'usermode = "+i"' "$CONFIG_FILE"; then
log_info "Corectez usermode +i -> +ix..."
sed -i 's/usermode = "+i"/usermode = "+ix"/' "$CONFIG_FILE"
log_success "Usermode correctat"
fi
# 5. Adaugă CPATH dacă lipsește
if ! grep -q '"CPATH"' "$CONFIG_FILE"; then
log_info "Adaug CPATH în features..."
sed -i '/features {/a\ "CPATH" = "'$PREFIX'/etc/ircd.conf";' "$CONFIG_FILE"
log_success "CPATH adăugat"
fi
# 6. Verifică și adaugă alte setări importante pentru host hiding
if ! grep -q '"USERMODE_x_HIDEMODES"' "$CONFIG_FILE"; then
log_info "Adaug setări suplimentare pentru +x..."
sed -i '/"HOST_HIDING_STYLE" = "1"/a\ "USERMODE_x_HIDEMODES" = "owhbg";' "$CONFIG_FILE"
fi
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} REPARAȚII APLICATE!${NC}"
echo -e "${VERDE}════════════════════════════════════════${NC}"
echo ""
echo -e "${GALBEN}Pași următori:${NC}"
echo "1. Restart server: $PREFIX/bin/ircd restart"
echo "2. Conectează-te și testează: /mode nickname +x"
echo "3. Verifică cu /whois nickname"
echo ""
echo -e "${GALBEN}Dacă tot nu funcționează:${NC}"
echo "- Recompilează cu: make clean && make install"
echo "- Verifică support compilation cu: ./configure --help | grep hiding"
else
echo ""
log_info "Reparații anulate. Pentru aplicare manuală:"
echo ""
echo -e "${GALBEN}Setări necesare în features:${NC}"
echo ' "HOST_HIDING" = "TRUE";'
echo ' "HOST_HIDING_STYLE" = "1";'
echo ' "HIDDEN_HOST" = "users.underchat.org";'
echo ' "HIDDEN_IP" = "127.0.0.1";'
echo ""
echo -e "${GALBEN}În clase, usermode:${NC}"
echo ' usermode = "+ix";'
fi