diff --git a/DEBUG_ISHIDEOPER_RUNTIME.md b/DEBUG_ISHIDEOPER_RUNTIME.md new file mode 100644 index 0000000..fa5833c --- /dev/null +++ b/DEBUG_ISHIDEOPER_RUNTIME.md @@ -0,0 +1,162 @@ +# 🐛 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 + +```bash +# 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 + +```bash +# Î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ă**: +1. Config-ul nu e citit corect +2. Privilegiile din Class override-uiesc Operator +3. 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: + +```c +// Î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: + +```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 + +```bash +# 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! ✅ +