SOLUȚIE COMPLETĂ pentru porturile publice și notificările WHOIS la operatori

PROBLEMELE REZOLVATE:
1. PORTURILE PUBLICE nu se generau corect:
   - În ircd.conf linia 126: 'EOFCONFIG_CLIENT_PORTS' în loc de blocuri Port
   - Cauza: Template admin.sh avea doar câteva porturi hardcodate
2. NOTIFICĂRILE WHOIS la operatori nu funcționau:
   - Operatorii nu primeau notificare când cineva le da /whois
   - Cauza: Lipseau setări critice SPY_WHOIS, PRIV_WHOIS_NOTICE, snomask
SOLUȚII IMPLEMENTATE (toate în română):
1. admin.sh - Porturile publice complete:
    Adăugat toate porturile standard: 6660,6661,6662,6663,6664,6665,6666,6667,6668,6669,7000,6697(SSL)
    Configurația operatorilor cu privilegii WHOIS complete
    Features SPY_WHOIS, SNOMASK_OPERDEFAULT, SNOMASK_DEFAULT
    Clasa Opers cu usermode +Wx în loc de +W
2. install.sh - Configurația operatorilor îmbunătățită:
    Snomask pentru operatori: +HACK,THROTTLE,OLDSNO,NETWORK,OPERKILL,GLINE
    Privilegii WHOIS: PRIV_WHOIS_NOTICE, PRIV_HIDE_OPER, PRIV_ADMIN
    Features SPY_WHOIS pentru notificări complete
3. fix-config.sh - Reparare configurații existente:
    Adaugă setări WHOIS dacă lipsesc (SPY_WHOIS, SNOMASK)
    Verifică și adaugă privilegii pentru operatori existenți
    Corectare comprehensivă pentru toate problemele
4. fix-host-hiding.sh - Extins cu notificări WHOIS:
    Verificări și reparare pentru toate setările WHOIS
    Integrare cu repararea host hiding
    Diagnostic complet pentru ambele probleme
5. fix-whois-notifications.sh - Script specializat NOU:
    Diagnostic specific pentru problemele WHOIS la operatori
    Verifică toate setările: SPY_WHOIS, PRIV_WHOIS_NOTICE, SNOMASK
    Reparare automată cu explicații detaliate
    Test final și instrucțiuni pentru utilizator
6. INSTALL_AUTO.md - Documentație completă:
    Secțiuni detaliate pentru ambele probleme
    Diagnostic pas-cu-pas și soluții
    Exemple concrete de configurație
    Comenzi exacte pentru testare și verificare
REZULTATE AȘTEPTATE:
Porturile publice:
- Toate porturile 6660-6669, 7000, 6697 generate corect în ircd.conf
- Nu mai apare EOFCONFIG_CLIENT_PORTS pe linia 126
Notificări WHOIS:
- Operatorii primesc +Wx la /oper
- La /whois primesc notificarea: '*** Notice: nickname (user@host) is doing a WHOIS on you'
- Funcționează pentru toți operatorii/administratorii
UTILIZARE:
./fix-whois-notifications.sh ~/ircd - pentru diagnostic și reparare WHOIS
./admin.sh → opțiunea 1 - pentru regenerare config cu toate porturile
Toate scripturile sunt integrate și funcționează împreună!
This commit is contained in:
mihaiitdata 2026-02-13 14:54:48 +02:00
parent e0714b80e4
commit a11e82421f
6 changed files with 372 additions and 9 deletions

View File

@ -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

View File

@ -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";

View File

@ -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"

View File

@ -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}"

222
fix-whois-notifications.sh Normal file
View File

@ -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

View File

@ -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