ircu2/PROBLEMA_SVS_COMMANDS.md

9.1 KiB

⚠️ 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:

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:

ls -la ircd/*.o | grep svs
# Toate m_svs*.o sunt generate la compilare

Ce lipsește:

Înregistrare în parser (ircd/parse.c):

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):

// 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

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

grep "m_svs" Makefile.in

# Ar trebui să apară în SOURCES:
# SOURCES = ... m_svsjoin.c m_svspart.c ... etc

Pas 3: Verificare headers

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[]:

// 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ă:

// 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

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

# Î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:

// Î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! 🔧*