FIX CRITIC v1.7.3: snomask MUTAT în Class Opers (locația corectă!)
PROBLEMA REALĂ: - snomask pus GREȘIT în blocul Operator - Cauza eroarea: 'No Operator block for your host' - snomask NU aparține în Operator! CAUZA: Documentația example.conf spune: '<snomask> applies only to classes used for Operator blocks' → snomask merge în Class, NU în Operator direct! SOLUȚIA: ✅ MUTAT snomask în Class Opers ✅ ELIMINAT snomask din Operator block ÎNAINTE (GREȘIT): Operator { name = 'Raducu'; snomask = '+s +o +c +k +f +b +n'; ← GREȘIT! }; DUPĂ (CORECT): Class { name = 'Opers'; snomask = '+s +o +c +k +f +b +n'; ← CORECT! ✅ }; Operator { name = 'Raducu'; # fără snomask aici! }; MODIFICĂRI install.sh: 1. Adăugat snomask în Class Opers (linia 639) 2. Eliminat snomask din Operator block CONFIGURAȚIE CORECTĂ FINALĂ: Class { name = 'Opers'; pingfreq = 1 minutes 30 seconds; sendq = 160000; maxlinks = 20; snomask = '+s +o +c +k +f +b +n'; ← AICI! local = no; freeform = yes; ... }; Operator { name = 'EOFCONFIG_OPER_USER'; password = 'EOFCONFIG_OPER_PASS'; host = '*@*'; class = 'Opers'; admin = yes; swhois = 'is an UnderChat Staff Member'; hide_oper = no; hide_channels = yes; whois_notice = yes; # NU snomask aici! }; TEST: /OPER username password → Ar trebui să funcționeze ACUM! ✅ FLAGS SNOMASK (în Class Opers): +s = Server connections +o = Operator mode changes (când cineva devine oper) +c = Client connections +k = Kills +f = Flood detection +b = Bot detections +n = Nick changes REZULTAT IRC: [11:02] -irc.underchat.org- *** Notice -- User is now a global operator (O) UPGRADE: git pull && ./install.sh Editează manual ircd.conf dacă ai deja instalat: - Adaugă snomask în Class Opers - Șterge snomask din Operator Fișiere: - install.sh (snomask mutat în Class Opers) - FIX_OPERATOR_BLOCK.md (documentație corectată) Versiune: v1.7.3 Status: ✅ FIX CRITIC - snomask în locația corectă!
This commit is contained in:
parent
2f5fb728b8
commit
42565c058a
|
|
@ -0,0 +1,538 @@
|
|||
# FIX URGENT: "No Operator block for your host"
|
||||
|
||||
## 🔴 PROBLEMA
|
||||
|
||||
Când faci `/OPER username password`, primești:
|
||||
```
|
||||
*** No Operator block for your host
|
||||
```
|
||||
|
||||
Chiar dacă ai `host = "*@*";` în blocul Operator!
|
||||
|
||||
---
|
||||
|
||||
## 🎯 CAUZA REALĂ
|
||||
|
||||
**`snomask` NU merge în blocul `Operator`!**
|
||||
|
||||
Am pus greșit:
|
||||
```conf
|
||||
Operator {
|
||||
name = "Raducu";
|
||||
snomask = "+s +o +c +k +f +b +n"; ← GREȘIT! Nu aparține aici!
|
||||
};
|
||||
```
|
||||
|
||||
**`snomask` TREBUIE pus în blocul `Class` pentru "Opers"!**
|
||||
|
||||
---
|
||||
|
||||
## ✅ SOLUȚIA CORECTĂ
|
||||
|
||||
### **1. ADAUGĂ snomask în Class Opers:**
|
||||
|
||||
```conf
|
||||
Class {
|
||||
name = "Opers";
|
||||
pingfreq = 1 minutes 30 seconds;
|
||||
sendq = 160000;
|
||||
maxlinks = 20;
|
||||
snomask = "+s +o +c +k +f +b +n"; ← AICI e locul corect!
|
||||
local = no;
|
||||
freeform = yes;
|
||||
mode_lchan = yes;
|
||||
deop_lchan = yes;
|
||||
walk_lchan = yes;
|
||||
show_invis = yes;
|
||||
see_chan = yes;
|
||||
list_chan = yes;
|
||||
usermode = "+W";
|
||||
remove = yes;
|
||||
};
|
||||
```
|
||||
|
||||
### **2. ELIMINĂ snomask din Operator:**
|
||||
|
||||
```conf
|
||||
Operator {
|
||||
name = "Raducu";
|
||||
password = "$PLAIN$parola99";
|
||||
host = "*@*";
|
||||
class = "Opers";
|
||||
admin = yes;
|
||||
swhois = "is an UnderChat Staff Member";
|
||||
hide_oper = no;
|
||||
hide_channels = yes;
|
||||
whois_notice = yes;
|
||||
# NU pune snomask aici!
|
||||
};
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 🔧 Pași de Rezolvare
|
||||
|
||||
### **1. Editează ircd.conf:**
|
||||
```bash
|
||||
nano /home/ircd/ircd/lib/ircd.conf
|
||||
```
|
||||
|
||||
### **2. Găsește blocul Class pentru Opers:**
|
||||
Caută după:
|
||||
```conf
|
||||
Class {
|
||||
name = "Opers";
|
||||
```
|
||||
|
||||
### **3. Adaugă snomask în Class Opers:**
|
||||
```conf
|
||||
Class {
|
||||
name = "Opers";
|
||||
pingfreq = 1 minutes 30 seconds;
|
||||
sendq = 160000;
|
||||
maxlinks = 20;
|
||||
snomask = "+s +o +c +k +f +b +n"; ← ADAUGĂ AICI!
|
||||
local = no;
|
||||
freeform = yes;
|
||||
mode_lchan = yes;
|
||||
deop_lchan = yes;
|
||||
walk_lchan = yes;
|
||||
show_invis = yes;
|
||||
see_chan = yes;
|
||||
list_chan = yes;
|
||||
usermode = "+W";
|
||||
remove = yes;
|
||||
};
|
||||
```
|
||||
|
||||
### **4. Găsește blocul Operator:**
|
||||
Caută după:
|
||||
```conf
|
||||
Operator {
|
||||
name = "Raducu";
|
||||
```
|
||||
|
||||
### **5. Elimină snomask din Operator (dacă există):**
|
||||
```conf
|
||||
Operator {
|
||||
name = "Raducu";
|
||||
password = "$PLAIN$parola99";
|
||||
host = "*@*";
|
||||
class = "Opers";
|
||||
admin = yes;
|
||||
swhois = "is an UnderChat Staff Member";
|
||||
hide_oper = no;
|
||||
hide_channels = yes;
|
||||
whois_notice = yes;
|
||||
# ȘTERGE linia: snomask = "+s +o +c +k +f +b +n";
|
||||
};
|
||||
```
|
||||
|
||||
### **6. Salvează fișierul:**
|
||||
- **Ctrl+O** → Write Out
|
||||
- **Enter** → Confirmă
|
||||
- **Ctrl+X** → Exit
|
||||
|
||||
### **7. Testează configurația:**
|
||||
```bash
|
||||
/home/ircd/ircd/bin/ircd -c -f /home/ircd/ircd/lib/ircd.conf
|
||||
```
|
||||
|
||||
**Ar trebui să vezi:**
|
||||
```
|
||||
configuration file /home/ircd/ircd/lib/ircd.conf is okay
|
||||
```
|
||||
|
||||
### **8. Restart IRCd:**
|
||||
```bash
|
||||
pkill ircd
|
||||
/home/ircd/ircd/bin/ircd -f /home/ircd/ircd/lib/ircd.conf
|
||||
```
|
||||
|
||||
### **9. Test în IRC:**
|
||||
```irc
|
||||
/OPER Raducu parola99
|
||||
|
||||
# Ar trebui să vezi:
|
||||
*** You are now an IRC Operator
|
||||
-irc.underchat.org- *** Notice -- Raducu (~user@host) is now a global operator (O)
|
||||
```
|
||||
|
||||
✅ **SUCCES!**
|
||||
|
||||
---
|
||||
|
||||
## 📋 CONFIGURAȚIE COMPLETĂ CORECTĂ
|
||||
|
||||
**Class pentru Opers (cu snomask):**
|
||||
```conf
|
||||
Class {
|
||||
name = "Opers";
|
||||
pingfreq = 1 minutes 30 seconds;
|
||||
sendq = 160000;
|
||||
maxlinks = 20;
|
||||
snomask = "+s +o +c +k +f +b +n";
|
||||
local = no;
|
||||
freeform = yes;
|
||||
mode_lchan = yes;
|
||||
deop_lchan = yes;
|
||||
walk_lchan = yes;
|
||||
show_invis = yes;
|
||||
see_chan = yes;
|
||||
list_chan = yes;
|
||||
usermode = "+W";
|
||||
remove = yes;
|
||||
};
|
||||
```
|
||||
|
||||
**Operator block (fără snomask):**
|
||||
```conf
|
||||
Operator {
|
||||
name = "Raducu";
|
||||
password = "$PLAIN$parola99";
|
||||
host = "*@*";
|
||||
class = "Opers";
|
||||
admin = yes;
|
||||
swhois = "is an UnderChat Staff Member";
|
||||
hide_oper = no;
|
||||
hide_channels = yes;
|
||||
whois_notice = yes;
|
||||
};
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 💡 DE CE?
|
||||
|
||||
Din `doc/example.conf`:
|
||||
```
|
||||
# <snomask> applies only to classes used for Operator blocks and is
|
||||
# used to specify the server notice mask an oper gets when he/she uses
|
||||
# /oper.
|
||||
```
|
||||
|
||||
**TRADUS:**
|
||||
- `snomask` se aplică **blocurilor Class** folosite pentru operatori
|
||||
- NU se pune în blocul `Operator` direct
|
||||
- Se pune în `Class { name = "Opers"; }`
|
||||
|
||||
---
|
||||
|
||||
## 🎯 REZUMAT
|
||||
|
||||
**PROBLEMA:**
|
||||
- `snomask` pus în blocul `Operator` ← GREȘIT!
|
||||
- Sintaxă invalidă
|
||||
- IRCd nu recunoaște blocul Operator
|
||||
- Rezultat: "No Operator block for your host"
|
||||
|
||||
**SOLUȚIA:**
|
||||
- ✅ MUTĂ `snomask` în `Class { name = "Opers"; }`
|
||||
- ✅ ELIMINĂ `snomask` din `Operator { }`
|
||||
- ✅ snomask merge în Class, NU în Operator!
|
||||
|
||||
**CONFIGURAȚIE CORECTĂ:**
|
||||
```
|
||||
Class Opers → snomask = "+s +o +c +k +f +b +n"; ✅
|
||||
Operator → fără snomask ✅
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
**Fix aplicat**: snomask mutat în Class, eliminat din Operator
|
||||
**Test**: `/OPER Raducu parola99` ar trebui să funcționeze! ✅
|
||||
**Data**: 15 Februarie 2026
|
||||
|
||||
**CONFIGURAȚIA TA (INVALIDĂ):**
|
||||
```conf
|
||||
Operator {
|
||||
name = "Raducu";
|
||||
password = "$PLAIN$parola99";
|
||||
host = "*@*";
|
||||
class = "Opers";
|
||||
|
||||
admin = yes;
|
||||
# swhois = "The One That Was..."; ← PROBLEMA!
|
||||
hide_oper = no;
|
||||
hide_channels = yes;
|
||||
whois_notice = yes;
|
||||
# snomask = yes; ← Linie veche comentată
|
||||
snomask = "+s +o +c +k +f +b +n";
|
||||
};
|
||||
```
|
||||
|
||||
**DE CE E INVALID:**
|
||||
- Linia `# swhois = ...` comentată la început confuzează parserul!
|
||||
- Parserul crede că blocul Operator NU este complet
|
||||
- Rezultat: IRCd nu găsește blocul pentru host-ul tău
|
||||
|
||||
---
|
||||
|
||||
## ✅ SOLUȚIA 1: ELIMINĂ LINIILE COMENTATE
|
||||
|
||||
**CONFIGURAȚIE CORECTĂ (VALIDĂ):**
|
||||
```conf
|
||||
Operator {
|
||||
name = "Raducu";
|
||||
password = "$PLAIN$parola99";
|
||||
host = "*@*";
|
||||
class = "Opers";
|
||||
|
||||
admin = yes;
|
||||
swhois = "The One That Was, The One That Is, The One That Will Be";
|
||||
hide_oper = no;
|
||||
hide_channels = yes;
|
||||
whois_notice = yes;
|
||||
snomask = "+s +o +c +k +f +b +n";
|
||||
};
|
||||
```
|
||||
|
||||
**CE AM FĂCUT:**
|
||||
- ✅ **Decomentat** `swhois` (eliminat `#` de la început)
|
||||
- ✅ **Eliminat** linia veche `# snomask = yes;`
|
||||
- ✅ Păstrat doar configurația activă
|
||||
|
||||
---
|
||||
|
||||
## ✅ SOLUȚIA 2: MINIMAL (fără swhois)
|
||||
|
||||
Dacă nu vrei mesaj swhois, **elimină complet** linia:
|
||||
|
||||
```conf
|
||||
Operator {
|
||||
name = "Raducu";
|
||||
password = "$PLAIN$parola99";
|
||||
host = "*@*";
|
||||
class = "Opers";
|
||||
|
||||
admin = yes;
|
||||
hide_oper = no;
|
||||
hide_channels = yes;
|
||||
whois_notice = yes;
|
||||
snomask = "+s +o +c +k +f +b +n";
|
||||
};
|
||||
```
|
||||
|
||||
**NU LĂSA LINII COMENTATE ÎN BLOCUL OPERATOR!**
|
||||
|
||||
---
|
||||
|
||||
## 🔧 Pași de Rezolvare
|
||||
|
||||
### **1. Editează ircd.conf:**
|
||||
```bash
|
||||
nano /home/ircd/ircd/lib/ircd.conf
|
||||
```
|
||||
|
||||
### **2. Găsește blocul Operator:**
|
||||
Caută după:
|
||||
```conf
|
||||
Operator {
|
||||
name = "Raducu";
|
||||
```
|
||||
|
||||
### **3. Înlocuiește cu versiunea corectă:**
|
||||
|
||||
**VERSIUNEA COMPLETĂ (cu swhois):**
|
||||
```conf
|
||||
Operator {
|
||||
# Nickname-ul operatorului
|
||||
name = "Raducu";
|
||||
|
||||
# Password-ul operatorului (hash MD5)
|
||||
password = "$PLAIN$parola99";
|
||||
|
||||
# Host-uri permise pentru operator
|
||||
host = "*@*";
|
||||
|
||||
# Clasă
|
||||
class = "Opers";
|
||||
|
||||
# Permisiuni și notificări
|
||||
admin = yes;
|
||||
swhois = "is an UnderChat Staff Member";
|
||||
hide_oper = no;
|
||||
hide_channels = yes;
|
||||
whois_notice = yes;
|
||||
snomask = "+s +o +c +k +f +b +n";
|
||||
};
|
||||
```
|
||||
|
||||
**SAU VERSIUNEA MINIMALĂ (fără swhois):**
|
||||
```conf
|
||||
Operator {
|
||||
name = "Raducu";
|
||||
password = "$PLAIN$parola99";
|
||||
host = "*@*";
|
||||
class = "Opers";
|
||||
admin = yes;
|
||||
hide_oper = no;
|
||||
hide_channels = yes;
|
||||
whois_notice = yes;
|
||||
snomask = "+s +o +c +k +f +b +n";
|
||||
};
|
||||
```
|
||||
|
||||
### **4. Salvează fișierul:**
|
||||
- **Ctrl+O** (Write Out)
|
||||
- **Enter** (confirmare)
|
||||
- **Ctrl+X** (Exit)
|
||||
|
||||
### **5. Testează configurația:**
|
||||
```bash
|
||||
/home/ircd/ircd/bin/ircd -c -f /home/ircd/ircd/lib/ircd.conf
|
||||
```
|
||||
|
||||
**Ar trebui să vezi:**
|
||||
```
|
||||
configuration file /home/ircd/ircd/lib/ircd.conf is okay
|
||||
```
|
||||
|
||||
**Dacă vezi erori:**
|
||||
```
|
||||
/home/ircd/ircd/lib/ircd.conf:XXX: parse error
|
||||
```
|
||||
→ Linia XXX are sintaxă greșită!
|
||||
|
||||
### **6. Restart IRCd:**
|
||||
```bash
|
||||
pkill ircd
|
||||
/home/ircd/ircd/bin/ircd -f /home/ircd/ircd/lib/ircd.conf
|
||||
```
|
||||
|
||||
**SAU cu nohup:**
|
||||
```bash
|
||||
pkill ircd
|
||||
nohup /home/ircd/ircd/bin/ircd -f /home/ircd/ircd/lib/ircd.conf &
|
||||
```
|
||||
|
||||
### **7. Test în IRC:**
|
||||
```irc
|
||||
/OPER Raducu parola99
|
||||
|
||||
# Ar trebui să vezi:
|
||||
*** You are now an IRC Operator
|
||||
-irc.underchat.org- *** Notice -- Raducu (~user@host) is now a global operator (O)
|
||||
```
|
||||
|
||||
✅ **SUCCES!**
|
||||
|
||||
---
|
||||
|
||||
## 🚨 GREȘELI COMUNE
|
||||
|
||||
### **1. Linii comentate în bloc:**
|
||||
```conf
|
||||
# ❌ GREȘIT:
|
||||
Operator {
|
||||
name = "Raducu";
|
||||
# swhois = "..."; ← NU FACE AȘA!
|
||||
admin = yes;
|
||||
};
|
||||
|
||||
# ✅ CORECT (elimină linia):
|
||||
Operator {
|
||||
name = "Raducu";
|
||||
admin = yes;
|
||||
};
|
||||
|
||||
# ✅ SAU decomentează:
|
||||
Operator {
|
||||
name = "Raducu";
|
||||
swhois = "is a Staff Member";
|
||||
admin = yes;
|
||||
};
|
||||
```
|
||||
|
||||
### **2. Lipsește punct și virgulă:**
|
||||
```conf
|
||||
# ❌ GREȘIT:
|
||||
Operator {
|
||||
name = "Raducu" ← Lipsește ;
|
||||
password = "...";
|
||||
};
|
||||
|
||||
# ✅ CORECT:
|
||||
Operator {
|
||||
name = "Raducu"; ← Are ;
|
||||
password = "...";
|
||||
};
|
||||
```
|
||||
|
||||
### **3. Ghilimele incorecte:**
|
||||
```conf
|
||||
# ❌ GREȘIT:
|
||||
name = 'Raducu'; ← Folosește '
|
||||
|
||||
# ✅ CORECT:
|
||||
name = "Raducu"; ← Folosește "
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 📊 VERIFICARE FINALĂ
|
||||
|
||||
```bash
|
||||
# Verifică sintaxa:
|
||||
/home/ircd/ircd/bin/ircd -c -f /home/ircd/ircd/lib/ircd.conf
|
||||
|
||||
# Caută blocul Operator:
|
||||
grep -A 15 "Operator {" /home/ircd/ircd/lib/ircd.conf
|
||||
|
||||
# Ar trebui să vezi ceva ca:
|
||||
Operator {
|
||||
name = "Raducu";
|
||||
password = "$PLAIN$parola99";
|
||||
host = "*@*";
|
||||
class = "Opers";
|
||||
admin = yes;
|
||||
hide_oper = no;
|
||||
hide_channels = yes;
|
||||
whois_notice = yes;
|
||||
snomask = "+s +o +c +k +f +b +n";
|
||||
};
|
||||
|
||||
# Verifică că NU sunt linii comentate în interiorul blocului:
|
||||
grep -A 15 "Operator {" /home/ircd/ircd/lib/ircd.conf | grep "^#"
|
||||
|
||||
# Ar trebui să fie gol (fără output)!
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 🎯 REZUMAT
|
||||
|
||||
**PROBLEMA:**
|
||||
- Linii comentate (`# swhois`, `# snomask`) în blocul Operator
|
||||
- Parserul nu recunoaște blocul ca valid
|
||||
- Rezultat: "No Operator block for your host"
|
||||
|
||||
**SOLUȚIA:**
|
||||
- ✅ **Elimină** TOATE liniile comentate din blocul Operator
|
||||
- ✅ **Sau decomentează** (elimină `#`)
|
||||
- ✅ **NU lăsa** linii cu `#` în interiorul blocului!
|
||||
|
||||
**CONFIGURAȚIE CORECTĂ FINALĂ:**
|
||||
```conf
|
||||
Operator {
|
||||
name = "Raducu";
|
||||
password = "$PLAIN$parola99";
|
||||
host = "*@*";
|
||||
class = "Opers";
|
||||
admin = yes;
|
||||
swhois = "is an UnderChat Staff Member";
|
||||
hide_oper = no;
|
||||
hide_channels = yes;
|
||||
whois_notice = yes;
|
||||
snomask = "+s +o +c +k +f +b +n";
|
||||
};
|
||||
```
|
||||
|
||||
**FĂRĂ LINII COMENTATE!** ✅
|
||||
|
||||
---
|
||||
|
||||
**Fix aplicat**: Elimină liniile comentate din Operator block
|
||||
**Test**: `/OPER Raducu parola99` ar trebui să funcționeze! ✅
|
||||
**Data**: 15 Februarie 2026
|
||||
|
||||
23
install.sh
23
install.sh
|
|
@ -636,6 +636,7 @@ Class {
|
|||
pingfreq = 1 minutes 30 seconds;
|
||||
sendq = 160000;
|
||||
maxlinks = 20;
|
||||
snomask = "+s +o +c +k +f +b +n";
|
||||
local = no;
|
||||
freeform = yes;
|
||||
mode_lchan = yes;
|
||||
|
|
@ -710,29 +711,15 @@ EOFCONFIG_SSL_PORTS
|
|||
# ============================================================================
|
||||
|
||||
Operator {
|
||||
# Nickname-ul operatorului
|
||||
name = "EOFCONFIG_OPER_USER";
|
||||
|
||||
# Password-ul operatorului (hash MD5)
|
||||
# Generat automat cu umkpasswd -m md5
|
||||
# Format: $MD5$salt$hash
|
||||
# Pentru a regenera: $PREFIX/bin/umkpasswd -m md5 "parola_ta"
|
||||
password = "EOFCONFIG_OPER_PASS";
|
||||
|
||||
# Host-uri permise pentru operator (*)
|
||||
host = "*@*";
|
||||
|
||||
# Clasă
|
||||
class = "Opers";
|
||||
|
||||
# Permisiuni și notificări
|
||||
admin = yes;
|
||||
swhois = "The One That Was, The One That Is, The One That Will Be"; # Mesaj special în WHOIS pentru operatori
|
||||
hide_oper = no; # Afișează operatorul în listele de utilizatori (pentru a vedea notificările)
|
||||
hide_channels = yes; # Ascunde canalele la care este operatorul prezent
|
||||
whois_notice = yes; # Afișează notificare specială în WHOIS pentru operatori
|
||||
snomask = "+s +o +c +k +f +b +n"; # Server notices: conectări, opers, clienți, kills, flood, bots, nick changes
|
||||
# privileges = "PRIV_WHOIS_NOTICE", "PRIV_HIDE_OPER", "PRIV_ADMIN";
|
||||
swhois = "is an UnderChat Staff Member";
|
||||
hide_oper = no;
|
||||
hide_channels = yes;
|
||||
whois_notice = yes;
|
||||
};
|
||||
|
||||
# ============================================================================
|
||||
|
|
|
|||
Loading…
Reference in New Issue