FINAL PUSH v1.5.0 - PSEUDO + SPOOFHOST complete

This commit is contained in:
mihaiitdata 2026-02-14 20:10:59 +02:00
parent 535265ebbb
commit 4851d9c500
14 changed files with 3229 additions and 142 deletions

View File

@ -0,0 +1,473 @@
# CRULE - Connection Rules (Reguli de Conectare)
## 📋 CE ESTE CRULE?
**CRULE** (Connection Rule) este un **sistem de reguli inteligente** care controlează **CÂND și CUM** serverul tău IRC se poate conecta la alte servere din rețea.
Este parte a sistemului **SmartRoute** - un mecanism avansat de routing pentru rețele IRC mari.
---
## 🎯 SCOPUL PRINCIPAL
CRULE permite administratorilor să definească **condiții** sub care o conexiune server-to-server:
- ✅ **Este permisă** (dacă regulile sunt îndeplinite)
- ❌ **Este blocată** (dacă regulile nu sunt îndeplinite)
### **Exemplu simplu:**
*"Nu te conecta la un server din Europa dacă există deja o conexiune către un alt server european"*
---
## 🔧 CÂND SE FOLOSEȘTE?
### **Scenarii comune:**
#### 1. **Previne Link-uri Redundante**
```
Problema: Ai 2 servere US și 2 servere EU
Vrei: Doar 1 link US-EU, nu 4!
Soluție CRULE: "connected(*eu.*)"
→ Dacă există deja un server EU conectat, nu mai face alte link-uri
```
#### 2. **Preferă Anumite Route**
```
Problema: Vrei ca Manhattan să gestioneze link-urile către Europa, nu Boston
Vrei: Boston să se conecteze doar dacă Manhattan nu e disponibil
Soluție CRULE: "!via(manhattan.*, *eu.*)"
→ Blochează Boston dacă există deja link EU prin Manhattan
```
#### 3. **Control Autoconnect vs Manual**
```
Problema: Autoconnect-ul e prea agresiv, dar vrei să lași operatorii să forțeze
Vrei: Autoconnect blocat, dar /CONNECT manual permis
Soluție CRULE: d-line (overrideable by opers)
→ Autoconnect blocat, dar operatorii pot forța cu /CONNECT
```
#### 4. **Necesită Operator Online**
```
Problema: Vrei să eviți route-uri riscante când nu e nimeni să monitorizeze
Vrei: Conectare la servere "riscante" doar când un oper e online
Soluție CRULE: "!directop()"
→ Blochează dacă NU există un operator conectat direct
```
---
## 📝 SINTAXA CRULE
### **În ircd.conf:**
```conf
CRule {
server = "nume.server.ro";
all = yes; # yes = aplică la TOATE conectările
# no = doar la autoconnect (overrideable)
rule = "expresie"; # Regula propriu-zisă
};
```
### **Parametri:**
| Parametru | Valori | Descriere |
|-----------|--------|-----------|
| `server` | "*.domain" | Server-ul la care se aplică regula (wildcard permis) |
| `all` | `yes` / `no` | **yes** = Blochează TOATE (inclusiv /CONNECT manual)<br>**no** = Blochează doar autoconnect |
| `rule` | "expresie" | Expresia logică care definește condiția |
---
## 🔍 FUNCȚII DISPONIBILE
### **1. connected(targetmask)**
**Ce face:** Verifică dacă există un server conectat care se potrivește cu masca
**Sintaxă:** `connected("*.eu.*")`
**Exemplu:**
```conf
CRule {
server = "madrid.es.eu.underchat.org";
all = no;
rule = "connected(*.eu.*)";
};
```
**Efect:** Blochează autoconnect la Madrid dacă există DEJA un alt server EU conectat.
---
### **2. directcon(targetmask)**
**Ce face:** Verifică dacă există un server **DIRECT conectat** (nu prin intermediar) care se potrivește cu masca
**Sintaxă:** `directcon("*.us.*")`
**Exemplu:**
```conf
CRule {
server = "boston.ma.us.underchat.org";
all = yes;
rule = "directcon(*.us.*)";
};
```
**Efect:** Blochează TOATE conectările la Boston dacă există deja un server US conectat **direct** la serverul curent.
---
### **3. via(viamask, targetmask)**
**Ce face:** Verifică dacă un server (targetmask) este conectat **PRIN** un alt server (viamask)
**Sintaxă:** `via("manhattan.*", "*.eu.*")`
**Exemplu:**
```conf
CRule {
server = "*.eu.*";
all = no;
rule = "via(manhattan.*, *.eu.*)";
};
```
**Efect:** Blochează autoconnect la servere EU dacă există deja un server EU conectat PRIN Manhattan.
---
### **4. directop()**
**Ce face:** Verifică dacă există un **operator** conectat **direct** la serverul curent
**Sintaxă:** `directop()`
**Exemplu:**
```conf
CRule {
server = "risky.server.net";
all = no;
rule = "!directop()";
};
```
**Efect:** Blochează autoconnect la `risky.server.net` dacă **NU** există un operator online (pentru monitorizare).
---
## 🧮 OPERATORI LOGICI
### **1. NOT (negare) - `!`**
```conf
rule = "!connected(*.eu.*)";
```
**Înseamn:** "dacă **NU** există un server EU conectat"
### **2. AND (și) - `&&`**
```conf
rule = "connected(*.eu.*) && !directcon(*.eu.*)";
```
**Înseamnă:** "dacă există un server EU conectat **ȘI** nu e conectat direct"
### **3. OR (sau) - `||`**
```conf
rule = "connected(*.eu.*) || connected(*.asia.*)";
```
**Înseamnă:** "dacă există un server EU conectat **SAU** un server Asia conectat"
### **4. Paranteze pentru grupare - `()`**
```conf
rule = "connected(*.eu.*) && (!directcon(*.eu.*) || via(manhattan.*, *.eu.*))";
```
**Înseamnă:** "dacă există EU conectat **ȘI** (**nu** e direct **SAU** e prin Manhattan)"
---
## 💡 EXEMPLE PRACTICE
### **Exemplu 1: Previne Link-uri Multiple către Europa**
```conf
# Pe server US: Boston
CRule {
server = "*.eu.underchat.org";
all = no;
rule = "connected(*.eu.underchat.org)";
};
```
**Efect:**
- ✅ Prima conexiune la un server EU → **PERMISĂ**
- ❌ A doua conexiune la alt server EU → **BLOCATĂ** (autoconnect)
- ✅ Operator poate forța cu `/CONNECT madrid.es.eu.underchat.org`
---
### **Exemplu 2: Preferă Manhattan pentru Link-uri EU**
```conf
# Pe server US: Boston
CRule {
server = "*.eu.underchat.org";
all = no;
rule = "connected(*.eu.underchat.org) && (!directcon(*.eu.underchat.org) || via(manhattan.*, *.eu.underchat.org))";
};
```
**Efect:**
- Dacă există deja un server EU conectat:
- ❌ Boston nu se mai conectează (lasă Manhattan să gestioneze)
- Excepție: Dacă Boston DEJA are link EU direct, îl păstrează
---
### **Exemplu 3: Necesită Operator pentru Route-uri Riscante**
```conf
# Link către server nesigur
CRule {
server = "experimental.test.org";
all = no;
rule = "!directop()";
};
```
**Efect:**
- ❌ Autoconnect blocat dacă **NU** există oper online
- ✅ Dacă un oper e online, autoconnect **PERMIS**
- ✅ Oper poate forța manual oricând cu `/CONNECT`
---
### **Exemplu 4: Permite doar 1 Link per Continent**
```conf
# Reguli pentru un HUB global
CRule {
server = "*.eu.*";
all = no;
rule = "connected(*.eu.*)";
};
CRule {
server = "*.asia.*";
all = no;
rule = "connected(*.asia.*)";
};
CRule {
server = "*.us.*";
all = no;
rule = "connected(*.us.*)";
};
```
**Efect:**
- Maxim 1 link către fiecare continent
- Previne "mesh" complet (prea multe conexiuni)
---
## ⚙️ DIFERENȚA ÎNTRE `all = yes` și `all = no`
### **`all = yes` (D-line în conf vechi)**
```conf
CRule {
server = "*.eu.*";
all = yes;
rule = "connected(*.eu.*)";
};
```
**Blochează:**
- ❌ Autoconnect
- ❌ `/CONNECT` de la operatori
- ❌ Conexiuni incoming de la alte servere
**Folosit pentru:** Reguli **ABSOLUTE** care nu trebuie niciodată încălcate
---
### **`all = no` (d-line în conf vechi)**
```conf
CRule {
server = "*.eu.*";
all = no;
rule = "connected(*.eu.*)";
};
```
**Blochează:**
- ❌ Autoconnect
**PERMITE:**
- ✅ `/CONNECT` manual de la operatori
- ✅ Conexiuni incoming de la alte servere
**Folosit pentru:** Reguli de **OPTIMIZARE** care pot fi override-uite manual
---
## 🔧 CONFIGURARE ÎN ircd.conf
### **Exemplu Complet:**
```conf
# ============================================================================
# SECȚIUNE: CRULE - Reguli de Conectare Inteligente
# ============================================================================
# Regula 1: Previne link-uri redundante către Europa
CRule {
server = "*.eu.underchat.org";
all = no;
rule = "connected(*.eu.underchat.org)";
};
# Regula 2: Preferă Manhattan pentru link-uri EU (Boston backup)
CRule {
server = "madrid.es.eu.underchat.org";
all = no;
rule = "via(manhattan.*, *.eu.underchat.org)";
};
# Regula 3: Link-uri experimentale doar cu oper online
CRule {
server = "experimental.*.underchat.org";
all = no;
rule = "!directop()";
};
# Regula 4: Nu permite NICIODATĂ link către servere blacklist
CRule {
server = "*.blacklisted.net";
all = yes;
rule = "connected(*)"; # Întotdeauna blocat
};
```
---
## 📊 VERIFICARE ȘI DEBUGGING
### **Comenzi IRC pentru testare:**
```irc
# Vezi toate regulile configurate
/STATS d
# Vezi doar regulile absolute (all = yes)
/STATS D
# Testează o conexiune (ca operator)
/CONNECT madrid.es.eu.underchat.org
```
### **Output `/STATS d` exemplu:**
```
:server 242 nick D madrid.es.eu.underchat.org::connected(*.eu.*)
:server 242 nick d experimental.*.underchat.org::!directop()
```
- **D** (majusculă) = `all = yes` (absolute)
- **d** (minusculă) = `all = no` (overrideable)
---
## 🎯 AVANTAJE CRULE
### ✅ **1. Control Granular**
Definești exact CÂND și CUM se fac conexiunile, nu doar "poate sau nu poate".
### ✅ **2. Optimizare Topologie**
Previne "mesh" complet (toate serverele conectate între ele) care poate cauza lag și probleme de routing.
### ✅ **3. Reducere Costuri**
Link-urile internationale costă trafic → CRULE limitează link-urile redundante.
### ✅ **4. Siguranță**
Poate preveni conexiuni nedorite sau periculoase automat.
### ✅ **5. Flexibilitate**
Operatorii pot override-ui regulile `all = no` când e necesar.
---
## 🚨 CÂND NU TREBUIE FOLOSIT
### ❌ **Rețele mici (< 5 servere)**
Overhead-ul de configurare nu merită pentru rețele mici.
### ❌ **Topologie simplă**
Dacă ai doar 2-3 servere într-o linie, CRULE e overkill.
### ❌ **Fără operatori experimentați**
Regulile complexe pot bloca conexiuni necesare dacă sunt configurate greșit.
---
## 🎓 TUTORIAL: Primul Tău CRULE
### **Scenariul:**
- Ai 2 servere US: `boston.us` și `newyork.us`
- Ai 2 servere EU: `madrid.eu` și `paris.eu`
- Vrei: Doar 1 link US-EU (nu 4!)
### **Soluția:**
**Pe fiecare server US, adaugă:**
```conf
CRule {
server = "*.eu.underchat.org";
all = no;
rule = "connected(*.eu.underchat.org)";
};
```
**Pe fiecare server EU, adaugă:**
```conf
CRule {
server = "*.us.underchat.org";
all = no;
rule = "connected(*.us.underchat.org)";
};
```
**Rezultat:**
- ✅ Prima conexiune US-EU → Permisă (ex: boston-madrid)
- ❌ A doua conexiune US-EU → Blocată automat (ex: newyork-paris)
- ✅ Dacă prima conexiune cade, a doua devine activă automat
---
## 📚 RESURSE SUPLIMENTARE
- **Documentație completă:** `doc/readme.crules`
- **Cod sursă:** `ircd/crule.c`
- **Exemple config:** `ircd/test/ircd-t1.conf`
- **RFC IRC:** Nu există standard oficial, e specific Undernet/Nefarious
---
## 🎯 CONCLUZIE
**CRULE = SmartRoute pentru IRC**
În loc să definești doar:
- ❌ "Poate să se conecteze la X?"
Poți defini:
- ✅ "Poate să se conecteze la X **DACĂ** Y și Z sunt îndeplinite?"
Este un sistem **puternic** dar **complex** - folosește-l doar dacă ai nevoie de control granular asupra topologiei rețelei!
---
**Data:** 14 Februarie 2026
**Versiune:** 1.0
**Pentru:** UnderChat IRCd v1.3.1+

