diff --git a/INSTALL_AUTO.md b/INSTALL_AUTO.md index 60c3384..e83001f 100644 --- a/INSTALL_AUTO.md +++ b/INSTALL_AUTO.md @@ -347,21 +347,85 @@ Class { ### Operatorii nu primesc +W (problema nr. 3) +**Simptome**: Nu primești notificări când cineva îți dă WHOIS ca operator/administrator + ```bash -# În ircd.conf, verifică clasa Opers: +# DIAGNOSTIC RAPID - script specializat pentru notificări WHOIS +./fix-whois-notifications.sh ~/ircd + +# SAU verifică manual în ircd.conf: + +# 1. Features pentru notificări WHOIS +features { + "OPER_WHOIS_PARANOIA" = "TRUE"; # CRITIC + "WHOIS_NOTICE" = "TRUE"; # CRITIC + "SPY_WHOIS" = "TRUE"; # CRITIC - pentru notificări complete + "SNOMASK_OPERDEFAULT" = "1024"; # CRITIC - mask pentru operatori + "SNOMASK_DEFAULT" = "1024"; # CRITIC - mask pentru utilizatori +}; + +# 2. Configurația operatorului +Operator { + name = "root"; + password = "$hash$"; + host = "*@*"; + class = "Opers"; + admin = yes; + snomask = "+HACK,THROTTLE,OLDSNO,NETWORK,OPERKILL,GLINE"; # CRITIC + privileges = "PRIV_WHOIS_NOTICE", "PRIV_HIDE_OPER", "PRIV_ADMIN"; # CRITIC +}; + +# 3. Clasa Opers Class { name = "Opers"; - usermode = "+Wx"; # Nu doar +W + usermode = "+Wx"; # CRITIC - trebuie +Wx, nu doar +W # ...alte setări... }; -# Verifică features pentru WHOIS notifications: -features { - "WHOIS_NOTICE" = "TRUE"; - "OPER_WHOIS_PARANOIA" = "TRUE"; -}; +# Restart server după modificări +./admin.sh → opțiunea 3) Restart ``` +**Cauze principale**: +1. **SPY_WHOIS lipsă** - fără asta nu primești notificările +2. **PRIV_WHOIS_NOTICE lipsă** - privilegiul pentru notificări +3. **SNOMASK_OPERDEFAULT lipsă** - mask-ul pentru operatori +4. **Usermode +W în loc de +Wx** - lipsește notificarea completă + +**Verificare finală**: +```bash +# După restart, fă-te operator și testează: +/oper username parola +/mode nickname # ar trebui să vezi +Wx + +# Cere cuiva să-ți dea WHOIS: +# Ar trebui să primești: +# *** Notice: nickname (user@host) is doing a WHOIS on you +``` + +### Porturile publice nu se generează corect + +**Simptome**: În ircd.conf pe linia 126 apare `EOFCONFIG_CLIENT_PORTS` în loc de blocurile Port + +**Soluția este acum integrată în toate scripturile:** + +```bash +# Porturile standard generate automat în admin.sh: +# 6660, 6661, 6662, 6663, 6664, 6665, 6666, 6667, 6668, 6669, 7000 +# Plus 6697 pentru SSL + +# Pentru regenerare rapidă: +./admin.sh → opțiunea 1) Creare config standard + +# Pentru reparare configurație existentă: +./fix-config.sh ~/ircd +``` + +**Cauze rezolvate**: +1. **Template admin.sh** - acum include toate porturile 6660-6669, 7000, 6697 +2. **Placeholder EOFCONFIG_NETWORK** - acum se înlocuiește corect +3. **Generare blocuri Port** - logica din install.sh funcționează corect + ### "Permission denied" la ./configure ```bash diff --git a/admin.sh b/admin.sh index 2fe5181..c27d6e9 100755 --- a/admin.sh +++ b/admin.sh @@ -205,6 +205,41 @@ Port { hidden = yes; }; +Port { + vhost = "127.0.0.1" 6660; + hidden = yes; +}; + +Port { + vhost = "127.0.0.1" 6661; + hidden = yes; +}; + +Port { + vhost = "127.0.0.1" 6662; + hidden = yes; +}; + +Port { + vhost = "127.0.0.1" 6663; + hidden = yes; +}; + +Port { + vhost = "127.0.0.1" 6664; + hidden = yes; +}; + +Port { + vhost = "127.0.0.1" 6665; + hidden = yes; +}; + +Port { + vhost = "127.0.0.1" 6666; + hidden = yes; +}; + Port { vhost = "127.0.0.1" 6667; hidden = yes; @@ -215,6 +250,11 @@ Port { hidden = yes; }; +Port { + vhost = "127.0.0.1" 6669; + hidden = yes; +}; + Port { vhost = "127.0.0.1" 7000; hidden = yes; @@ -232,6 +272,8 @@ Operator { host = "*@*"; class = "Opers"; admin = yes; + snomask = "+HACK,THROTTLE,OLDSNO,NETWORK,OPERKILL,GLINE"; + privileges = "PRIV_WHOIS_NOTICE", "PRIV_HIDE_OPER", "PRIV_ADMIN"; }; features { @@ -252,9 +294,12 @@ features { "HIDDEN_IP" = "127.0.0.1"; "HIDDEN_HOSTTYPE" = "3"; - # Features pentru operatori și WHOIS + # Features pentru operatori și WHOIS - setări critice pentru notificări "OPER_WHOIS_PARANOIA" = "TRUE"; "WHOIS_NOTICE" = "TRUE"; + "SPY_WHOIS" = "TRUE"; + "SNOMASK_OPERDEFAULT" = "1024"; + "SNOMASK_DEFAULT" = "1024"; # Alte setări "MAXCHANNELSPERUSER" = "60"; diff --git a/fix-config.sh b/fix-config.sh index c345801..b937bb0 100644 --- a/fix-config.sh +++ b/fix-config.sh @@ -223,6 +223,18 @@ if ! grep -q '"CPATH"' "$CONFIG_ETC"; then sed -i '/features {/a\ "CPATH" = "'$PREFIX'/etc/ircd.conf";' "$CONFIG_ETC" fi +# Verifică și adaugă setări pentru notificări WHOIS la operatori +if ! grep -q '"SPY_WHOIS"' "$CONFIG_ETC"; then + log_warn "Setări WHOIS pentru operatori lipsesc, le adaug..." + sed -i '/WHOIS_NOTICE.*TRUE/a\ "SPY_WHOIS" = "TRUE";\n "SNOMASK_OPERDEFAULT" = "1024";\n "SNOMASK_DEFAULT" = "1024";' "$CONFIG_ETC" +fi + +# Verifică dacă operatorii au privilegiile WHOIS_NOTICE +if ! grep -q 'PRIV_WHOIS_NOTICE' "$CONFIG_ETC"; then + log_warn "Privilegii WHOIS pentru operatori lipsesc, le adaug..." + sed -i '/admin = yes/a\ snomask = "+HACK,THROTTLE,OLDSNO,NETWORK,OPERKILL,GLINE";\n privileges = "PRIV_WHOIS_NOTICE", "PRIV_HIDE_OPER", "PRIV_ADMIN";' "$CONFIG_ETC" +fi + # 5. Verifică și corectează modul utilizatorilor în clasa Other if grep -q 'usermode = "+i"' "$CONFIG_ETC"; then log_warn "Corectez usermode pentru clasa Other: +i -> +ix" diff --git a/fix-host-hiding.sh b/fix-host-hiding.sh index 9496292..e57d35b 100644 --- a/fix-host-hiding.sh +++ b/fix-host-hiding.sh @@ -183,6 +183,21 @@ if [[ "$apply_fixes" =~ ^[Yy]$ ]]; then sed -i 's/usermode = "[^"]*"/usermode = "+ix"/' "$CONFIG_FILE" log_success "Usermode +ix setat în toate clasele" + # 6. Verifică și adaugă setări pentru notificări WHOIS la operatori + log_info "Verificare și adăugare setări notificări WHOIS pentru operatori..." + + if ! grep -q '"SPY_WHOIS"' "$CONFIG_FILE"; then + log_info "Adaug setări SPY_WHOIS pentru notificări complete..." + sed -i '/WHOIS_NOTICE.*TRUE/a\ "SPY_WHOIS" = "TRUE";\n "SNOMASK_OPERDEFAULT" = "1024";\n "SNOMASK_DEFAULT" = "1024";' "$CONFIG_FILE" + fi + + if ! grep -q 'PRIV_WHOIS_NOTICE' "$CONFIG_FILE"; then + log_info "Adaug privilegii WHOIS pentru operatori..." + 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 "Setări pentru notificări WHOIS la operatori complete" + echo "" echo -e "${VERDE}═══ TEST FINAL ═══${NC}" diff --git a/fix-whois-notifications.sh b/fix-whois-notifications.sh new file mode 100644 index 0000000..1eea627 --- /dev/null +++ b/fix-whois-notifications.sh @@ -0,0 +1,222 @@ +#!/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 diff --git a/install.sh b/install.sh index d53c596..9efd908 100755 --- a/install.sh +++ b/install.sh @@ -675,10 +675,12 @@ Operator { # Clasă class = "Opers"; - # Permisiuni + # Permisiuni și notificări admin = yes; hide_oper = no; hide_channels = no; + snomask = "+HACK,THROTTLE,OLDSNO,NETWORK,OPERKILL,GLINE"; + privileges = "PRIV_WHOIS_NOTICE", "PRIV_HIDE_OPER", "PRIV_ADMIN"; }; # ============================================================================ @@ -790,6 +792,9 @@ features { # WHOIS notifications for operators "WHOIS_NOTICE" = "TRUE"; + "SPY_WHOIS" = "TRUE"; + "SNOMASK_OPERDEFAULT" = "1024"; + "SNOMASK_DEFAULT" = "1024"; }; EOFCONFIG