diff --git a/FIX_OPERATOR_BLOCK.md b/FIX_OPERATOR_BLOCK.md new file mode 100644 index 0000000..b0b0a1c --- /dev/null +++ b/FIX_OPERATOR_BLOCK.md @@ -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`: +``` +# 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 + diff --git a/install.sh b/install.sh index 2009b1e..78fc4e8 100755 --- a/install.sh +++ b/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; }; # ============================================================================