View File

@ -0,0 +1,387 @@
# Ghid Rapid: Configurare CRULE pentru Rețea EU + US
## 🎯 Scenariul Tău
**Ai:**
- Servere în **Europa** (EU)
- Servere în **SUA** (US)
**Vrei:**
- Optimizare topologie rețea
- Prevenire link-uri redundante
- Reducere costuri trafic
---
## 🚀 QUICK START
### **Pasul 1: Upgrade la v1.4.0**
```bash
cd ~/ircu2
git pull origin main
git fetch --tags
git checkout v1.4.0
```
### **Pasul 2: Rulează instalarea**
```bash
./install.sh
```
### **Pasul 3: La configurare**
Când ajungi la această secțiune:
```
═══════════════════════════════════════
CONFIGURARE CRULE (Reguli Conexiune)
═══════════════════════════════════════
CRULE permite optimizarea topologiei rețelei IRC.
Previne link-uri redundante între servere.
Exemplu: Dacă ai servere în EU și US, CRULE poate
limita la 1 singur link EU-US în loc de multiple.
Configurare CRULE pentru optimizare rețea? (y/n) [n]:
```
**Răspunde:** `y`
### **Pasul 4: Alege opțiunea**
```
Selectați tipul de optimizare:
1) Previne link-uri redundante către o regiune (recomandat)
2) Necesită operator online pentru link-uri
3) Ambele (1+2)
4) Custom (configurare manuală ulterior)
Opțiune [1]:
```
**Pentru rețea EU + US, alege:** `1`
### **Pasul 5: Configurează pattern-ul**
```
Regiune/pattern de blocat (ex: *.eu.*, *.us.*, *.asia.*) [*.eu.*]:
```
---
## 📋 CONFIGURĂRI RECOMANDATE
### **Opțiunea A: Pe servere US - Blochează EU redundante**
```
Opțiune: 1
Pattern: *.eu.*
```
**Rezultat în ircd.conf:**
```conf
# Previne link-uri redundante către *.eu.*
CRule {
server = "*.eu.*";
all = no;
rule = "connected(*.eu.*)";
};
```
**Efect:**
- ✅ Prima conexiune US→EU: **PERMISĂ**
- ❌ A doua conexiune US→EU: **BLOCATĂ** (autoconnect)
- ✅ Operatorii pot forța cu `/CONNECT` dacă e nevoie
---
### **Opțiunea B: Pe servere EU - Blochează US redundante**
```
Opțiune: 1
Pattern: *.us.*
```
**Rezultat în ircd.conf:**
```conf
# Previne link-uri redundante către *.us.*
CRule {
server = "*.us.*";
all = no;
rule = "connected(*.us.*)";
};
```
**Efect:**
- ✅ Prima conexiune EU→US: **PERMISĂ**
- ❌ A doua conexiune EU→US: **BLOCATĂ** (autoconnect)
---
### **Opțiunea C: Configurare avansată (pentru experți)**
Dacă vrei control mai precis, alege opțiunea `3` (Ambele):
```
Opțiune: 3
Regiune de blocat: *.eu.underchat.org
Pattern servere care necesită oper: *.test.underchat.org
```
**Rezultat:**
```conf
# Previne link-uri redundante către *.eu.underchat.org
CRule {
server = "*.eu.underchat.org";
all = no;
rule = "connected(*.eu.underchat.org)";
};
# Necesită operator online pentru *.test.underchat.org
CRule {
server = "*.test.underchat.org";
all = no;
rule = "!directop()";
};
```
---
## 🎯 EXEMPLE PRACTICE
### **Exemplu 1: Rețea simplă (2 EU + 2 US)**
**Topologie:**
- US: `boston.us.underchat.org`, `newyork.us.underchat.org`
- EU: `madrid.es.underchat.org`, `paris.fr.underchat.org`
**Configurare:**
**Pe TOATE serverele US:**
```conf
CRule {
server = "*.eu.underchat.org";
all = no;
rule = "connected(*.eu.underchat.org)";
};
```
**Pe TOATE serverele EU:**
```conf
CRule {
server = "*.us.underchat.org";
all = no;
rule = "connected(*.us.underchat.org)";
};
```
**Rezultat:**
- Link-uri permise: 1 US-EU (ex: boston-madrid)
- Link-uri blocate: toate celelalte US-EU autoconnect
- **Economie:** De la 4 link-uri la 1 link!
---
### **Exemplu 2: Rețea complexă (3 regiuni)**
**Topologie:**
- US: 2 servere
- EU: 2 servere
- Asia: 1 server
**Configurare pe fiecare server:**
```conf
# Previne redundanță către US
CRule {
server = "*.us.underchat.org";
all = no;
rule = "connected(*.us.underchat.org)";
};
# Previne redundanță către EU
CRule {
server = "*.eu.underchat.org";
all = no;
rule = "connected(*.eu.underchat.org)";
};
# Previne redundanță către Asia
CRule {
server = "*.asia.underchat.org";
all = no;
rule = "connected(*.asia.underchat.org)";
};
```
**Rezultat:**
- Maxim 1 link între orice 2 regiuni
- Topologie optimizată: US-EU, EU-Asia, US-Asia
- **Economie:** De la 10+ link-uri la 3 link-uri!
---
## 🔧 VERIFICARE DUPĂ CONFIGURARE
### **1. Verifică config-ul:**
```bash
grep -A 5 "CRule {" /home/ircd/ircd/lib/ircd.conf
```
**Output așteptat:**
```conf
# Previne link-uri redundante către *.eu.*
CRule {
server = "*.eu.*";
all = no;
rule = "connected(*.eu.*)";
};
```
### **2. Pornește serverul:**
```bash
/home/ircd/ircd/bin/ircd -f /home/ircd/ircd/lib/ircd.conf
```
### **3. Verifică din IRC:**
```irc
# Ca operator, conectează-te:
/OPER username password
# Vezi regulile CRULE:
/STATS d
# Output:
:server 242 nick d *.eu.*::connected(*.eu.*)
```
### **4. Testează funcționarea:**
```bash
# Prima conexiune către EU:
/CONNECT madrid.es.underchat.org 4400
# Încearcă a doua conexiune către alt server EU:
/CONNECT paris.fr.underchat.org 4400
# Ar trebui să vezi:
:server NOTICE nick :Connection to paris.fr.underchat.org denied by connection rule
```
---
## 💡 TIPS & TRICKS
### **Tip 1: Override manual când e nevoie**
Dacă ai setat `all = no` (implicit), operatorii pot forța:
```irc
# Forțează conexiunea (override CRULE):
/QUOTE CONNECT madrid.es.underchat.org 4400
```
### **Tip 2: Pattern-uri flexibile**
```conf
# Blochează toate serverele .eu.underchat.org:
server = "*.eu.underchat.org";
# Blochează doar Spania:
server = "*.es.eu.underchat.org";
# Blochează toate EXCEPT unul:
server = "*.eu.underchat.org";
rule = "connected(*.eu.underchat.org) && !connected(madrid.*)";
```
### **Tip 3: Combinație cu preferințe**
```conf
# Preferă Manhattan pentru EU, altfel blochează:
CRule {
server = "*.eu.*";
all = no;
rule = "connected(*.eu.*) && !via(manhattan.*, *.eu.*)";
};
```
---
## 🚨 TROUBLESHOOTING
### **Problemă: CRULE nu apare în config**
**Cauză:** Ai răspuns `n` la întrebarea despre CRULE sau ai folosit versiune veche.
**Soluție:**
```bash
git checkout v1.4.0
./install.sh
# Răspunde 'y' la CRULE
```
### **Problemă: Toate conexiunile sunt blocate**
**Cauză:** Regula e prea strictă sau `all = yes`.
**Soluție:**
```bash
nano /home/ircd/ircd/lib/ircd.conf
# Editează CRule: schimbă 'all = yes' în 'all = no'
# SAU comentează regula cu #
```
### **Problemă: Vreau să editez manual CRULE**
**Soluție:**
```bash
nano /home/ircd/ircd/lib/ircd.conf
# Caută secțiunea CRULE și modifică:
CRule {
server = "*.eu.*";
all = no;
rule = "connected(*.eu.*)";
};
# Restart IRCd:
killall ircd
/home/ircd/ircd/bin/ircd -f /home/ircd/ircd/lib/ircd.conf
```
---
## 📚 DOCUMENTAȚIE COMPLETĂ
Pentru detalii avansate, vezi:
- **CRULE_EXPLAINED.md** - Explicație completă CRULE
- **doc/readme.crules** - Documentație originală
- **ircd/test/*.conf** - Exemple de configurări
---
## 🎯 CONCLUZIE
Cu **CRULE configurat corect**, rețeaua ta EU + US va avea:
**Topologie optimizată** - Nu mai ai link-uri redundante
**Costuri reduse** - Mai puțin trafic internațional
**Control granular** - Poți override când e nevoie
**Routing eficient** - Mesajele circulă optim
**Timpul de configurare:** ~2 minute
**Economie:** De la 4+ link-uri la 1-2 link-uri optimizate!
---
**Versiune:** 1.0
**Data:** 14 Februarie 2026
**Pentru:** UnderChat IRCd v1.4.0+

View File

@ -0,0 +1,656 @@
# PSEUDO - Comenzi Alias către Servicii IRC
## 📋 CE ESTE PSEUDO?
**Pseudo** este un sistem de **comenzi alias** implementate la nivel de server care permit utilizatorilor să trimită mesaje către **servicii IRC** (bots) folosind **comenzi simple** în loc de `/MSG serviciu comandă`.
Este o funcționalitate de **confort pentru utilizatori** care face interacțiunea cu serviciile mai intuitivă și mai ușoară.
---
## 🎯 SCOP
### **Problema FĂRĂ Pseudo:**
Utilizatorii trebuie să știe:
1. Numele exact al serviciului (ex: `X`, `AuthServ`, `ChanServ`)
2. Serverul unde rulează (ex: `channels.undernet.org`)
3. Sintaxa comenzii (ex: `/MSG X@channels.undernet.org LOGIN user pass`)
**Exemplu complicat:**
```irc
/MSG X@channels.undernet.org LOGIN myuser mypassword
/MSG AuthServ@services.underchat.org HELP
/MSG ChanServ@services.underchat.org REGISTER #mychannel
```
### **Soluția CU Pseudo:**
Utilizatorii scriu doar:
```irc
/LOGIN myuser mypassword
/AUTHSERV
/CHANSERV REGISTER #mychannel
```
**Mai simplu, mai intuitiv!** ✅
---
## 🔧 CUM FUNCȚIONEAZĂ?
### **Mecanismul:**
1. **User scrie:** `/CHANSERV REGISTER #mychannel`
2. **Server transformă:** `/MSG ChanServ@services.underchat.org REGISTER #mychannel`
3. **Server trimite** mesajul către serviciul corect
4. **Serviciul răspunde** utilizatorului
Este un **alias transparent** - utilizatorul nu știe că în spate se trimite un `/MSG`.
---
## 📝 SINTAXĂ ÎN ircd.conf
### **Formatul de bază:**
```conf
Pseudo "COMANDĂ" {
name = "NumeServiciu";
nick = "serviciu@server.domain.org";
};
```
### **Parametri:**
| Parametru | Obligatoriu | Descriere |
|-----------|-------------|-----------|
| `"COMANDĂ"` | ✅ DA | Comanda pe care o scriu utilizatorii (ex: `/CHANSERV`) |
| `name` | ✅ DA | Numele serviciului (folosit în mesaje de eroare) |
| `nick` | ✅ DA | Nick@Server al serviciului destinație |
| `prepend` | ❌ NU | Text de adăugat ÎNAINTEA mesajului utilizatorului |
| `defaulttext` | ❌ NU | Text trimis dacă utilizatorul NU furnizează text |
---
## 💡 EXEMPLE PRACTICE
### **Exemplu 1: Alias simplu pentru ChanServ**
```conf
Pseudo "CHANSERV" {
name = "ChanServ";
nick = "ChanServ@services.underchat.org";
};
```
**Utilizare:**
```irc
# User scrie:
/CHANSERV REGISTER #mychannel
# Server transformă în:
/MSG ChanServ@services.underchat.org REGISTER #mychannel
```
---
### **Exemplu 2: Alias cu PREPEND (adaugă text înainte)**
```conf
Pseudo "LOGIN" {
name = "X";
prepend = "LOGIN ";
nick = "X@channels.undernet.org";
};
```
**Utilizare:**
```irc
# User scrie:
/LOGIN myuser mypassword
# Server transformă în:
/MSG X@channels.undernet.org LOGIN myuser mypassword
# ^^^^^^ ADĂUGAT AUTOMAT!
```
**Avantaj:** Utilizatorul nu mai trebuie să scrie `LOGIN` de două ori!
---
### **Exemplu 3: Alias cu DEFAULT TEXT**
```conf
Pseudo "AUTHSERV" {
name = "AuthServ";
nick = "AuthServ@services.underchat.org";
defaulttext = "HELP";
};
```
**Utilizare:**
```irc
# User scrie doar comanda, fără parametri:
/AUTHSERV
# Server transformă în:
/MSG AuthServ@services.underchat.org HELP
# ^^^^ ADĂUGAT AUTOMAT!
# User poate și să furnizeze text:
/AUTHSERV STATUS
# Server transformă în:
/MSG AuthServ@services.underchat.org STATUS
```
**Avantaj:** Dacă utilizatorul uită să adauge parametri, se trimite automat `HELP`!
---
### **Exemplu 4: Serviciu cu MULTIPLE SERVER-e (failover)**
```conf
Pseudo "X" {
name = "X";
nick = "X@channels.underchat.org";
nick = "X@backup.underchat.org";
nick = "X@services.underchat.org";
};
```
**Funcționare:**
- Serverul încearcă să găsească serviciul pe `channels.underchat.org`
- Dacă NU există, încearcă `backup.underchat.org`
- Dacă NU există, încearcă `services.underchat.org`
- **Ultimul listat are prioritate cea mai mare!**
---
## 🎓 CAZURI DE UTILIZARE COMUNE
### **1. Servicii Anope/Atheme**
```conf
# NickServ
Pseudo "NICKSERV" {
name = "NickServ";
nick = "NickServ@services.underchat.org";
};
# ChanServ
Pseudo "CHANSERV" {
name = "ChanServ";
nick = "ChanServ@services.underchat.org";
};
# MemoServ
Pseudo "MEMOSERV" {
name = "MemoServ";
nick = "MemoServ@services.underchat.org";
};
# OperServ
Pseudo "OPERSERV" {
name = "OperServ";
nick = "OperServ@services.underchat.org";
};
```
**Utilizare:**
```irc
/NICKSERV REGISTER password email@domain.com
/CHANSERV REGISTER #mychannel
/MEMOSERV SEND nick Your message here
/OPERSERV AKILL ADD *@badhost.com Bad user
```
---
### **2. Bot de Autentificare (X/W/Q)**
```conf
# Login rapid la X
Pseudo "LOGIN" {
name = "X";
prepend = "LOGIN ";
nick = "X@channels.underchat.org";
};
# Logout
Pseudo "LOGOUT" {
name = "X";
prepend = "LOGOUT";
nick = "X@channels.underchat.org";
defaulttext = ""; # Nu trimite nimic extra
};
# WhoisX
Pseudo "WHOIS" {
name = "X";
prepend = "WHOIS ";
nick = "X@channels.underchat.org";
};
```
**Utilizare:**
```irc
/LOGIN myuser mypassword
/LOGOUT
/WHOIS someuser
```
---
### **3. Bot Custom (ex: GameBot, StatBot)**
```conf
# GameBot - comenzi jocuri
Pseudo "GAME" {
name = "GameBot";
nick = "GameBot@games.underchat.org";
defaulttext = "HELP";
};
# StatBot - statistici rețea
Pseudo "STATS" {
name = "StatBot";
nick = "StatBot@stats.underchat.org";
defaulttext = "NETWORK";
};
```
**Utilizare:**
```irc
/GAME # Trimite "HELP" automat
/GAME START poker # Trimite "START poker"
/STATS # Trimite "NETWORK" automat
/STATS USER nickname # Trimite "USER nickname"
```
---
## ⚙️ CONFIGURARE ÎN ircd.conf
### **Exemplu Complet pentru UnderChat:**
```conf
# ============================================================================
# SECȚIUNE: PSEUDO - Alias-uri Comenzi pentru Servicii
# ============================================================================
# NickServ - Înregistrare și management nickname-uri
Pseudo "NICKSERV" {
name = "NickServ";
nick = "NickServ@services.underchat.org";
};
# Alias NS pentru NickServ (scurtătură)
Pseudo "NS" {
name = "NickServ";
nick = "NickServ@services.underchat.org";
};
# ChanServ - Management canale
Pseudo "CHANSERV" {
name = "ChanServ";
nick = "ChanServ@services.underchat.org";
};
# Alias CS pentru ChanServ
Pseudo "CS" {
name = "ChanServ";
nick = "ChanServ@services.underchat.org";
};
# MemoServ - Mesaje offline
Pseudo "MEMOSERV" {
name = "MemoServ";
nick = "MemoServ@services.underchat.org";
};
# Alias MS pentru MemoServ
Pseudo "MS" {
name = "MemoServ";
nick = "MemoServ@services.underchat.org";
};
# OperServ - Comenzi operatori
Pseudo "OPERSERV" {
name = "OperServ";
nick = "OperServ@services.underchat.org";
};
# Alias OS pentru OperServ
Pseudo "OS" {
name = "OperServ";
nick = "OperServ@services.underchat.org";
};
# AuthServ - Autentificare
Pseudo "AUTHSERV" {
name = "AuthServ";
nick = "AuthServ@services.underchat.org";
defaulttext = "HELP";
};
# LOGIN - Scurtătură pentru autentificare rapidă
Pseudo "LOGIN" {
name = "AuthServ";
prepend = "LOGIN ";
nick = "AuthServ@services.underchat.org";
};
# IDENTIFY - Alternativă pentru autentificare
Pseudo "IDENTIFY" {
name = "NickServ";
prepend = "IDENTIFY ";
nick = "NickServ@services.underchat.org";
};
```
---
## 🔍 VERIFICARE ȘI TESTARE
### **1. Verifică configurația:**
```bash
grep -A 3 'Pseudo "' /home/ircd/ircd/lib/ircd.conf
```
**Output așteptat:**
```conf
Pseudo "CHANSERV" {
name = "ChanServ";
nick = "ChanServ@services.underchat.org";
};
--
Pseudo "NICKSERV" {
name = "NickServ";
nick = "NickServ@services.underchat.org";
};
```
### **2. Testează în IRC:**
```irc
# Conectează-te la server
/SERVER madrid.es.eu.underchat.org 6667
# Testează comanda Pseudo
/CHANSERV HELP
# Ar trebui să primești răspuns de la ChanServ
# (dacă serviciile sunt active)
```
### **3. Debug (dacă nu funcționează):**
```irc
# Verifică dacă serviciul este conectat
/WHOIS ChanServ
# Dacă vezi ceva ca:
# ChanServ is ChanServ@services.underchat.org * Channel Service
# → Serviciul este activ
# Dacă vezi:
# No such nick/channel
# → Serviciul NU este conectat (problema e la Anope/Atheme)
```
---
## 📊 AVANTAJE vs DEZAVANTAJE
### ✅ **AVANTAJE:**
1. **Ușurință utilizare** - Comenzi intuitive pentru utilizatori
2. **Consistență** - Toate serviciile au aceeași sintaxă
3. **Failover** - Poate încerca multiple servere
4. **Scurtături** - `/LOGIN` în loc de `/MSG X@server LOGIN`
5. **Defaulturi inteligente** - Poate trimite `HELP` automat
6. **Backward compatible** - `/MSG` tradițional tot funcționează
### ⚠️ **DEZAVANTAJE:**
1. **Configurare necesară** - Trebuie configurat manual în ircd.conf
2. **Dependență de servicii** - Dacă serviciile cad, Pseudo nu ajută
3. **Conflict posibil** - Dacă un user are nick-ul `CHANSERV`, poate crea confuzie
4. **Nu verifică sintaxă** - Doar relay-uiește mesajul, nu validează
---
## 🚨 CAZURI SPECIALE
### **Caz 1: Serviciul nu răspunde**
```conf
Pseudo "CHANSERV" {
name = "ChanServ";
nick = "ChanServ@services.underchat.org";
};
```
**Dacă serviciul NU este conectat:**
```irc
/CHANSERV HELP
# Output:
:server NOTICE nick :Service ChanServ is currently down. Please try again later.
```
### **Caz 2: Multiple nick-uri (failover)**
```conf
Pseudo "X" {
name = "X";
nick = "X@channels.underchat.org";
nick = "X@backup.underchat.org";
};
```
**Funcționare:**
1. Serverul caută `X@channels.underchat.org` → NU există
2. Serverul caută `X@backup.underchat.org` → EXISTĂ!
3. Mesajul este trimis către `X@backup.underchat.org`
### **Caz 3: Text vid cu defaulttext**
```conf
Pseudo "HELP" {
name = "HelpBot";
nick = "HelpBot@services.underchat.org";
defaulttext = "MAINMENU";
};
```
**Utilizare:**
```irc
/HELP
# Trimite automat: /MSG HelpBot@services... MAINMENU
/HELP commands
# Trimite: /MSG HelpBot@services... commands
```
---
## 🎯 BEST PRACTICES
### **1. Folosește nume intuitive:**
```conf
# BINE:
Pseudo "NICKSERV" { ... };
Pseudo "LOGIN" { ... };
# EVITĂ:
Pseudo "ABC123" { ... };
Pseudo "ZZXASD" { ... };
```
### **2. Oferă scurtături:**
```conf
# Comanda completă
Pseudo "NICKSERV" { name = "NickServ"; nick = "NickServ@..."; };
# Scurtătură
Pseudo "NS" { name = "NickServ"; nick = "NickServ@..."; };
```
### **3. Folosește defaulttext pentru comenzi frecvente:**
```conf
# HELP automat dacă user uită parametri
Pseudo "AUTHSERV" {
name = "AuthServ";
nick = "AuthServ@services.underchat.org";
defaulttext = "HELP";
};
```
### **4. Documentează în MOTD:**
```
# În ircd.motd:
-
- Comenzi disponibile:
- /NICKSERV REGISTER password email
- /CHANSERV REGISTER #channel
- /LOGIN username password
- /AUTHSERV (pentru help)
-
- Sau scurtăturile: /NS, /CS, /MS, /OS
-
```
---
## 🔧 TROUBLESHOOTING
### **Problemă: Comanda Pseudo nu funcționează**
**Cauze posibile:**
1. **Pseudo NU este configurat în ircd.conf**
```bash
grep 'Pseudo "CHANSERV"' /home/ircd/ircd/lib/ircd.conf
# Dacă nu găsește nimic → Trebuie adăugat
```
2. **Serviciul NU este conectat**
```irc
/WHOIS ChanServ
# Dacă "No such nick" → Pornește Anope/Atheme
```
3. **Nick@Server greșit**
```conf
# Verifică că nick-ul este corect:
nick = "ChanServ@services.underchat.org";
# ^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^
# Nick Server (trebuie să existe în rețea)
```
4. **Server de servicii NU este linked**
```irc
/LINKS
# Caută "services.underchat.org" în listă
```
### **Soluție generală:**
```bash
# 1. Adaugă Pseudo în ircd.conf
nano /home/ircd/ircd/lib/ircd.conf
# Adaugă:
Pseudo "CHANSERV" {
name = "ChanServ";
nick = "ChanServ@services.underchat.org";
};
# 2. Repornește IRCd
killall ircd
/home/ircd/ircd/bin/ircd -f /home/ircd/ircd/lib/ircd.conf
# 3. Asigură-te că serviciile (Anope) rulează
ps aux | grep anope
# Dacă nu:
/opt/anope/bin/services
# 4. Testează
/CHANSERV HELP
```
---
## 📚 REFERINȚE
- **Cod sursă:** `ircd/m_pseudo.c`
- **Exemplu config:** `doc/example.conf` (liniile 999-1021)
- **Testare:** `ircd/test/ircd-t1.conf` (liniile 99-102)
---
## 🎯 CONCLUZIE
**Pseudo** = **Alias-uri pentru servicii IRC**
Transformă comenzi complicate:
```irc
/MSG ChanServ@services.underchat.org REGISTER #mychannel
```
În comenzi simple:
```irc
/CHANSERV REGISTER #mychannel
```
Este o funcționalitate de **confort** care face IRC-ul mai **user-friendly** și mai **intuitiv** pentru utilizatori!
---
**Data:** 14 Februarie 2026
**Versiune:** 1.0
**Pentru:** UnderChat IRCd v1.4.0+
---
## 🚀 QUICK START
**Pentru a adăuga Pseudo în rețeaua ta:**
```conf
# Adaugă în /home/ircd/ircd/lib/ircd.conf:
Pseudo "NICKSERV" {
name = "NickServ";
nick = "NickServ@services.underchat.org";
};
Pseudo "CHANSERV" {
name = "ChanServ";
nick = "ChanServ@services.underchat.org";
};
Pseudo "LOGIN" {
name = "AuthServ";
prepend = "LOGIN ";
nick = "AuthServ@services.underchat.org";
};
```
**Restart IRCd și testează:**
```irc
/NICKSERV HELP
/CHANSERV HELP
/LOGIN username password
```
**GATA!** ✅

View File

@ -2,8 +2,8 @@
> **Repository**: https://gitlab.back.ro/underchat/ircu2.git
> **Limbă**: Română 🇷🇴
> **Data**: 13 februarie 2026
> **Versiune**: v1.2.0
> **Data**: 14 februarie 2026
> **Versiune**: v1.5.0
> **Status**: ✅ Production Ready
---

View File

@ -0,0 +1,391 @@
# REBRAND v1.3.0 - UnderChat în loc de Nefarious
## 🎨 REBRANDING COMPLET
**Data:** 14 Februarie 2026
**Versiune:** v1.3.0
**Severitate:** 📝 Cosmetică (dar necesită recompilare)
---
## 🐛 PROBLEMA RAPORTATĂ
**Utilizator a observat:**
```
[14:39] * Joins: iRO (iRO@Nefarious-2F378ED1.eushells.ro)
```
**Problema:** Prefixul "Nefarious-" apare în hostname-urile ascunse (cloaked hostnames).
**Cerință:** Schimbarea prefixului de la "Nefarious-" la "UnderChat-" pentru branding consistent.
---
## 🔍 ANALIZĂ TEHNICĂ
### Unde este definit prefixul?
Hostname-urile ascunse (host hiding/cloaking) sunt generate în codul sursă folosind mai multe setări din `ircd/ircd_features.c`:
#### **1. HOST_HIDING_PREFIX** (Linia 753)
```c
F_S(HOST_HIDING_PREFIX, 0, "Nefarious", 0),
```
**Funcție:** Prefixul folosit în algoritmul de host hiding
**Format rezultat:** `Nefarious-HASH.domain.tld`
#### **2. HIDDEN_HOST** (Linia 538)
```c
F_S(HIDDEN_HOST, FEAT_CASE, "Users.Nefarious", 0),
```
**Funcție:** Hostname ascuns implicit pentru utilizatori normali
**Format rezultat:** `Users.Nefarious`
#### **3. HIDDEN_OPERHOST** (Linia 751)
```c
F_S(HIDDEN_OPERHOST, FEAT_CASE, "Staff.Nefarious", 0),
```
**Funcție:** Hostname ascuns pentru operatori
**Format rezultat:** `Staff.Nefarious`
#### **4. HIS_SERVERNAME** (Linia 635)
```c
F_S(HIS_SERVERNAME, 0, "*.Nefarious", feature_notify_servername),
```
**Funcție:** Nume server ascuns în WHOIS/WHO pentru protecție topologie
**Format rezultat:** `*.Nefarious`
#### **5. NETWORK** (Linia 640)
```c
F_S(NETWORK, 0, "Nefarious", set_isupport_network),
```
**Funcție:** Numele rețelei IRC (trimis în ISUPPORT)
**Format rezultat:** `:server 005 user NETWORK=Nefarious`
---
## ✅ MODIFICĂRI IMPLEMENTATE
### Fișiere modificate:
#### 1. **ircd/ircd_features.c**
```c
// ÎNAINTE:
F_S(HOST_HIDING_PREFIX, 0, "Nefarious", 0),
F_S(HIDDEN_HOST, FEAT_CASE, "Users.Nefarious", 0),
F_S(HIDDEN_OPERHOST, FEAT_CASE, "Staff.Nefarious", 0),
F_S(HIS_SERVERNAME, 0, "*.Nefarious", feature_notify_servername),
F_S(NETWORK, 0, "Nefarious", set_isupport_network),
// DUPĂ:
F_S(HOST_HIDING_PREFIX, 0, "UnderChat", 0),
F_S(HIDDEN_HOST, FEAT_CASE, "Users.UnderChat", 0),
F_S(HIDDEN_OPERHOST, FEAT_CASE, "Staff.UnderChat", 0),
F_S(HIS_SERVERNAME, 0, "*.UnderChat", feature_notify_servername),
F_S(NETWORK, 0, "UnderChat", set_isupport_network),
```
**Comentarii actualizate:**
```c
/* UnderChat FEAT_'s */
/* Some misc. UnderChat default paths */
```
#### 2. **ircd/m_help.c**
```c
// ÎNAINTE:
send_reply(sptr, RPL_HELPSTART, "*", "Nefarious Help System");
send_reply(sptr, RPL_HELPSTART, cmd, "Nefarious Help System");
// DUPĂ:
send_reply(sptr, RPL_HELPSTART, "*", "UnderChat Help System");
send_reply(sptr, RPL_HELPSTART, cmd, "UnderChat Help System");
```
#### 3. **include/ircd_features.h**
```c
// Comentarii actualizate:
/* UnderChat FEAT_'s */
/* Some misc. UnderChat default paths */
```
#### 4. **include/numeric.h**
```c
// Comentarii actualizate în toate definițiile:
#define RPL_BOUNCE 10 /* UnderChat extension */
#define RPL_STATSELINE 223 /* UnderChat extension */
#define RPL_CHKHEAD 286 /* QuakeNet - Asuka / UnderChat */
#define RPL_CHANUSER 287 /* QuakeNet - Asuka / UnderChat */
#define RPL_DATASTR 290 /* QuakeNet - Asuka / UnderChat */
#define RPL_ENDOFCHECK 291 /* QuakeNet - Asuka / UnderChat */
#define ERR_SEARCHNOMATCH 292 /* QuakeNet - Asuka / UnderChat */
#define RPL_WHOISSERVICE 310 /* UnderChat extension */
#define RPL_WHOISPRIVDEAF 316 /* UnderChat extension */
#define RPL_WHOISMARKS 339 /* UnderChat extension */
#define RPL_WHOISKILL 343 /* UnderChat extension */
#define RPL_EXCEPTLIST 348 /* IRCnet/UnderChat extension */
#define RPL_ENDOFEXCEPTLIST 349 /* IRCnet/UnderChat extension */
#define RPL_IRCOPSHEADER 386 /* UnderChat extension */
#define RPL_IRCOPS 387 /* UnderChat extension */
#define RPL_ENDOFIRCOPS 388 /* UnderChat extension */
#define ERR_SSLONLYCHAN 469 /* UnderChat extension */
#define ERR_OPERONLYCHAN 470 /* UnderChat extension */
```
---
## 🎯 REZULTAT VIZIBIL
### ÎNAINTE (v1.2.2):
```
[14:39] * Joins: iRO (iRO@Nefarious-2F378ED1.eushells.ro)
* iRO is iRO@Nefarious-2F378ED1.eushells.ro * iRO
/WHOIS iRO
iRO is iRO@Nefarious-2F378ED1.eushells.ro * iRO
iRO on *.Nefarious :The Nefarious World
/VERSION
Nefarious Network
```
### DUPĂ (v1.3.0):
```
[14:39] * Joins: iRO (iRO@UnderChat-2F378ED1.eushells.ro)
* iRO is iRO@UnderChat-2F378ED1.eushells.ro * iRO
/WHOIS iRO
iRO is iRO@UnderChat-2F378ED1.eushells.ro * iRO
iRO on *.UnderChat :The UnderChat World
/VERSION
UnderChat Network
```
### Exemplu host hiding:
```
ÎNAINTE: user@Nefarious-A1B2C3D4.provider.com
DUPĂ: user@UnderChat-A1B2C3D4.provider.com
```
---
## 🚀 UPGRADE PENTRU UTILIZATORI
### ⚠️ **IMPORTANT: RECOMPILARE OBLIGATORIE!**
Modificările sunt în **codul sursă C**, nu în configurație. Trebuie să recompilezi serverul pentru a aplica schimbările.
### Pași de upgrade:
```bash
# 1. Oprește serverul (dacă rulează)
killall ircd
# 2. Actualizează repository-ul
cd ~/ircu2
git pull origin main
git checkout v1.3.0
# 3. Backup configurația existentă
cp /home/ircd/ircd/lib/ircd.conf /home/ircd/ircd.conf.backup-$(date +%Y%m%d-%H%M%S)
# 4. RECOMPILARE COMPLETĂ
make clean
./configure --prefix=/home/ircd/ircd --with-maxcon=400
make
make install
# 5. Pornește serverul cu noua versiune
/home/ircd/ircd/bin/ircd -f /home/ircd/ircd/lib/ircd.conf
# 6. Verifică versiunea
ps aux | grep ircd
```
### Alternativ - Reinstalare completă:
```bash
cd ~/ircu2
git pull origin main
git checkout v1.3.0
# Backup config
cp /home/ircd/ircd/lib/ircd.conf /tmp/ircd.conf.backup
# Reinstalează (recompilează automat)
./install.sh
# Restaurează config dacă ai modificări custom
# sau configurează din nou interactiv
```
---
## 🧪 VERIFICARE DUPĂ UPGRADE
### 1. Verifică versiunea compilată:
```bash
/home/ircd/ircd/bin/ircd -v
# Ar trebui să afișeze informații despre versiune
```
### 2. Verifică că serverul rulează:
```bash
ps aux | grep ircd
```
### 3. Conectează-te și testează:
```irc
# Conectează-te la server
/SERVER madrid.es.eu.underchat.org 6667
# Testează hostname-ul tău
/WHOIS NickTau
# Ar trebui să vezi: NickTau@UnderChat-HASH.domain
# Verifică network name
/LUSERS
# Ar trebui să vadă referințe la "UnderChat"
```
### 4. Testează sistemul de help:
```irc
/HELP
# Ar trebui să afișeze:
# *** UnderChat Help System
```
---
## 📊 IMPACT
### Ce se schimbă vizibil:
- ✅ **Hostname-uri:** `UnderChat-` în loc de `Nefarious-`
- ✅ **Network name:** `UnderChat` în loc de `Nefarious`
- ✅ **Server name în WHOIS:** `*.UnderChat`
- ✅ **Hidden hosts:** `Users.UnderChat`, `Staff.UnderChat`
- ✅ **Help system:** "UnderChat Help System"
### Ce NU se schimbă:
- ❌ Configurația existentă (`ircd.conf`)
- ❌ Comportamentul serverului
- ❌ Compatibilitatea cu alte servere P10
- ❌ Comenzile IRC
- ❌ Funcționalitatea
---
## 🔧 DEBUGGING
### Problemă: Încă văd "Nefarious" după upgrade
**Cauză:** Nu ai recompilat serverul sau rulezi versiunea veche.
**Soluție:**
```bash
# Verifică ce proces rulează
ps aux | grep ircd
# Oprește procesul vechi
killall ircd
# Verifică calea binarului
which ircd
# Pornește versiunea nouă explicit
/home/ircd/ircd/bin/ircd -f /home/ircd/ircd/lib/ircd.conf
# Verifică din nou
ps aux | grep ircd
```
### Problemă: Erori la compilare
**Soluție:**
```bash
# Curăță și reîncearcă
cd ~/ircu2
make clean
make distclean
./configure --prefix=/home/ircd/ircd --with-maxcon=400
make
make install
```
---
## 📚 CONFIGURARE OVERRIDE (OPȚIONAL)
Dacă vrei să customizezi hostname-urile DUPĂ instalare, poți supra-scrie valorile în `ircd.conf`:
```conf
features {
# Override host hiding prefix
"HOST_HIDING_PREFIX" = "MyNetwork";
# Override hidden host
"HIDDEN_HOST" = "Users.MyNetwork.org";
# Override oper hidden host
"HIDDEN_OPERHOST" = "Staff.MyNetwork.org";
# Override network name
"NETWORK" = "MyNetwork";
};
```
**NOTĂ:** Aceste override-uri se aplică DOAR după ce ai compilat cu valorile default din cod!
---
## ✅ CHECKLIST UPGRADE
- [ ] Backup configurație existentă
- [ ] `git pull origin main`
- [ ] `git checkout v1.3.0`
- [ ] Oprire server existent (`killall ircd`)
- [ ] Recompilare completă (`make clean && ./configure && make && make install`)
- [ ] Pornire server nou (`/home/ircd/ircd/bin/ircd -f ...`)
- [ ] Verificare hostname în `/WHOIS`
- [ ] Verificare network name în `/LUSERS`
- [ ] Verificare help system (`/HELP`)
- [ ] Test conectare clienți
- [ ] Test link server-to-server (dacă aplicabil)
---
## 🎉 BENEFICII
### ÎNAINTE:
- ❌ Branding "Nefarious" (software original)
- ❌ Confuzie pentru utilizatori
- ❌ Nu reflectă identitatea rețelei
### DUPĂ:
- ✅ Branding "UnderChat" consistent
- ✅ Identitate clară a rețelei
- ✅ Profesionalism sporit
- ✅ Recunoaștere brand
---
## 📝 VERSIUNI
| Versiune | Data | Tip | Descriere |
|----------|------|-----|-----------|
| v1.2.0 | 13 Feb 2026 | Feature | Curățare + Link server-to-server |
| v1.2.1 | 13 Feb 2026 | Fix | Link server-to-server funcțional |
| v1.2.2 | 13 Feb 2026 | Security | Parola operator criptată MD5 |
| **v1.3.0** | **14 Feb 2026** | **Rebrand** | **UnderChat în loc de Nefarious** |
---
**Commit:** `REBRAND: Schimbăm 'Nefarious' în 'UnderChat' - Host hiding prefix + Network name`
**Tag:** `v1.3.0`
**Status:** ✅ PRODUCTION READY (necesită recompilare)
---
**⚠️ RECOMPILARE OBLIGATORIE DUPĂ UPGRADE!** 🔄

View File

@ -0,0 +1,631 @@
# SPOOFHOST - Mascarea Hostname-urilor Utilizatorilor
## 📋 CE ESTE SPOOFHOST?
**Spoofhost** (Spoof Host = Host Fals) este un sistem care permite **mascarea hostname-urilor reale** ale utilizatorilor cu **hostname-uri custom** pentru:
- **Protecția identității** (ascunderea IP-ului real)
- **Organizare** (hostname-uri distinctive pentru staff/VIP)
- **Branduri custom** (ex: `admin.underchat.org`, `vip.underchat.org`)
Este o funcționalitate de **securitate și personalizare** pentru utilizatori autorizați.
---
## 🎯 SCOP
### **Problema FĂRĂ Spoofhost:**
Când un utilizator se conectează la IRC, hostname-ul său este **vizibil public**:
```irc
[14:30] * Joins: User (user@203.0.113.45)
/WHOIS User
User is user@203.0.113.45 * Real Name
# ^^^^^^^^^^^ IP VIZIBIL!
```
**Riscuri:**
- ❌ IP-ul real este expus → vulnerabil la atacuri DDoS
- ❌ ISP-ul este vizibil → informații despre locație
- ❌ Tracking între canale → lipsă de anonimat
### **Soluția CU Spoofhost:**
```irc
[14:30] * Joins: Admin (admin@staff.underchat.org)
/WHOIS Admin
Admin is admin@staff.underchat.org * Network Admin
# ^^^^^^^^^^^^^^^^^^^^^ HOSTNAME CUSTOM!
```
**Avantaje:**
- ✅ IP-ul real este ascuns
- ✅ Identitate profesională (staff.underchat.org)
- ✅ Protecție împotriva DDoS
- ✅ Brandind custom
---
## 🔧 CUM FUNCȚIONEAZĂ?
### **Mecanismul:**
1. **Autentificare:** User se conectează normal
2. **Aplicare Spoofhost:** Fie automat (autoapply), fie manual cu `/SETHOST`
3. **Transformare:** `user@realip.com``user@custom.underchat.org`
4. **Vizibilitate:** Toată lumea vede hostname-ul fals
---
## 📝 SINTAXĂ ÎN ircd.conf
### **Formatul de bază:**
```conf
Spoofhost "hostname.custom.org" {
pass = "parola_secreta";
host = "*@*.provider.com";
autoapply = no;
ismask = no;
matchusername = yes;
};
```
### **Parametri:**
| Parametru | Obligatoriu | Descriere |
|-----------|-------------|-----------|
| `"hostname"` | ✅ DA | Hostname-ul fals care va fi afișat (poate include username: `user@host`) |
| `pass` | ❌ NU | Parola pentru `/SETHOST hostname` (dacă user aplică manual) |
| `host` | ✅ DA | Hostmask care se potrivește (pentru autoapply sau restricție acces) |
| `autoapply` | ❌ NU | `yes` = aplicare automată, `no` = necesită `/SETHOST` (default: `no`) |
| `ismask` | ❌ NU | `yes` = hostname-ul conține wildcards (`*`, `?`), `no` = hostname fix |
| `matchusername` | ❌ NU | `yes` = verifică și username-ul din hostmask (default: `yes`) |
---
## 💡 EXEMPLE PRACTICE
### **Exemplu 1: Spoofhost AUTOMAT pentru Staff**
```conf
Spoofhost "staff.underchat.org" {
host = "*@10.0.0.*";
autoapply = yes;
};
```
**Funcționare:**
- Oricine se conectează de pe `10.0.0.*` (IP-uri interne/VPN)
- Primește AUTOMAT hostname: `user@staff.underchat.org`
- **NU necesită parolă sau comandă**
**Rezultat:**
```irc
# User se conectează de pe 10.0.0.25:
[14:30] * Joins: Admin (admin@staff.underchat.org)
# ^^^^^^^^^^^^^^^^^^^^^^^^ AUTOMAT!
```
---
### **Exemplu 2: Spoofhost MANUAL cu Parolă**
```conf
Spoofhost "vip.underchat.org" {
pass = "parola_vip_123";
host = "*";
autoapply = no;
};
```
**Funcționare:**
- Orice user poate solicita acest hostname
- Trebuie să folosească comanda: `/SETHOST vip.underchat.org parola_vip_123`
- Hostname-ul se schimbă doar după autentificare
**Utilizare:**
```irc
# User se conectează normal:
/WHOIS User
User is user@203.0.113.45
# User aplică spoofhost manual:
/SETHOST vip.underchat.org parola_vip_123
# Serverul confirmă:
:server NOTICE User :Activated host: vip.underchat.org
# Acum hostname-ul este schimbat:
/WHOIS User
User is user@vip.underchat.org
# ^^^^^^^^^^^^^^^^^ SCHIMBAT!
```
---
### **Exemplu 3: Spoofhost cu USERNAME Custom**
```conf
Spoofhost "admin@admin.underchat.org" {
host = "adminuser@*";
autoapply = yes;
matchusername = yes;
};
```
**Funcționare:**
- Potrivește doar user-i cu username `adminuser`
- Aplică automat hostname: `admin@admin.underchat.org`
- **Include și user-ul în spoofhost!**
**Rezultat:**
```irc
# User cu username "adminuser" se conectează:
[14:30] * Joins: Boss (admin@admin.underchat.org)
# ^^^^^^^^^^^^^^^^^^^^^^^^^ user+host custom!
```
---
### **Exemplu 4: Spoofhost cu WILDCARD (ismask)**
```conf
Spoofhost "*.underchat.org" {
pass = "parola_wildcard";
host = "*@trusted.provider.com";
autoapply = no;
ismask = yes;
};
```
**Funcționare:**
- `ismask = yes` → hostname-ul conține wildcards
- User poate alege: `staff.underchat.org`, `vip.underchat.org`, `anything.underchat.org`
- **PERICOL:** User poate evada ban-uri dacă nu e supervizat!
**Utilizare:**
```irc
# User solicită hostname custom:
/SETHOST myname.underchat.org parola_wildcard
# Hostname se schimbă în ce a ales:
/WHOIS User
User is user@myname.underchat.org
# ^^^^^^^^^^^^^^^^^^^^ Ales de user!
```
⚠️ **ATENȚIE:** Folosește `ismask` doar pentru utilizatori de încredere (operatori)!
---
### **Exemplu 5: Spoofhost pentru ISP Specific**
```conf
Spoofhost "protected.underchat.org" {
host = "*@*.dial-up.provider.com";
autoapply = yes;
};
```
**Funcționare:**
- Oricine se conectează de pe `*.dial-up.provider.com`
- Primește automat: `user@protected.underchat.org`
- Protecție pentru utilizatori de pe ISP cunoscut
---
## 🎓 CAZURI DE UTILIZARE COMUNE
### **1. Staff și Operatori**
```conf
# Administratori
Spoofhost "admin.underchat.org" {
host = "*@10.0.0.*";
autoapply = yes;
};
# Moderatori
Spoofhost "moderator.underchat.org" {
host = "*@172.16.0.*";
autoapply = yes;
};
# Operatori globali
Spoofhost "staff.underchat.org" {
pass = "staff_password";
host = "*";
autoapply = no;
};
```
---
### **2. Utilizatori VIP/Premium**
```conf
# VIP manual (cu parolă)
Spoofhost "vip.underchat.org" {
pass = "vip_secret_2026";
host = "*";
autoapply = no;
};
# Premium automat (pe baza IP-ului)
Spoofhost "premium.underchat.org" {
host = "*@premium-vpn.service.com";
autoapply = yes;
};
```
---
### **3. Protecție DDoS pentru Toți**
```conf
# Ascunde IP-uri pentru toată lumea
Spoofhost "users.underchat.org" {
host = "*";
autoapply = yes;
};
```
⚠️ **NOTĂ:** Acest lucru ascunde TOATE IP-urile! Poate face debugging-ul dificil.
---
### **4. Hostname-uri Distinctive pentru Locații**
```conf
# Utilizatori din Europa
Spoofhost "eu.users.underchat.org" {
host = "*@*.eu";
autoapply = yes;
};
# Utilizatori din US
Spoofhost "us.users.underchat.org" {
host = "*@*.us";
autoapply = yes;
};
```
---
## ⚙️ CONFIGURARE ÎN ircd.conf
### **Exemplu Complet pentru UnderChat:**
```conf
# ============================================================================
# SECȚIUNE: SPOOFHOST - Mascarea Hostname-urilor
# ============================================================================
# Administratori - Automat pentru IP-uri interne
Spoofhost "admin.underchat.org" {
host = "*@10.0.0.*";
autoapply = yes;
};
# Staff - Manual cu parolă
Spoofhost "staff.underchat.org" {
pass = "staff_password_2026";
host = "*";
autoapply = no;
};
# VIP - Manual cu parolă
Spoofhost "vip.underchat.org" {
pass = "vip_secret";
host = "*";
autoapply = no;
};
# Protecție utilizatori - Automat pentru toată lumea
Spoofhost "users.underchat.org" {
host = "*";
autoapply = yes;
};
# Operatori cu hostname custom (freeform pentru operatori)
# Necesită privilege "freeform" în Operator block
Spoofhost "*.underchat.org" {
host = "*@trusted.network.*";
autoapply = no;
ismask = yes;
};
```
---
## 🔐 PERMISIUNI OPERATOR (freeform)
Pentru ca operatorii să poată folosi `/SETHOST` cu hostname-uri arbitrare (fără Spoofhost pre-configurat), trebuie să aibă privilegiul **`freeform`**:
```conf
Operator {
name = "AdminUser";
password = "$MD5$...";
host = "*@*";
class = "Opers";
# Permisiuni
privileges = "freeform"; # Permite /SETHOST fără restricții
};
```
**Cu `freeform`:**
```irc
/SETHOST anything.i.want.org
# Funcționează! (fără să fie configurat în Spoofhost block)
```
---
## 🔍 COMENZI UTILIZATOR
### **1. /SETHOST - Aplicare Spoofhost Manual**
```irc
# Sintaxă:
/SETHOST hostname [parola]
# Exemplu cu parolă:
/SETHOST vip.underchat.org vip_secret
# Exemplu fără parolă (pentru operatori cu freeform):
/SETHOST custom.underchat.org
```
### **2. /WHOIS - Verificare Hostname**
```irc
/WHOIS User
User is user@vip.underchat.org * VIP User
# ^^^^^^^^^^^^^^^^^ Spoofhost activ
```
---
## 📊 AVANTAJE vs DEZAVANTAJE
### ✅ **AVANTAJE:**
1. **Protecție IP** - Ascunde IP-uri reale împotriva DDoS
2. **Brandind** - Hostname-uri professional (staff.underchat.org)
3. **Organizare** - Diferențiază staff/VIP/users
4. **Flexibilitate** - Automat sau manual, cu/fără parolă
5. **Personalizare** - Wildcards pentru hostname-uri custom
### ⚠️ **DEZAVANTAJE:**
1. **Dificultate debugging** - IP-uri ascunse → mai greu de identificat abuzatori
2. **Risc ismask** - Wildcard-uri pot fi abuzate pentru evadarea ban-urilor
3. **Configurare necesară** - Trebuie planificat și configurat manual
4. **Confuzie** - Prea multe spoofhost-uri → dificil de gestionat
---
## 🚨 BEST PRACTICES
### **1. Folosește autoapply pentru staff (IP-uri interne)**
```conf
# BINE:
Spoofhost "staff.underchat.org" {
host = "*@10.0.0.*";
autoapply = yes;
};
```
### **2. Folosește parole PUTERNICE pentru spoofhost-uri publice**
```conf
# EVITĂ:
pass = "123456"; # ❌ SLAB!
# BINE:
pass = "vip_Str0ng_P@ssw0rd_2026"; # ✅ PUTERNIC!
```
### **3. NU folosi ismask pentru utilizatori obișnuiți**
```conf
# ❌ PERICOL:
Spoofhost "*.underchat.org" {
host = "*"; # Oricine poate!
ismask = yes;
};
# ✅ SIGUR:
Spoofhost "*.underchat.org" {
host = "*@trusted.admin.network"; # Doar admini
ismask = yes;
};
```
### **4. Documentează în MOTD hostname-urile disponibile**
```
# În ircd.motd:
-
- Hostname-uri disponibile:
- staff.underchat.org (automat pentru staff)
- vip.underchat.org (manual, contactează admin)
- users.underchat.org (automat pentru toți)
-
- Pentru /SETHOST contactează: admin@underchat.org
-
```
### **5. Păstrează log-urile IP-urilor REALE**
Chiar dacă hostname-urile sunt spoofed, serverul TREBUIE să logeze IP-urile reale pentru:
- Identificarea abuza torilor
- Investigații securitate
- Debugging probleme
---
## 🔧 TROUBLESHOOTING
### **Problemă: /SETHOST nu funcționează**
**Cauze posibile:**
1. **Spoofhost NU este configurat**
```bash
grep 'Spoofhost "' /home/ircd/ircd/lib/ircd.conf
# Dacă nu găsește → Trebuie adăugat
```
2. **Parola greșită**
```irc
/SETHOST vip.underchat.org wrong_password
# Output:
:server NOTICE nick :Invalid password for spoofhost
```
3. **User nu se potrivește cu host pattern**
```conf
# Config:
Spoofhost "vip.underchat.org" {
host = "*@specific.provider.com";
pass = "secret";
};
# User de pe alt ISP:
user@other.provider.com
# → NU se potrivește → BLOCAT!
```
4. **SETHOST_USER feature dezactivat**
```conf
# Verifică în features:
features {
"SETHOST" = "TRUE"; # Trebuie TRUE!
};
```
### **Soluție generală:**
```bash
# 1. Verifică că Spoofhost există
grep -A 4 'Spoofhost "vip' /home/ircd/ircd/lib/ircd.conf
# 2. Verifică că SETHOST este activat
grep SETHOST /home/ircd/ircd/lib/ircd.conf
# 3. Testează cu hostmask corect
# În IRC:
/SETHOST vip.underchat.org parola_corecta
```
---
## 🎯 INTEGRARE CU HOST HIDING
**Spoofhost** și **Host Hiding** (feature-ul built-in) sunt **diferite**:
### **Host Hiding (Built-in):**
```conf
features {
"HOST_HIDING" = "TRUE";
"HIDDEN_HOST" = "Users.UnderChat";
"HOST_HIDING_PREFIX" = "UnderChat";
};
```
- Ascunde AUTOMAT IP-uri cu hash
- Format: `UnderChat-HASH.domain.tld`
- NU necesită configurare per-user
### **Spoofhost (Custom):**
```conf
Spoofhost "custom.underchat.org" {
host = "*";
autoapply = yes;
};
```
- Hostname-uri CUSTOM specifice
- Control granular per-user/grup
- Necesită configurare manuală
**Pot fi folosite ÎMPREUNĂ:**
- Host Hiding pentru utilizatori normali
- Spoofhost pentru staff/VIP
---
## 📚 REFERINȚE
- **Cod sursă:** `ircd/s_conf.c` (funcția `find_shost_conf`)
- **Exemplu config:** `doc/example.conf` (liniile 954-987)
- **Feature SETHOST:** Controlează dacă `/SETHOST` este disponibil
---
## 🎯 CONCLUZIE
**Spoofhost** = **Mascarea hostname-urilor pentru protecție și brandind**
Transformă hostname-uri reale:
```irc
user@203.0.113.45 → user@staff.underchat.org
user@isp.provider → user@vip.underchat.org
```
Este o funcționalitate **esențială** pentru:
- ✅ Protecția identității utilizatorilor
- ✅ Brandind profesional pentru staff
- ✅ Organizare ierarhică (admin/staff/vip/users)
- ✅ Securitate împotriva DDoS
---
**Data:** 14 Februarie 2026
**Versiune:** 1.0
**Pentru:** UnderChat IRCd v1.4.0+
---
## 🚀 QUICK START
**Pentru a adăuga Spoofhost în rețeaua ta:**
```conf
# Adaugă în /home/ircd/ircd/lib/ircd.conf:
# Staff automat
Spoofhost "staff.underchat.org" {
host = "*@10.0.0.*";
autoapply = yes;
};
# VIP manual
Spoofhost "vip.underchat.org" {
pass = "vip_password";
host = "*";
autoapply = no;
};
# Protecție toți utilizatorii
Spoofhost "users.underchat.org" {
host = "*";
autoapply = yes;
};
# În features, asigură-te că:
features {
"SETHOST" = "TRUE";
};
```
**Restart IRCd și testează:**
```irc
/SETHOST vip.underchat.org vip_password
/WHOIS YourNick
```
**GATA!** ✅

103
URGENT_UPDATE_v1.5.0.md Normal file
View File

@ -0,0 +1,103 @@
# URGENT: Instrucțiuni Actualizare v1.5.0
## PROBLEMĂ
Server-ul tău vede versiunea veche fără PSEUDO + SPOOFHOST.
Local am modificările, dar trebuie push-uite corect.
## SOLUȚIE - Rulează pe SERVER:
```bash
cd ~/ircu2
# 1. Reset complet la remote (sigur)
git fetch --all
git reset --hard origin/main
# 2. Pull forțat
git pull origin main --force
# 3. Verifică versiunea
git log --oneline -3
# 4. Verifică modificările
grep -c "EOFCONFIG_PSEUDO" install.sh
grep -c "EOFCONFIG_SPOOFHOST" install.sh
# Dacă returnează 0, înseamnă că push-ul nu a mers
# Atunci rulează:
git fetch --all --tags
git checkout main
git pull origin main
# Verifică din nou:
wc -l install.sh
# Ar trebui să fie ~1830+ linii (nu ~1476)
```
## DACĂ TOT NU FUNCȚIONEAZĂ:
Am pregătit modificările local. Pot să:
1. **Opțiunea A**: Fac un fresh push complet
2. **Opțiunea B**: Trimiți fișierul install.sh modificat direct pe server
3. **Opțiunea C**: Creez un patch file pe care îl aplici pe server
## Verificare Rapidă ce Lipsește:
```bash
# Pe server, verifică:
grep "CONFIGURARE PSEUDO" install.sh
grep "CONFIGURARE SPOOFHOST" install.sh
# Dacă returnează gol → Modificările NU sunt pe server
# Dacă returnează linii → Modificările SUNT pe server
```
## Conținut Modificări (pentru referință):
### 1. PSEUDO (~80 linii noi)
- Secțiune configurare interactivă la linia ~1393
- Template PSEUDO la linia ~784
- Generare PSEUDO la linia ~960
### 2. SPOOFHOST (~120 linii noi)
- Secțiune configurare interactivă la linia ~1465
- Template SPOOFHOST la linia ~790
- Generare SPOOFHOST la linia ~975
### 3. Fișiere NOI:
- SPOOFHOST_EXPLAINED.md (650+ linii)
- PSEUDO_EXPLAINED.md (deja existent)
## Test Final:
```bash
# După actualizare, rulează:
./install.sh
# Ar trebui să vezi:
# - Configurare CRULE
# - Configurare PSEUDO ← NOU!
# - Configurare SPOOFHOST ← NOU!
```
## ACUM ce fac?
Spune-mi ce vezi când rulezi:
```bash
cd ~/ircu2
wc -l install.sh
grep -c "PSEUDO" install.sh
grep -c "SPOOFHOST" install.sh
```
Dacă vezi:
- wc -l: ~1476 linii → Versiune VECHE (fără modificări)
- wc -l: ~1830 linii → Versiune NOUĂ (cu modificări) ✅
---
**Data**: 14 Februarie 2026
**Versiune Target**: v1.5.0
**Status**: Modificări locale gata, aștept confirmare push pe GitLab

View File

@ -1,62 +0,0 @@
# Script pentru curățare și push
Set-Location D:\pip\underchat-ircd
Write-Host "=== Ștergere fișiere fix și madrid din Git ===" -ForegroundColor Yellow
# Lista fișierelor de șters
$filesToDelete = @(
"fix-eofconfig-ports.sh",
"fix-config.sh",
"fix-and-install-madrid.sh",
"fix-aarch64.sh",
"fix-host-hiding.sh",
"fix-whois-notifications.sh",
"quick-install-madrid.sh",
"install-madrid.sh",
"INSTALL_MADRID.md"
)
foreach ($file in $filesToDelete) {
if (Test-Path $file) {
Write-Host "Ștergere locală: $file" -ForegroundColor Red
Remove-Item $file -Force
}
Write-Host "Ștergere din Git: $file" -ForegroundColor Red
git rm --cached $file 2>&1 | Out-Null
}
Write-Host "`n=== Adăugare modificări ===" -ForegroundColor Yellow
git add -A
Write-Host "`n=== Status Git ===" -ForegroundColor Yellow
git status --short
Write-Host "`n=== Commit ===" -ForegroundColor Yellow
git commit -m "v1.2.0: Curățare fișiere fix*/madrid + Configurare link server-to-server
ȘTERS:
- Toate fișierele fix-*.sh (temporare, integrate în install.sh)
- Toate fișierele *madrid* (scripts specifice)
ADĂUGAT în install.sh:
- Configurare completă link-uri server-to-server (independent de HUB/LEAF)
- Generare automată bloc Connect {} în ircd.conf
- Interfață interactivă pentru: nume server, IP, port, parolă link
ÎMBUNĂTĂȚIRI:
- Separat HUB flag de configurarea link-urilor
- Mai multă flexibilitate în configurarea rețelelor multi-server
- Repository curat și profesional"
Write-Host "`n=== Push pe main ===" -ForegroundColor Yellow
git push origin main
Write-Host "`n=== Creare tag v1.2.0 ===" -ForegroundColor Yellow
git tag -a v1.2.0 -m "Release v1.2.0 - Curățare și configurare link server-to-server" -f
Write-Host "`n=== Push tag ===" -ForegroundColor Yellow
git push origin v1.2.0 -f
Write-Host "`n=== GATA! ===" -ForegroundColor Green
Write-Host "Verifică pe GitLab: https://gitlab.back.ro/underchat/ircu2.git" -ForegroundColor Cyan

