From 00969b0d38bfa45b17ea18443ea58e7805a54f54 Mon Sep 17 00:00:00 2001 From: mihaiitdata Date: Tue, 24 Feb 2026 00:56:03 +0200 Subject: [PATCH] =?UTF-8?q?=F0=9F=93=9D=20Add=20detailed=20documentation?= =?UTF-8?q?=20for=20SVS*=20commands=20problem=20=E2=9A=A0=EF=B8=8F=20DOCUM?= =?UTF-8?q?ENTA=C8=9AIE=20COMPLET=C4=82=20pentru=20problema=20SVS*=20comma?= =?UTF-8?q?nds!=20=F0=9F=93=8B=20CON=C8=9AINUT:=201.=20PROBLEMA=20identifi?= =?UTF-8?q?cat=C4=83:=20=20=20=20-=20SVS*=20commands=20returneaz=C4=83=20'?= =?UTF-8?q?Unknown=20command'=20=20=20=20-=20Cod=20exist=C4=83=20dar=20NU?= =?UTF-8?q?=20e=20=C3=AEnregistrat=20=C3=AEn=20parse.c=20=20=20=20-=20Impa?= =?UTF-8?q?ct:=20Servicii=20IRC=20nefunc=C8=9Bionale=202.=20CAUZA=20REAL?= =?UTF-8?q?=C4=82:=20=20=20=20-=20=E2=9C=85=20Cod=20implementat=20=C3=AEn?= =?UTF-8?q?=20m=5Fsvs*.c=20=20=20=20-=20=E2=9C=85=20Fi=C8=99iere=20compila?= =?UTF-8?q?te=20corect=20=20=20=20-=20=E2=9D=8C=20NU=20sunt=20=C3=AEnregis?= =?UTF-8?q?trate=20=C3=AEn=20parse.c=20=20=20=20-=20=E2=9D=8C=20Parser-ul?= =?UTF-8?q?=20nu=20=C8=99tie=20de=20comenzi=203.=20SOLU=C8=9AIA=20COMPLET?= =?UTF-8?q?=C4=82:=20=20=20=20-=20Pas=20cu=20pas=20pentru=20activare=20=20?= =?UTF-8?q?=20=20-=20Verificare=20fi=C8=99iere=20=C8=99i=20Makefile=20=20?= =?UTF-8?q?=20=20-=20Ad=C4=83ugare=20=C3=AEn=20parse.c=20(cod=20exact)=20?= =?UTF-8?q?=20=20=20-=20Ad=C4=83ugare=20MSG=5F*=20defines=20=C3=AEn=20msg.?= =?UTF-8?q?h=20=20=20=20-=20Recompilare=20=C8=99i=20testare=204.=20CHECKLI?= =?UTF-8?q?ST=20activare:=20=20=20=20-=2010=20pa=C8=99i=20verificare=20=20?= =?UTF-8?q?=20=20-=20Comenzi=20exacte=20de=20rulat=20=20=20=20-=20Testing?= =?UTF-8?q?=20final=205.=20IMPACT=20detaliat:=20=20=20=20-=20F=C4=83r?= =?UTF-8?q?=C4=83=20SVS*:=20Servicii=20limitate=20=20=20=20-=20Cu=20SVS*:?= =?UTF-8?q?=20Automatizare=20complet=C4=83=20=20=20=20-=20Alternative=20te?= =?UTF-8?q?mporare=206.=20PRIORITATE:=20=20=20=20-=20Efort:=20SC=C4=82ZUT?= =?UTF-8?q?=20(2-3=20ore)=20=20=20=20-=20Impact:=20=C3=8ENALT=20(critic=20?= =?UTF-8?q?pentru=20servicii)=20=20=20=20-=20Prioritate:=20MAXIM=C4=82=207?= =?UTF-8?q?.=20Pentru=20DEVELOPERI:=20=20=20=20-=20Structura=20unei=20come?= =?UTF-8?q?nzi=20SVS=20=20=20=20-=20Protocol=20P10=20examples=20=20=20=20-?= =?UTF-8?q?=20Integration=20cu=20servicii=208.=20ROADMAP:=20=20=20=20-=20v?= =?UTF-8?q?2.0.2:=20Activare=20SVS*=20=20=20=20-=20v2.1.0:=20SVS*=20+=20SA?= =?UTF-8?q?*=20aliases=20=F0=9F=93=8A=20COMENZI=20AFECTATE:=20=E2=9D=8C=20?= =?UTF-8?q?SVSJOIN=20-=20Force=20join=20=E2=9D=8C=20SVSPART=20-=20Force=20?= =?UTF-8?q?part=20=E2=9D=8C=20SVSNICK=20-=20Force=20nick=20change=20?= =?UTF-8?q?=E2=9D=8C=20SVSMODE=20-=20Force=20mode=20change=20=E2=9D=8C=20S?= =?UTF-8?q?VSIDENT=20-=20Set=20ident=20=E2=9D=8C=20SVSQUIT=20-=20Force=20q?= =?UTF-8?q?uit=20=E2=9D=8C=20SWHOIS=20-=20Special=20WHOIS=20line=20?= =?UTF-8?q?=F0=9F=8E=AF=20PENTRU=20CINE:=20-=20Admini:=20=C3=8En=C8=9Beleg?= =?UTF-8?q?=20de=20ce=20serviciile=20nu=20func=C8=9Bioneaz=C4=83=20-=20Dev?= =?UTF-8?q?eloperi:=20Pa=C8=99i=20exac=C8=9Bi=20pentru=20fix=20-=20Users:?= =?UTF-8?q?=20=C8=98tiu=20ce=20s=C4=83=20a=C8=99tepte=20-=20Support:=20Pot?= =?UTF-8?q?=20explica=20problema=20corect=20Status:=20=E2=9C=85=20DOCUMENT?= =?UTF-8?q?A=C8=9AIE=20COMPLET=C4=82=20Next:=20Implementare=20fix=20=C3=AE?= =?UTF-8?q?n=20v2.0.2/v2.1.0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- PROBLEMA_SVS_COMMANDS.md | 408 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 408 insertions(+) create mode 100644 PROBLEMA_SVS_COMMANDS.md 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! 🔧** +