10 KiB
🔧 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ă:
-
Serviciul (channels.underchat.org) trimite sintaxa VECHE:
:channels.underchat.org ACCOUNT ClientNumeric Raducu -
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)
-
IRCD refuză comanda → Protocol violation
-
Account nu se setează → Hidden host nu se aplică corect
-
HOST_HIDING_STYLE = 3 aplică:
- Style 1 pentru authenticated:
Raducu.users.underchat.org✅ - Style 2 pentru unauthenticated:
A5F8B9.CD8514.147F4A.B19664.IP❌ (hash)
- Style 1 pentru authenticated:
-
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:
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 <ClientNumeric> <AccountName> [timestamp]
Exemplu:
:channels.underchat.org ACCOUNT AJAAB Raducu 1708704000
Cod în m_account.c (liniile 300-332):
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 <ClientNumeric> <Subcommand> [params...]
Subcomenzile:
A <account> [timestamp] - Authenticate (login)
R <account> - Register (creare cont nou)
M <account> - Modify (redenumire cont)
U - Unregister (ștergere cont)
D - Deauthenticate (logout)
H <hostname> - 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 <ClientNumeric> <AccountName> [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:
- ✅ Compatibilitate - Funcționează cu X standard și Anope 1.x
- ✅ Stabilitate - Protocol testat și stabil de 15+ ani
- ✅ Simplu - Mai puține puncte de eroare
- ✅ 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:
nano $HOME/ircd/lib/ircd.conf
Caută și modifică:
# DE LA:
"EXTENDED_ACCOUNTS" = "TRUE";
# LA:
"EXTENDED_ACCOUNTS" = "FALSE";
2. Restart IRCd
# 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):
# Î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
# 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
# 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
# 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
# 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:
# 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:
tail -f $HOME/ircd/log/ircd.log | grep -i account
Cauză 2: HOST_HIDING_STYLE nu e setat corect.
Soluție: Verifică în config:
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:
- Verifică că
EXTENDED_ACCOUNTS = FALSE - Restart IRCD complet
- 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
- Identificat problema: EXTENDED_ACCOUNTS = TRUE incompatibil cu serviciul
- Analizat cod: m_account.c liniile 147-338
- Soluție găsită: Setează EXTENDED_ACCOUNTS = FALSE
- Actualizat install.sh: Default FALSE pentru instalări noi
- Creat documentație: FIX_EXTENDED_ACCOUNTS_PROBLEM.md
- Pași de testare: Definite și documentate
- 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! 🎉