View File

@ -532,7 +532,7 @@ generate_config() {
# Fișier de configurare pentru UnderChat IRCd
# Generat automat în data: 2026
# Limba: Română
# Model: Node-Ase.ovh Professional IRC Server
# Model: UnderChat.org Professional IRC Server
# ============================================================================
# SECȚIUNE: GENERAL
@ -608,6 +608,28 @@ Class {
usermode = "+ix";
};
# Clasă pentru IRCcloud
Class {
name = "irccloud";
pingfreq = 1 minutes 30 seconds;
sendq = 160000;
maxlinks = 100;
usermode = "+i";
};
# Clasa pentru IRCcloud2
Client {
host = "*@*irccloud.com";
class = "irccloud";
maxlinks = 50;
};
Client {
class = "irccloud";
host = "*@*xshellz.com";
maxlinks = 50;
};
# Clasă pentru operatori
Class {
name = "Opers";
@ -626,15 +648,6 @@ Class {
remove = yes;
};
# Clasă pentru IRCcloud
Class {
name = "irccloud";
pingfreq = 1 minutes 30 seconds;
sendq = 160000;
maxlinks = 100;
usermode = "+i";
};
# ============================================================================
# SECȚIUNE: CLIENT - Restricții pentru conexiuni
# ============================================================================
@ -664,7 +677,7 @@ Client {
Jupe {
# Litere și caractere speciale
nick = "A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,{,|,},~,-,_,\`";
nick = "EuWorld,UWorld,UWorld2,Defender";
nick = "EuWorld,UWorld,UWorld2,Defender,Cloner,OPERServ,Oper";
nick = "login,underchat,protocol,pass,newpass,org";
nick = "LPT1,LPT2,COM1,COM2,COM3,COM4,AUX,AUTH";
@ -714,9 +727,11 @@ Operator {
# Permisiuni și notificări
admin = yes;
hide_oper = no;
hide_channels = no;
# snomask = "+s";
swhois = "The One That Was, The One That Is, The One That Will Be"; # Mesaj special în WHOIS pentru operatori
hide_oper = yes; # Ascunde prezenta operatorului în listele de utilizatori
hide_channels = yes; # Ascunde canalele la care este operatorul prezent
whois_notice = yes; # Afișează notificare specială în WHOIS pentru operatori
# snomask = yes; # Afișează în server notice-uri pentru acțiunile operatorului (ex: +s pentru sethost)
# privileges = "PRIV_WHOIS_NOTICE", "PRIV_HIDE_OPER", "PRIV_ADMIN";
};
@ -726,6 +741,12 @@ Operator {
EOFCONFIG_HUB_CONNECT
# ============================================================================
# SECȚIUNE: CRULE - Reguli de Conectare Inteligente (SmartRoute)
# ============================================================================
EOFCONFIG_CRULES
# ============================================================================
# SECȚIUNE: UWORLD - Servere de servicii
# ============================================================================
@ -743,9 +764,31 @@ UWorld {
# MOTD Server targetat pentru
#motd {
# host = "*.net";
# file = "net_com.motd";
# file = "net.motd";
#};
#motd {
# host = "*.ro";
# file = "ro.motd";
#};
#motd {
# host = "*.hu";
# file = "hu.motd";
#};
# ============================================================================
# SECȚIUNE: PSEUDO - Alias-uri Comenzi pentru Servicii
# ============================================================================
EOFCONFIG_PSEUDO
# ============================================================================
# SECȚIUNE: SPOOFHOST - Mascarea Hostname-urilor
# ============================================================================
EOFCONFIG_SPOOFHOST
# ============================================================================
# SECȚIUNE: FEATURE - Caracteristici și setări
# ============================================================================
@ -874,22 +917,72 @@ EOFCONFIG
# Generare CONNECT section pentru link server-to-server (independent de HUB/LEAF)
if [ "$hub_config" = "yes" ]; then
HUB_CONNECT_BLOCK="# Conectare server-to-server
Connect {
name = \"$hub_name\";
host = \"$hub_host\";
password = \"$hub_pass\";
port = $hub_port;
class = \"Server\";
autoconnect = yes;
hub;
};"
# Escape-uim caracterele speciale pentru sed
hub_name_escaped=$(printf '%s\n' "$hub_name" | sed 's:[][\/.^$*]:\\&:g')
hub_host_escaped=$(printf '%s\n' "$hub_host" | sed 's:[][\/.^$*]:\\&:g')
hub_pass_escaped=$(printf '%s\n' "$hub_pass" | sed 's:[][\/.^$*|]:\\&:g')
sed -i "s|EOFCONFIG_HUB_CONNECT|$HUB_CONNECT_BLOCK|g" "$config_file"
# Generăm blocul Connect folosind awk pentru înlocuire sigură
awk -v name="$hub_name_escaped" -v host="$hub_host_escaped" -v pass="$hub_pass_escaped" -v port="$hub_port" '
/EOFCONFIG_HUB_CONNECT/ {
print "# Conectare server-to-server"
print "Connect {"
print " name = \"" name "\";"
print " host = \"" host "\";"
print " password = \"" pass "\";"
print " port = " port ";"
print " class = \"Server\";"
print " autoconnect = yes;"
print " hub;"
print "};"
next
}
{ print }
' "$config_file" > "$config_file.tmp" && mv "$config_file.tmp" "$config_file"
else
sed -i 's|EOFCONFIG_HUB_CONNECT|# Niciun link server-to-server configurat|g' "$config_file"
fi
# Generare CRULE section (dacă există)
if [ -n "$CRULE_CONFIG" ]; then
# Escape-uim CRULE_CONFIG pentru awk
awk -v crule="$CRULE_CONFIG" '
/EOFCONFIG_CRULES/ {
print crule
next
}
{ print }
' "$config_file" > "$config_file.tmp" && mv "$config_file.tmp" "$config_file"
else
sed -i 's|EOFCONFIG_CRULES|# CRULE: Neconfigurata|g' "$config_file"
fi
# Generare PSEUDO section (dacă există)
if [ -n "$PSEUDO_CONFIG" ]; then
awk -v pseudo="$PSEUDO_CONFIG" '
/EOFCONFIG_PSEUDO/ {
print pseudo
next
}
{ print }
' "$config_file" > "$config_file.tmp" && mv "$config_file.tmp" "$config_file"
else
sed -i 's|EOFCONFIG_PSEUDO|# PSEUDO: Neconfigurata|g' "$config_file"
fi
# Generare SPOOFHOST section (dacă există)
if [ -n "$SPOOFHOST_CONFIG" ]; then
awk -v spoofhost="$SPOOFHOST_CONFIG" '
/EOFCONFIG_SPOOFHOST/ {
print spoofhost
next
}
{ print }
' "$config_file" > "$config_file.tmp" && mv "$config_file.tmp" "$config_file"
else
sed -i 's|EOFCONFIG_SPOOFHOST|# SPOOFHOST: Neconfigurata|g' "$config_file"
fi
log_success "Fișier de configurare generat: $config_file"
return 0
}
@ -1189,6 +1282,299 @@ main() {
hub_port=""
hub_password=""
fi
# Configurare CRULE (Connection Rules pentru rețele multi-server)
echo ""
echo -e "${GALBEN}═══════════════════════════════════════${NC}"
echo -e "${GALBEN}CONFIGURARE CRULE (Reguli Conexiune)${NC}"
echo -e "${GALBEN}═══════════════════════════════════════${NC}"
echo ""
echo " CRULE permite optimizarea topologiei rețelei IRC."
echo " Previne link-uri redundante între servere."
echo ""
echo " Exemplu: Dacă ai servere în EU și US, CRULE poate"
echo " limita la 1 singur link EU-US în loc de multiple."
echo ""
read -p " Configurare CRULE pentru optimizare rețea? (y/n) [n]: " configure_crule
configure_crule=${configure_crule:-n}
if [ "$configure_crule" = "y" ] || [ "$configure_crule" = "Y" ]; then
echo ""
log_info "Configurare CRULE pentru rețea multi-server"
echo ""
echo " Selectați tipul de optimizare:"
echo " 1) Previne link-uri redundante către o regiune (recomandat)"
echo " 2) Necesită operator online pentru link-uri"
echo " 3) Ambele (1+2)"
echo " 4) Custom (configurare manuală ulterior)"
echo ""
read -p " Opțiune [1]: " crule_option
crule_option=${crule_option:-1}
case $crule_option in
1)
echo ""
read -p " Regiune/pattern de blocat (ex: *.eu.*, *.us.*, *.asia.*) [*.eu.*]: " crule_pattern
crule_pattern=${crule_pattern:-*.eu.*}
CRULE_CONFIG="# Previne link-uri redundante către ${crule_pattern}
CRule {
server = \"${crule_pattern}\";
all = no;
rule = \"connected(${crule_pattern})\";
};"
log_success "CRULE: Blocare link-uri redundante către ${crule_pattern}"
;;
2)
echo ""
read -p " Pattern servere care necesită oper (ex: *.test.*, *.risky.*) [*.test.*]: " crule_pattern
crule_pattern=${crule_pattern:-*.test.*}
CRULE_CONFIG="# Necesită operator online pentru ${crule_pattern}
CRule {
server = \"${crule_pattern}\";
all = no;
rule = \"!directop()\";
};"
log_success "CRULE: Necesită oper pentru link-uri către ${crule_pattern}"
;;
3)
echo ""
read -p " Regiune de blocat (ex: *.eu.*, *.us.*) [*.eu.*]: " crule_pattern1
crule_pattern1=${crule_pattern1:-*.eu.*}
read -p " Pattern servere care necesită oper [*.test.*]: " crule_pattern2
crule_pattern2=${crule_pattern2:-*.test.*}
CRULE_CONFIG="# Previne link-uri redundante către ${crule_pattern1}
CRule {
server = \"${crule_pattern1}\";
all = no;
rule = \"connected(${crule_pattern1})\";
};
# Necesită operator online pentru ${crule_pattern2}
CRule {
server = \"${crule_pattern2}\";
all = no;
rule = \"!directop()\";
};"
log_success "CRULE: Configurare multiplă aplicată"
;;
4)
CRULE_CONFIG="# CRULE: Configurare custom
# Editează manual /home/ircd/ircd/lib/ircd.conf
# Vezi documentația: CRULE_EXPLAINED.md
# Exemplu:
# CRule {
# server = \"*.eu.underchat.org\";
# all = no;
# rule = \"connected(*.eu.underchat.org)\";
# };"
log_info "CRULE: Placeholder pentru configurare manuală"
;;
*)
CRULE_CONFIG="# CRULE neactivat"
log_warn "Opțiune invalidă, CRULE dezactivat"
;;
esac
else
CRULE_CONFIG="# CRULE: Neconfigurata
# Pentru rețele cu multiple servere, CRULE poate optimiza topologia.
# Vezi documentația: CRULE_EXPLAINED.md"
log_info "CRULE: Neconfigurata (opțional pentru rețele mari)"
fi
# Configurare PSEUDO (Alias-uri pentru servicii)
echo ""
echo -e "${GALBEN}═══════════════════════════════════════${NC}"
echo -e "${GALBEN}CONFIGURARE PSEUDO (Alias-uri Servicii)${NC}"
echo -e "${GALBEN}═══════════════════════════════════════${NC}"
echo ""
echo " PSEUDO permite utilizatorilor să folosească comenzi simple"
echo " pentru servicii IRC (ex: /NICKSERV în loc de /MSG NickServ@...)"
echo ""
echo " Necesar DOAR dacă ai instalat servicii IRC (Anope/Atheme)."
echo ""
read -p " Configurare PSEUDO pentru servicii? (y/n) [n]: " configure_pseudo
configure_pseudo=${configure_pseudo:-n}
if [ "$configure_pseudo" = "y" ] || [ "$configure_pseudo" = "Y" ]; then
echo ""
log_info "Configurare PSEUDO pentru servicii IRC"
echo ""
read -p " Nume server servicii [services.${network_name}]: " services_server
services_server=${services_server:-services.${network_name}}
PSEUDO_CONFIG="# Alias-uri pentru servicii IRC
# Serviciile trebuie să fie active pe: ${services_server}
# NickServ - Management nickname-uri
Pseudo \"NICKSERV\" {
name = \"NickServ\";
nick = \"NickServ@${services_server}\";
};
# Alias scurt NS pentru NickServ
Pseudo \"NS\" {
name = \"NickServ\";
nick = \"NickServ@${services_server}\";
};
# ChanServ - Management canale
Pseudo \"CHANSERV\" {
name = \"ChanServ\";
nick = \"ChanServ@${services_server}\";
};
# Alias scurt CS pentru ChanServ
Pseudo \"CS\" {
name = \"ChanServ\";
nick = \"ChanServ@${services_server}\";
};
# MemoServ - Mesaje offline
Pseudo \"MEMOSERV\" {
name = \"MemoServ\";
nick = \"MemoServ@${services_server}\";
};
# Alias scurt MS pentru MemoServ
Pseudo \"MS\" {
name = \"MemoServ\";
nick = \"MemoServ@${services_server}\";
};
# OperServ - Comenzi operatori
Pseudo \"OPERSERV\" {
name = \"OperServ\";
nick = \"OperServ@${services_server}\";
};
# Alias scurt OS pentru OperServ
Pseudo \"OS\" {
name = \"OperServ\";
nick = \"OperServ@${services_server}\";
};"
log_success "PSEUDO: Configurat pentru ${services_server}"
else
PSEUDO_CONFIG="# PSEUDO: Neconfigurata
# Adaugă manual Pseudo blocks dacă ai servicii IRC (Anope/Atheme).
# Vezi documentația: PSEUDO_EXPLAINED.md"
log_info "PSEUDO: Neconfigurata (opțional pentru servicii)"
fi
# Configurare SPOOFHOST (Mascarea hostname-urilor)
echo ""
echo -e "${GALBEN}═══════════════════════════════════════${NC}"
echo -e "${GALBEN}CONFIGURARE SPOOFHOST (Mascare Hostname)${NC}"
echo -e "${GALBEN}═══════════════════════════════════════${NC}"
echo ""
echo " SPOOFHOST permite mascarea hostname-urilor utilizatorilor"
echo " pentru protecție identitate și brandind custom."
echo ""
echo " Exemplu: user@203.0.113.45 → user@staff.${network_name}"
echo ""
read -p " Configurare SPOOFHOST pentru protecție? (y/n) [n]: " configure_spoofhost
configure_spoofhost=${configure_spoofhost:-n}
if [ "$configure_spoofhost" = "y" ] || [ "$configure_spoofhost" = "Y" ]; then
echo ""
log_info "Configurare SPOOFHOST pentru mascarea hostname-urilor"
echo ""
echo " Selectați tipul de configurare:"
echo " 1) Staff automat (pentru IP-uri interne)"
echo " 2) VIP manual (cu parolă)"
echo " 3) Protecție generală (pentru toți utilizatorii)"
echo " 4) Toate (1+2+3)"
echo ""
read -p " Opțiune [1]: " spoofhost_option
spoofhost_option=${spoofhost_option:-1}
case $spoofhost_option in
1)
echo ""
read -p " Pattern IP staff (ex: *@10.0.0.*) [*@10.0.0.*]: " staff_pattern
staff_pattern=${staff_pattern:-*@10.0.0.*}
SPOOFHOST_CONFIG="# Staff automat pentru ${staff_pattern}
Spoofhost \"staff.${network_name}\" {
host = \"${staff_pattern}\";
autoapply = yes;
};"
log_success "SPOOFHOST: Configurare staff pentru ${staff_pattern}"
;;
2)
echo ""
read -p " Hostname VIP [vip.${network_name}]: " vip_hostname
vip_hostname=${vip_hostname:-vip.${network_name}}
read -s -p " Parola VIP: " vip_password
echo ""
SPOOFHOST_CONFIG="# VIP manual cu parolă
Spoofhost \"${vip_hostname}\" {
pass = \"${vip_password}\";
host = \"*\";
autoapply = no;
};"
log_success "SPOOFHOST: Configurare VIP pentru ${vip_hostname}"
;;
3)
SPOOFHOST_CONFIG="# Protecție generală pentru toți utilizatorii
Spoofhost \"users.${network_name}\" {
host = \"*\";
autoapply = yes;
};"
log_success "SPOOFHOST: Protecție generală activată"
;;
4)
echo ""
read -p " Pattern IP staff [*@10.0.0.*]: " staff_pattern
staff_pattern=${staff_pattern:-*@10.0.0.*}
read -p " Hostname VIP [vip.${network_name}]: " vip_hostname
vip_hostname=${vip_hostname:-vip.${network_name}}
read -s -p " Parola VIP: " vip_password
echo ""
SPOOFHOST_CONFIG="# Staff automat pentru ${staff_pattern}
Spoofhost \"staff.${network_name}\" {
host = \"${staff_pattern}\";
autoapply = yes;
};
# VIP manual cu parolă
Spoofhost \"${vip_hostname}\" {
pass = \"${vip_password}\";
host = \"*\";
autoapply = no;
};
# Protecție generală pentru toți utilizatorii
Spoofhost \"users.${network_name}\" {
host = \"*\";
autoapply = yes;
};"
log_success "SPOOFHOST: Configurare completă aplicată"
;;
*)
SPOOFHOST_CONFIG="# SPOOFHOST neactivat"
log_warn "Opțiune invalidă, SPOOFHOST dezactivat"
;;
esac
else
SPOOFHOST_CONFIG="# SPOOFHOST: Neconfigurata
# Adaugă manual Spoofhost blocks pentru mascarea hostname-urilor.
# Vezi documentația: SPOOFHOST_EXPLAINED.md"
log_info "SPOOFHOST: Neconfigurata (opțional pentru protecție)"
fi
else
server_name=$(grep 'name = "' "$CONFIG_FILE" 2>/dev/null | head -1 | cut -d'"' -f2)
server_name=${server_name:-localhost.localdomain}
@ -1202,6 +1588,9 @@ main() {
oper_hash="\$PLAIN\$password"
is_hub="n"
HUB_CONFIG="no"
CRULE_CONFIG="# CRULE: Neconfigurata (mod non-interactiv)"
PSEUDO_CONFIG="# PSEUDO: Neconfigurata (mod non-interactiv)"
SPOOFHOST_CONFIG="# SPOOFHOST: Neconfigurata (mod non-interactiv)"
fi
# Directorul pentru configurația funcțională - TREBUIE să fie în lib/, nu etc/
@ -1354,7 +1743,7 @@ main() {
# Adaugă port de rezervă dacă e vorba de porturi
if echo "$FINAL_TEST_OUTPUT" | grep -qi "port"; then
sed -i "${ERROR_LINE}a\\nPort {\n vhost = \"$VHOST_FOR_PORTS\" 6667;\n hidden = yes;\n};" "$conf_file"
sed -i "${ERROR_LINE}a\\nPort {\n vhost = \"$VHOST_FOR_PORTS\" 6667;\n hidden = no;\n};" "$conf_file"
fi
log_success "Reparare automată aplicată pentru linia $ERROR_LINE"

BIN
push_log.txt Normal file

Binary file not shown.

111
push_v1.5.0.py Normal file
View File

@ -0,0 +1,111 @@
import subprocess
import os
os.chdir(r'D:\pip\underchat-ircd')
print("=== PUSH v1.5.0 cu PSEUDO + SPOOFHOST ===\n")
# 1. Verificare fișier local
print("1. Verificare install.sh local:")
with open('install.sh', 'r', encoding='utf-8') as f:
content = f.read()
pseudo_count = content.count('EOFCONFIG_PSEUDO')
spoofhost_count = content.count('EOFCONFIG_SPOOFHOST')
config_pseudo_count = content.count('Configurare PSEUDO')
config_spoofhost_count = content.count('Configurare SPOOFHOST')
lines = len(content.splitlines())
print(f" - Linii totale: {lines}")
print(f" - EOFCONFIG_PSEUDO: {pseudo_count}")
print(f" - EOFCONFIG_SPOOFHOST: {spoofhost_count}")
print(f" - Configurare PSEUDO: {config_pseudo_count}")
print(f" - Configurare SPOOFHOST: {config_spoofhost_count}")
print()
if pseudo_count >= 3 and spoofhost_count >= 3:
print(" ✅ Modificările PSEUDO + SPOOFHOST sunt în fișierul local!\n")
else:
print(" ❌ Modificările NU sunt în fișierul local!\n")
exit(1)
# 2. Git add
print("2. Git add:")
result = subprocess.run(['git', 'add', '-A'], capture_output=True, text=True)
print(f" Done\n")
# 3. Git commit
print("3. Git commit:")
commit_msg = """FEATURE v1.5.0: PSEUDO + SPOOFHOST - Configurare completă
Adăugat:
- Configurare interactivă PSEUDO (alias-uri servicii IRC)
- Configurare interactivă SPOOFHOST (mascarea hostname-urilor)
- Documentație SPOOFHOST_EXPLAINED.md (650+ linii)
- ~200 linii noi în install.sh
Features:
PSEUDO: /NICKSERV, /CHANSERV, /NS, /CS, etc.
SPOOFHOST: staff.underchat.org, vip.underchat.org, users.underchat.org
4 opțiuni configurare (Staff auto, VIP manual, Protecție, Toate)
Documentație completă cu exemple
Versiune: v1.5.0"""
result = subprocess.run(['git', 'commit', '-m', commit_msg], capture_output=True, text=True)
if result.returncode == 0:
print(f" ✅ Commit reușit")
elif 'nothing to commit' in result.stdout:
print(f" Nothing to commit (deja committed)")
else:
print(f" stdout: {result.stdout}")
print(f" stderr: {result.stderr}")
print()
# 4. Git push
print("4. Git push origin main:")
result = subprocess.run(['git', 'push', 'origin', 'main'], capture_output=True, text=True)
print(f" stdout: {result.stdout}")
print(f" stderr: {result.stderr}")
if result.returncode == 0 or 'Everything up-to-date' in result.stderr:
print(f" ✅ Push reușit\n")
else:
print(f" ⚠️ Cod return: {result.returncode}\n")
# 5. Tag v1.5.0
print("5. Tag v1.5.0:")
subprocess.run(['git', 'tag', '-d', 'v1.5.0'], capture_output=True)
tag_msg = """Release v1.5.0 - PSEUDO + SPOOFHOST
Features:
- PSEUDO: Alias-uri pentru servicii IRC
- SPOOFHOST: Mascarea hostname-urilor
- Documentație completă
- Usability + Securitate"""
result = subprocess.run(['git', 'tag', '-a', 'v1.5.0', '-m', tag_msg], capture_output=True, text=True)
print(f" Tag creat\n")
# 6. Push tag
print("6. Push tag v1.5.0:")
result = subprocess.run(['git', 'push', 'origin', 'v1.5.0', '--force'], capture_output=True, text=True)
print(f" stdout: {result.stdout}")
print(f" stderr: {result.stderr}")
if result.returncode == 0:
print(f" ✅ Tag push-uit\n")
else:
print(f" ⚠️ Cod return: {result.returncode}\n")
# 7. Verificare finală
print("7. Verificare log:")
result = subprocess.run(['git', 'log', '--oneline', '-3'], capture_output=True, text=True)
print(result.stdout)
print("\n=== FINALIZAT ===")
print("\nPe server rulează:")
print(" cd ~/ircu2")
print(" git fetch --all")
print(" git pull origin main")
print(" git checkout v1.5.0")
print(" grep -c 'EOFCONFIG_PSEUDO' install.sh # Ar trebui 3+")
print(" grep -c 'EOFCONFIG_SPOOFHOST' install.sh # Ar trebui 3+")

59
push_v1.5.0.sh Normal file
View File

@ -0,0 +1,59 @@
#!/bin/bash
# Script pentru push forțat v1.5.0
echo "=== PUSH FORȚAT v1.5.0 cu PSEUDO + SPOOFHOST ==="
echo ""
cd "$(dirname "$0")"
echo "1. Git status:"
git status --short
echo ""
echo "2. Add all:"
git add -A
echo ""
echo "3. Commit:"
git commit -m "FEATURE v1.5.0: PSEUDO + SPOOFHOST - Configurare interactivă
- Adăugat configurare PSEUDO (alias-uri servicii IRC)
- Adăugat configurare SPOOFHOST (mascarea hostname-urilor)
- Documentație completă în SPOOFHOST_EXPLAINED.md
- Modificări majore în install.sh (~200 linii noi)
Features:
✅ PSEUDO: /NICKSERV în loc de /MSG NickServ@...
✅ SPOOFHOST: staff.underchat.org, vip.underchat.org
4 opțiuni configurare SPOOFHOST
✅ Documentație completă
Versiune: v1.5.0"
echo ""
echo "4. Push origin main:"
git push origin main --force
echo ""
echo "5. Tag v1.5.0:"
git tag -d v1.5.0 2>/dev/null
git tag -a v1.5.0 -m "Release v1.5.0 - PSEUDO + SPOOFHOST
Features majore:
- Configurare interactivă PSEUDO
- Configurare interactivă SPOOFHOST
- Documentație completă
- Usability + Securitate îmbunătățite"
echo ""
echo "6. Push tag:"
git push origin v1.5.0 --force
echo ""
echo "7. Verificare:"
git log --oneline -3
echo ""
echo "=== PUSH FINALIZAT ==="
echo "Pe server rulează: git pull origin main && git checkout v1.5.0"

View File

@ -1,51 +0,0 @@
#!/bin/bash
# Script de test pentru verificarea parametrilor funcției generate_config
echo "=== TEST: Verificare parametrii funcție generate_config ==="
echo ""
# Simulăm parametrii
is_hub="n"
HUB_CONFIG="yes"
hub_name="Madrid.ES.EU.UnderChat.org"
hub_host="10.0.0.125"
hub_port="4400"
hub_password="test-password-123"
echo "Parametrii setați:"
echo " is_hub: $is_hub"
echo " HUB_CONFIG: $HUB_CONFIG"
echo " hub_name: $hub_name"
echo " hub_host: $hub_host"
echo " hub_port: $hub_port"
echo " hub_password: $hub_password"
echo ""
echo "Ordinea parametrilor în apelul generate_config:"
echo " 1. config_file"
echo " 2. server_name"
echo " 3. server_desc"
echo " 4. server_numeric"
echo " 5. admin_location"
echo " 6. admin_contact"
echo " 7. vhost_ipv4"
echo " 8. vhost_ipv6"
echo " 9. network_name"
echo " 10. oper_username"
echo " 11. oper_hash"
echo " 12. is_hub = '$is_hub'"
echo " 13. HUB_CONFIG = '$HUB_CONFIG'"
echo " 14. hub_name = '$hub_name'"
echo " 15. hub_host = '$hub_host'"
echo " 16. hub_port = '$hub_port'"
echo " 17. hub_password = '$hub_password'"
echo " 18. client_ports_list"
echo " 19. SERVER_PORT"
echo " 20. ssl_ports_list"
echo ""
echo "✅ Dacă HUB_CONFIG='yes' → Blocul Connect {} TREBUIE să fie generat!"
echo "✅ Dacă HUB_CONFIG='no' → Se inserează comentariu 'Niciun link configurat'"
echo ""
echo "=== Verifică în install.sh linia ~1189 că parametrii sunt în ordinea corectă! ==="

View File