# ⚠️ 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! 🔧**