3.7 KiB
🐛 DEBUG FINAL - Verificare IsHideOper() Runtime
Data: 23 Februarie 2026 22:45
Status: 🔍 DEBUG MODE ACTIVAT
🎯 PROBLEMA PERSISTENTĂ
Chiar cu:
- ✅ Cod modificat cu
!IsHideOper(acptr) - ✅
hide_oper = yes;în config - ✅ Recompilat și restartat
TOT APARE: "is an IRC Administrator"
🔍 DEBUG ACUM
Am adăugat LOG DE DEBUG în cod pentru a vedea exact ce returnează IsHideOper() în runtime!
📋 INSTRUCȚIUNI DEBUG
Pas 1: Pull & Recompilează cu Debug
# Pe server:
cd ~/ircu2
git pull origin main
# Verifică că ai log-ul de debug:
grep -A 3 "DEBUG: Log pentru verificare" ircd/m_whois.c
# Ar trebui să vezi:
# log_write(LS_DEBUG, L_INFO, 0, "WHOIS DEBUG: %s - SeeOper=%d IsHideOper=%d IsAdmin=%d",
# Recompilează:
make clean && make
make install
# Restart:
killall -9 ircd && sleep 2 && /home/ircd/ircd/bin/ircd -f /home/ircd/ircd/lib/ircd.conf
Pas 2: Test & Verifică Logs
# În IRC:
/oper Raducu password
/whois Radu2
# Pe server, verifică log-ul:
tail -f /home/ircd/ircd/log/ircd.log | grep "WHOIS DEBUG"
# Ar trebui să vezi ceva gen:
# WHOIS DEBUG: Radu2 - SeeOper=1 IsHideOper=0 IsAdmin=1
# ^
# ASTA e problema!
# IsHideOper=0 înseamnă FALSE (când ar trebui să fie 1/TRUE)
🎯 CE VOM DESCOPERI
Dacă vezi IsHideOper=0 (FALSE):
Problema: Flag-ul hide_oper NU e setat în runtime chiar dacă e în config!
Cauză posibilă:
- Config-ul nu e citit corect
- Privilegiile din Class override-uiesc Operator
- Flag-ul nu se propagă corect la OPER time
Soluție: Trebuie să setăm flag-ul explicit când user-ul face /OPER
Dacă vezi IsHideOper=1 (TRUE):
Problema: Logica noastră e corectă DAR condiția SeeOper() returnează TRUE pentru alți operi!
Cauză: SeeOper() verifică HasPriv(sptr, PRIV_SEE_OPERS) - alți operi pot vedea oricum!
Soluție: Trebuie să verificăm CINE face WHOIS și să ascundem doar pentru non-operi
🔧 POSIBILE FIX-URI (bazat pe debug)
FIX 1: Dacă IsHideOper=0 (nu se setează)
Trebuie să setăm flag-ul în m_oper.c când user-ul face /OPER:
// În m_oper.c, după ce se acceptă oper-ul:
if (aconf->hide_oper)
SetHideOper(sptr);
FIX 2: Dacă IsHideOper=1 DAR tot apare
Trebuie să verificăm mai strict în m_whois.c:
// Ascunde de TOȚI (inclusiv alți operi):
if (IsAnOper(acptr) && IsHideOper(acptr)) {
// NU trimite mesaj deloc!
} else if (SeeOper(sptr,acptr)) {
// Trimite mesaj doar pentru operi vizibili
...
}
FIX 3: Dacă SeeOper=0 (nu se vede deloc)
Atunci codul funcționează corect și problema e altundeva (alt server, cache, etc.)
📊 RULEAZĂ ȘI ARATĂ-MI OUTPUT-UL
# 1. Recompilează cu debug:
cd ~/ircu2
git pull origin main
make clean && make
make install
killall -9 ircd && sleep 2 && /home/ircd/ircd/bin/ircd -f /home/ircd/ircd/lib/ircd.conf
# 2. Test în IRC:
/oper Raducu password
/whois Radu2
# 3. Verifică log-ul:
tail -20 /home/ircd/ircd/log/ircd.log | grep -E "WHOIS DEBUG|OPER"
# 4. ARATĂ-MI OUTPUT-UL!
🎯 DUPĂ CE VEDEM LOG-UL
Bazat pe valorile din log, voi ști EXACT unde e problema și voi face fix-ul corect!
Posibilitățile:
| IsHideOper | SeeOper | Rezultat | Fix |
|---|---|---|---|
| 0 (FALSE) | 1 (TRUE) | Apare mesaj | Setăm flag în m_oper.c |
| 1 (TRUE) | 1 (TRUE) | Apare mesaj | Schimbăm logica în m_whois.c |
| 1 (TRUE) | 0 (FALSE) | NU apare | FUNCȚIONEAZĂ! ✅ |
🔍 RULEAZĂ DEBUG-UL ȘI SPUNE-MI CE VEZI ÎN LOG! 🔍
Timp: 2 minute
Rezultat: Vom ști EXACT unde e problema! ✅