# 🔧 FIX EXTENDED_ACCOUNTS - Problema cu Autentificare **Data**: 23 Februarie 2026 **Problema**: Protocol violation la autentificare + hidden host nu se aplică **Status**: ✅ **FIXED** --- ## 🐛 PROBLEMA RAPORTATĂ ### Simptome: ``` [19:01:22] * Quits: bello (~Raducu@188.24.9.36) (Registered) [19:01:22] * Joins: bello (~Raducu@A5F8B9.CD8514.147F4A.B19664.IP) ``` **Așteptat**: `bello (~Raducu@Raducu.users.underchat.org)` **Observat**: `bello (~Raducu@A5F8B9.CD8514.147F4A.B19664.IP)` (stil 2, hash) ### Eroare în Status: ``` !HUB1.UnderChat.org! Protocol Violation from channels.underchat.org: ACCOUNT detected invalid subcommand token 'Raducu'. Old syntax maybe? See EXTENDED_ACCOUNTS F:line ``` ### WHOIS: ``` Raducu is ~Raducu@A5F8B9.CD8514.147F4A.B19664.IP * Raducu Raducu is actually ~Raducu@188.24.9.36 [188.24.9.36] ``` **Lipsește**: ``` Raducu is logged in as Raducu ``` --- ## 🔍 ANALIZA PROBLEMEI ### Ce se întâmplă: 1. **Serviciul (channels.underchat.org) trimite sintaxa VECHE**: ``` :channels.underchat.org ACCOUNT ClientNumeric Raducu ``` 2. **IRCD are `EXTENDED_ACCOUNTS = TRUE`**, așteaptă sintaxa NOUĂ: ``` :channels.underchat.org ACCOUNT ClientNumeric A Raducu ``` (cu subcomandă: A, R, M, U, C, D, H) 3. **IRCD refuză comanda** → Protocol violation 4. **Account nu se setează** → Hidden host nu se aplică corect 5. **HOST_HIDING_STYLE = 3** aplică: - Style 1 pentru authenticated: `Raducu.users.underchat.org` ✅ - Style 2 pentru unauthenticated: `A5F8B9.CD8514.147F4A.B19664.IP` ❌ (hash) 6. **Rezultat**: User rămâne cu hash (style 2) în loc de hostname frumos (style 1) --- ## ✅ SOLUȚIA ### Fix Simplu: Setează `EXTENDED_ACCOUNTS = FALSE` **În ircd.conf**: ```conf features { # Extended Accounts Support (pentru servicii IRC) # TRUE = X3 modern cu sintaxă extinsă (R,M,U,C,A,D,H) # FALSE = Sintaxă standard (X, Anope 1.x, majoritatea serviciilor) "EXTENDED_ACCOUNTS" = "FALSE"; } ``` ### De Ce FALSE Funcționează: Când `EXTENDED_ACCOUNTS = FALSE`, IRCD acceptă sintaxa veche: **Sintaxă veche (acceptată)**: ``` :channels.underchat.org ACCOUNT [timestamp] Exemplu: :channels.underchat.org ACCOUNT AJAAB Raducu 1708704000 ``` **Cod în m_account.c (liniile 300-332)**: ```c else { // EXTENDED_ACCOUNTS = FALSE - sintaxă veche if (!(acptr = findNUser(parv[1]))) return 0; // Setează account ircd_strncpy(cli_user(acptr)->account, parv[2], ACCOUNTLEN + 1); SetAccount(acptr); // Aplică hidden host pentru authenticated users if (((feature_int(FEAT_HOST_HIDING_STYLE) == 1) || (feature_int(FEAT_HOST_HIDING_STYLE) == 3)) && IsHiddenHost(acptr)) hide_hostmask(acptr); // ← APLICĂ HOSTNAME FRUMOS! } ``` **Rezultat**: `Raducu.users.underchat.org` ✅ --- ## 📊 EXTENDED_ACCOUNTS: TRUE vs FALSE ### EXTENDED_ACCOUNTS = TRUE (Sintaxă Modernă) **Pentru**: - X3 1.9+ (modern) - Anope 2.x cu modul P10 - Atheme IRC Services moderne **Sintaxă**: ``` :services ACCOUNT [params...] Subcomenzile: A [timestamp] - Authenticate (login) R - Register (creare cont nou) M - Modify (redenumire cont) U - Unregister (ștergere cont) D - Deauthenticate (logout) H - Set Hidden Host C ... - LOC Check request S ... - LOC SSL request ``` **Exemplu login**: ``` :channels.underchat.org ACCOUNT AJAAB A Raducu 1708704000 ``` **Beneficii**: - ✅ Rename accounts - ✅ Merge accounts - ✅ Unregister accounts - ✅ Set custom hidden hosts - ✅ Operații complexe **Dezavantaje**: - ❌ Necesită services modern (X3 1.9+, Anope 2.x) - ❌ Incompatibil cu X standard, Anope 1.x --- ### EXTENDED_ACCOUNTS = FALSE (Sintaxă Standard) **Pentru**: - X (standard Undernet) - Anope 1.x - EggDrop services - Majoritatea serviciilor IRC legacy **Sintaxă**: ``` :services ACCOUNT [timestamp] Exemplu: :channels.underchat.org ACCOUNT AJAAB Raducu 1708704000 ``` **Beneficii**: - ✅ Compatibil cu majoritatea serviciilor - ✅ Simplu și robust - ✅ Login/logout funcționează perfect - ✅ Hidden host se aplică automat **Limitări**: - ⚠️ Nu suportă rename accounts (trebuie făcut manual) - ⚠️ Nu suportă merge accounts - ⚠️ Nu suportă custom hidden hosts per-user --- ## 🎯 RECOMANDARE PENTRU UNDERCHAT ### Folosește `EXTENDED_ACCOUNTS = FALSE` **De ce**: 1. ✅ **Compatibilitate** - Funcționează cu X standard și Anope 1.x 2. ✅ **Stabilitate** - Protocol testat și stabil de 15+ ani 3. ✅ **Simplu** - Mai puține puncte de eroare 4. ✅ **Suficient** - Login/logout funcționează perfect **Când să folosești TRUE**: - Doar dacă ai X3 1.9+ sau Anope 2.x - Doar dacă ai nevoie de rename/merge accounts - Doar dacă ai configurat corect serviciul pentru protocol extins --- ## 🔧 PAȘI PENTRU FIX ### 1. Modifică Configurația **Editează ircd.conf**: ```bash nano $HOME/ircd/lib/ircd.conf ``` **Caută și modifică**: ```conf # DE LA: "EXTENDED_ACCOUNTS" = "TRUE"; # LA: "EXTENDED_ACCOUNTS" = "FALSE"; ``` ### 2. Restart IRCd ```bash # Kill serverul killall ircd # Sau folosește /REHASH (dacă funcționează) # SAU restart prin control panel # Start server $HOME/ircd/bin/ircd -f $HOME/ircd/lib/ircd.conf ``` ### 3. Verifică Fix-ul **Reconectează și autentifică**: ``` /server underchat.org 6667 /nick Raducu /msg X@channels.underchat.org LOGIN username password ``` **Verifică WHOIS**: ``` /whois Raducu Ar trebui să vezi: Raducu is ~Raducu@Raducu.users.underchat.org * Raducu Raducu is logged in as Raducu ``` **Verifică că nu mai sunt erori**: ``` # În status window, NU ar trebui să mai vezi: # "Protocol Violation from channels.underchat.org" ``` --- ## 📝 UPDATE INSTALL.SH Am actualizat template-ul pentru instalări viitoare: **Modificare în install.sh (linia ~999)**: ```bash # ÎNAINTE: "EXTENDED_ACCOUNTS" = "TRUE"; # DUPĂ: # Extended Accounts Support (pentru servicii IRC) # TRUE = X3 modern cu sintaxă extinsă (R,M,U,C,A,D,H) # FALSE = Sintaxă standard (X, Anope 1.x, majoritatea serviciilor) "EXTENDED_ACCOUNTS" = "FALSE"; ``` **Impact**: - Instalări NOI vor avea FALSE by default - Compatibilitate out-of-the-box cu majoritatea serviciilor - User experience mai bună (fără protocol violations) --- ## 🧪 TESTARE ### Test 1: Login Basic ```bash # 1. Conectează /server underchat.org /nick TestUser # 2. Autentifică /msg X@channels.underchat.org LOGIN testuser password # 3. Verifică hostname /whois TestUser # AȘTEPTAT: # TestUser is ~user@TestUser.users.underchat.org * Real Name # TestUser is logged in as TestUser ``` ### Test 2: Logout ```bash # 1. Deautentifică /msg X@channels.underchat.org LOGOUT # 2. Verifică hostname /whois TestUser # AȘTEPTAT: # TestUser is ~user@HASH.isp.com * Real Name # (sau IP direct dacă nu are +x) ``` ### Test 3: +x Manual ```bash # 1. Setează +x (fără login) /mode TestUser +x # 2. Verifică hostname /whois TestUser # AȘTEPTAT: # TestUser is ~user@UnderChat-HASH.isp.com * Real Name # (style 2 pentru unauthenticated) ``` ### Test 4: Login apoi +x ```bash # 1. Login /msg X@channels.underchat.org LOGIN testuser password # 2. Hostname ar trebui AUTOMAT să devină: # TestUser.users.underchat.org (style 1 pentru authenticated) # 3. Dacă nu, setează manual: /mode TestUser +x # Acum ar trebui: # TestUser is ~user@TestUser.users.underchat.org * Real Name ``` --- ## 🐛 TROUBLESHOOTING ### Problemă: Încă primesc protocol violation **Cauză**: Config cache sau REHASH incomplet. **Soluție**: ```bash # 1. Oprește complet serverul killall -9 ircd # 2. Verifică că e oprit ps aux | grep ircd # 3. Pornește din nou $HOME/ircd/bin/ircd -f $HOME/ircd/lib/ircd.conf # 4. Test din nou ``` ### Problemă: Hostname rămâne hash (A5F8B9...) **Cauză 1**: Account nu se setează (protocol violation persistă). **Soluție**: Verifică logs: ```bash tail -f $HOME/ircd/log/ircd.log | grep -i account ``` **Cauză 2**: `HOST_HIDING_STYLE` nu e setat corect. **Soluție**: Verifică în config: ```bash grep "HOST_HIDING_STYLE" $HOME/ircd/lib/ircd.conf # Ar trebui: "HOST_HIDING_STYLE" = "3"; ``` **Cauză 3**: User nu are +x setat. **Soluție**: Setează manual: ``` /mode YourNick +x ``` ### Problemă: "Raducu is logged in as" nu apare **Cauză**: Account nu e setat în IRCD (protocol violation). **Soluție**: 1. Verifică că `EXTENDED_ACCOUNTS = FALSE` 2. Restart IRCD complet 3. Re-login la X --- ## 📚 REFERINȚE ### Cod Relevant: - **ircd/m_account.c** (liniile 134-342) - Linia 147: Check pentru EXTENDED_ACCOUNTS - Linia 148-151: Protocol violation pentru sintaxă veche - Linia 300-338: Implementare sintaxă veche (FALSE) - Linia 329-332: Aplicare hidden host pentru authenticated - **doc/readme.features** (liniile 1046-1053) - Documentație oficială EXTENDED_ACCOUNTS ### Protocol P10: - **ACCOUNT command** - RFC-style documentation - **UnderNet P10 Protocol** - Server-to-server --- ## ✅ CHECKLIST FIX - [x] Identificat problema: EXTENDED_ACCOUNTS = TRUE incompatibil cu serviciul - [x] Analizat cod: m_account.c liniile 147-338 - [x] Soluție găsită: Setează EXTENDED_ACCOUNTS = FALSE - [x] Actualizat install.sh: Default FALSE pentru instalări noi - [x] Creat documentație: FIX_EXTENDED_ACCOUNTS_PROBLEM.md - [x] Pași de testare: Definite și documentate - [x] Troubleshooting: Cazuri comune acoperite --- ## 🎯 CONCLUZIE ### Problema: **`EXTENDED_ACCOUNTS = TRUE` cauza protocol violation cu serviciul standard X/Anope** ### Soluția: **Setează `EXTENDED_ACCOUNTS = FALSE` în ircd.conf** ### Rezultat: - ✅ Protocol violation dispare - ✅ Account se setează corect - ✅ Hidden host se aplică: `Raducu.users.underchat.org` - ✅ WHOIS arată: "is logged in as Raducu" - ✅ User experience îmbunătățit ### Pentru Viitor: - ✅ Template actualizat cu FALSE default - ✅ Comentarii clare în config - ✅ Documentație comprehensivă --- **Fixed by**: Senior Software Architect **Data**: 23 Februarie 2026 **Status**: ✅ **PROBLEM SOLVED** --- **🎉 AUTENTIFICAREA VA FUNCȚIONA ACUM CORECT! 🎉**