diff --git a/PROBLEMA_SVS_COMMANDS.md b/PROBLEMA_SVS_COMMANDS.md new file mode 100644 index 0000000..3211442 --- /dev/null +++ b/PROBLEMA_SVS_COMMANDS.md @@ -0,0 +1,408 @@ +# ⚠️ PROBLEMA SVS* Commands - NEFUNCȚIONALE + +**Data**: 24 Februarie 2026 +**Versiune Afectată**: u2.10.12.19+UnderChat(2.0.1) +**Severitate**: 🔴 **ÎNALTĂ** (Impact pe servicii IRC) + +--- + +## 🐛 PROBLEMA + +Comenzile **SVS*** (SVSJOIN, SVSPART, SVSNICK, etc.) **NU FUNCȚIONEAZĂ** în versiunea curentă! + +### Comenzi Afectate + +- ❌ **SVSJOIN** - Force user join +- ❌ **SVSPART** - Force user part +- ❌ **SVSNICK** - Force nick change +- ❌ **SVSMODE** - Force mode change +- ❌ **SVSIDENT** - Set ident +- ❌ **SVSQUIT** - Force quit +- ❌ **SWHOIS** - Set special WHOIS line + +### Simptome + +``` +/SVSJOIN user #channel +# Rezultat: +Unknown command: SVSJOIN + +/SVSPART user #channel +# Rezultat: +Unknown command: SVSPART +``` + +--- + +## 🔍 CAUZA REALĂ + +### Ce există: + +✅ **Cod complet implementat**: +```bash +ircd/m_svsjoin.c # SVSJOIN implementation +ircd/m_svspart.c # SVSPART implementation +ircd/m_svsnick.c # SVSNICK implementation +ircd/m_svsmode.c # SVSMODE implementation +ircd/m_svsident.c # SVSIDENT implementation +ircd/m_svsquit.c # SVSQUIT implementation +ircd/m_swhois.c # SWHOIS implementation +``` + +✅ **Fișiere compilate**: +```bash +ls -la ircd/*.o | grep svs +# Toate m_svs*.o sunt generate la compilare +``` + +### Ce lipsește: + +❌ **Înregistrare în parser** (`ircd/parse.c`): + +```bash +grep "MSG_SVSJOIN" ircd/parse.c +# NU găsește nimic! + +grep "SVSJOIN" ircd/parse.c +# NU găsește nimic! +``` + +**Parser-ul IRC NU ȘTIE de aceste comenzi!** + +--- + +## 📊 EXPLICAȚIE TEHNICĂ + +### Cum funcționează parser-ul IRC: + +1. **User trimite comandă**: `/SVSJOIN user #channel` +2. **Parser caută în tabel** (`parse.c`): Există `MSG_SVSJOIN`? +3. **NU găsește** → Returnează: **"Unknown command"** +4. **Funcția** `ms_svsjoin()` din `m_svsjoin.c` **NU este apelată niciodată**! + +### Tabelul de comenzi (`parse.c`): + +```c +// EXEMPLE de comenzi FUNCȚIONALE: +{ MSG_PRIVMSG, TOK_PRIVMSG, 0, MAXPARA, MFLG_SLOW, 0, { + m_unregistered, m_privmsg, ms_privmsg, mo_privmsg, m_ignore +}}, + +{ MSG_JOIN, TOK_JOIN, 0, MAXPARA, MFLG_SLOW, 0, { + m_unregistered, m_join, ms_join, mo_join, m_ignore +}}, + +// SVS* commands LIPSESC COMPLET din tabel! +// Ar trebui să existe: +{ MSG_SVSJOIN, TOK_SVSJOIN, 0, MAXPARA, MFLG_SLOW, 0, { + m_ignore, m_ignore, ms_svsjoin, m_ignore, m_ignore +}}, +// DAR NU EXISTĂ! +``` + +--- + +## 🎯 SOLUȚIA + +### Pas 1: Verificare fișiere + +```bash +cd ~/ircu2/ircd + +# Verifică că fișierele există: +ls -la m_svs*.c m_swhois.c + +# Output așteptat: +# -rw-r--r-- m_svsjoin.c +# -rw-r--r-- m_svspart.c +# -rw-r--r-- m_svsnick.c +# -rw-r--r-- m_svsmode.c +# -rw-r--r-- m_svsident.c +# -rw-r--r-- m_svsquit.c +# -rw-r--r-- m_swhois.c +``` + +### Pas 2: Verificare Makefile + +```bash +grep "m_svs" Makefile.in + +# Ar trebui să apară în SOURCES: +# SOURCES = ... m_svsjoin.c m_svspart.c ... etc +``` + +### Pas 3: Verificare headers + +```bash +grep "ms_svsjoin\|ms_svspart" ../include/handlers.h + +# Ar trebui să existe declarațiile: +# extern int ms_svsjoin(struct Client*, struct Client*, int, char*[]); +# extern int ms_svspart(struct Client*, struct Client*, int, char*[]); +# etc. +``` + +### Pas 4: Adăugare în parse.c + +**Editează `ircd/parse.c`** și adaugă în tabelul `msgtab[]`: + +```c +// După comenzile existente (ex: după SQUIT), adaugă: + + /* + * SVS* commands - Services control commands + * Used by IRC services (X, ChanServ, NickServ) to control users + */ + { MSG_SVSJOIN, TOK_SVSJOIN, 0, MAXPARA, MFLG_SLOW, 0, { + m_ignore, m_ignore, ms_svsjoin, m_ignore, m_ignore + }}, + { MSG_SVSPART, TOK_SVSPART, 0, MAXPARA, MFLG_SLOW, 0, { + m_ignore, m_ignore, ms_svspart, m_ignore, m_ignore + }}, + { MSG_SVSNICK, TOK_SVSNICK, 0, MAXPARA, MFLG_SLOW, 0, { + m_ignore, m_ignore, ms_svsnick, m_ignore, m_ignore + }}, + { MSG_SVSMODE, TOK_SVSMODE, 0, MAXPARA, MFLG_SLOW, 0, { + m_ignore, m_ignore, ms_svsmode, m_ignore, m_ignore + }}, + { MSG_SVSIDENT, TOK_SVSIDENT, 0, MAXPARA, MFLG_SLOW, 0, { + m_ignore, m_ignore, ms_svsident, m_ignore, m_ignore + }}, + { MSG_SVSQUIT, TOK_SVSQUIT, 0, MAXPARA, MFLG_SLOW, 0, { + m_ignore, m_ignore, ms_svsquit, m_ignore, m_ignore + }}, + { MSG_SWHOIS, TOK_SWHOIS, 0, MAXPARA, MFLG_SLOW, 0, { + m_ignore, m_ignore, ms_swhois, m_ignore, m_ignore + }}, +``` + +### Pas 5: Verificare MSG_* și TOK_* defines + +**Editează `include/msg.h`** și adaugă: + +```c +// SVS* commands +#define MSG_SVSJOIN "SVSJOIN" +#define TOK_SVSJOIN "SJ" +#define MSG_SVSPART "SVSPART" +#define TOK_SVSPART "SP" +#define MSG_SVSNICK "SVSNICK" +#define TOK_SVSNICK "SN" +#define MSG_SVSMODE "SVSMODE" +#define TOK_SVSMODE "SM" +#define MSG_SVSIDENT "SVSIDENT" +#define TOK_SVSIDENT "SI" +#define MSG_SVSQUIT "SVSQUIT" +#define TOK_SVSQUIT "SQ" +#define MSG_SWHOIS "SWHOIS" +#define TOK_SWHOIS "SW" +``` + +### Pas 6: Recompilare + +```bash +cd ~/ircu2 +make clean +make +make install + +# Restart IRCd: +killall -9 ircd +/home/ircd/ircd/bin/ircd -f /home/ircd/ircd/lib/ircd.conf +``` + +### Pas 7: Testare + +```bash +# În IRC ca oper: +/SVSJOIN testuser #testchannel + +# Ar trebui să funcționeze (sau să dea eroare specifică, nu "Unknown command") +``` + +--- + +## 📋 CHECKLIST ACTIVARE + +- [ ] Verificat că fișierele `m_svs*.c` există +- [ ] Verificat că sunt în `Makefile.in` +- [ ] Verificat declarații în `include/handlers.h` +- [ ] Adăugat `MSG_*` și `TOK_*` în `include/msg.h` +- [ ] Adăugat entries în tabelul `msgtab[]` din `ircd/parse.c` +- [ ] Recompilat cu `make clean && make` +- [ ] Instalat cu `make install` +- [ ] Restart IRCd +- [ ] Testat comenzile SVS* +- [ ] Verificat că serviciile IRC funcționează + +--- + +## 🎭 IMPACT + +### Fără SVS* commands: + +❌ **Servicii IRC limitate**: +- X (IRC services) **NU poate** force join users pe #CService +- ChanServ **NU poate** auto-op/voice users +- NickServ **NU poate** force nick change pentru nick enforcement +- BotServ **NU poate** auto-join bots pe canale + +❌ **Management manual**: +- Operatorii trebuie să folosească manual `/OPMODE` pentru modes +- NU există force join/part automat +- Serviciile au funcționalitate LIMITATĂ + +### Cu SVS* commands activate: + +✅ **Servicii IRC complete**: +- X poate gestiona complet users și canale +- ChanServ auto-mode funcționează +- NickServ enforcement funcționează +- BotServ auto-join funcționează + +✅ **Automatizare**: +- Serviciile gestionează totul automat +- Users primesc automat @ sau + când intră pe canale +- Nick enforcement automat +- Integration perfectă cu Anope/Atheme + +--- + +## 🔧 ALTERNATIVE TEMPORARE + +Până când SVS* sunt activate, poți folosi: + +### În loc de SVSJOIN: +``` +# Manual prin oper: +/OPMODE #channel +o username +``` + +### În loc de SVSPART: +``` +/KICK #channel username :forced part +``` + +### În loc de SVSNICK: +``` +# Nu există alternativă directă +# User trebuie să schimbe manual nickname-ul +``` + +### În loc de SVSMODE: +``` +/OPMODE #channel +o username +/MODE username +x (pentru user modes) +``` + +### În loc de SVSQUIT: +``` +/KILL username :forced disconnect +``` + +**Limitări**: Toate alternative sunt MANUALE și necesită intervenție oper! + +--- + +## 📊 PRIORITATE DEZVOLTARE + +### Efort vs Impact: + +**Efort**: 🟢 **SCĂZUT** (2-3 ore) +- Verificare declarații existente +- Adăugare în parse.c și msg.h +- Recompilare și testare + +**Impact**: 🔴 **ÎNALT** (Critic pentru servicii) +- Servicii IRC complet funcționale +- Automatizare completă +- Experience users mult îmbunătățit + +**Prioritate**: 🔴 **MAXIMĂ** +- Ar trebui implementat în v2.0.2 sau v2.1.0 +- Esențial pentru network-uri production cu servicii + +--- + +## 📚 PENTRU DEVELOPERI + +### Structura unei comenzi SVS: + +```c +// În m_svsjoin.c: +int ms_svsjoin(struct Client* cptr, struct Client* sptr, int parc, char* parv[]) +{ + // parv[0] = sender prefix + // parv[1] = target nickname + // parv[2] = channel + + struct Client* acptr; + struct Channel* chptr; + + // Find target user + if (!(acptr = FindUser(parv[1]))) + return 0; // User not found + + // Find/create channel + chptr = get_channel(acptr, parv[2], CGT_CREATE); + + // Force join + add_user_to_channel(chptr, acptr, 0); + + // Send JOIN to network + sendcmdto_channel_butserv_butone(acptr, CMD_JOIN, chptr, cptr, ...); + + return 0; +} +``` + +### Protocol P10: + +``` +# SVSJOIN în protocol P10: +:ServiceNumeric SJ TargetNumeric #channel + +# Exemplu: +:ABCDE SJ FGHIJ #cservice +# ABCDE = X (services) +# FGHIJ = User target +``` + +--- + +## ✅ CÂND VA FI FIXED? + +### Roadmap propus: + +**v2.0.2** (patch release): +- Activare SVS* commands +- Testing cu Anope services +- Documentație actualizată + +**v2.1.0** (minor release): +- SVS* complete + optimizări +- SA* aliases (SAJOIN, SAPART, etc.) +- Integration testing complex + +--- + +## 📞 RAPORTARE + +Dacă observi probleme cu serviciile IRC (X, ChanServ nu funcționează corect): + +1. Verifică dacă SVS* sunt active: `/SVSJOIN` +2. Dacă primești "Unknown command" → **Confirmă problema** +3. Urmărește acest document pentru fix +4. Alternative temporare: Folosește OPMODE manual + +--- + +**Creat de**: Senior Software Architect +**Data**: 24 Februarie 2026 +**Status**: 🔴 **PROBLEMA IDENTIFICATĂ** - Fix în curs +**Versiune Afectată**: u2.10.12.19+UnderChat(2.0.1) + +--- + +**⚠️ SVS* COMMANDS NU FUNCȚIONEAZĂ! URMĂREȘTE ACEST DOC PENTRU FIX! 🔧** +