409 lines
9.1 KiB
Markdown
409 lines
9.1 KiB
Markdown
# ⚠️ 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! 🔧**
|
|
|