From f1082512467ba1c4356f241d25b9f57f66377093 Mon Sep 17 00:00:00 2001 From: Patrick Date: Wed, 29 Apr 2026 00:12:41 +0200 Subject: [PATCH 1/6] Notify services if a masked server linked --- ircd/s_serv.c | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/ircd/s_serv.c b/ircd/s_serv.c index 6de4ab23..a23aa5d3 100644 --- a/ircd/s_serv.c +++ b/ircd/s_serv.c @@ -546,7 +546,15 @@ int m_smask(aClient *cptr, aClient *sptr, int parc, char *parv[]) add_to_sid_hash_table(parv[1], acptr); add_server_to_tree(acptr); - +#ifdef USE_SERVICES + check_services_butone(SERVICE_WANT_SERVER, acptr->serv, acptr, + ":%s SERVER %s %d %s :%s", + acptr->serv->up->name, + acptr->name, + acptr->hopcount + 1, + acptr->serv->sid, + acptr->info); +#endif /* And introduce the server to others. */ introduce_server(cptr, acptr); From 7c911b0b1a3f272877b1f6ba5baed11cb2681eb3 Mon Sep 17 00:00:00 2001 From: Patrick Date: Wed, 29 Apr 2026 00:13:02 +0200 Subject: [PATCH 2/6] Updated service SQUIT message to contain SIDs instead of names --- ircd/s_misc.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/ircd/s_misc.c b/ircd/s_misc.c index 4ce256a9..2b8dee04 100644 --- a/ircd/s_misc.c +++ b/ircd/s_misc.c @@ -756,8 +756,10 @@ static void exit_one_client(aClient *cptr, aClient *sptr, aClient *from, } #ifdef USE_SERVICES check_services_butone(SERVICE_WANT_SQUIT, sptr->serv, sptr, - ":%s SQUIT %s :%s", from->name, - sptr->name, comment); + ":%s SQUIT %s :%s", + sptr->serv->up->serv->sid, + sptr->serv->sid, + comment); #endif del_from_sid_hash_table(sptr->serv); remove_server_from_tree(sptr); From d4462a2e8506625ec76cd081836a7088ef9e2929 Mon Sep 17 00:00:00 2001 From: Patrick Date: Wed, 29 Apr 2026 00:32:43 +0200 Subject: [PATCH 3/6] Added version to SERVER message for services --- ircd/s_serv.c | 11 ++++++----- ircd/s_service.c | 3 ++- 2 files changed, 8 insertions(+), 6 deletions(-) diff --git a/ircd/s_serv.c b/ircd/s_serv.c index a23aa5d3..385e4039 100644 --- a/ircd/s_serv.c +++ b/ircd/s_serv.c @@ -548,11 +548,12 @@ int m_smask(aClient *cptr, aClient *sptr, int parc, char *parv[]) add_server_to_tree(acptr); #ifdef USE_SERVICES check_services_butone(SERVICE_WANT_SERVER, acptr->serv, acptr, - ":%s SERVER %s %d %s :%s", + ":%s SERVER %s %d %s %s :%s", acptr->serv->up->name, acptr->name, acptr->hopcount + 1, acptr->serv->sid, + acptr->serv->verstr, acptr->info); #endif /* And introduce the server to others. */ @@ -812,9 +813,9 @@ int m_server(aClient *cptr, aClient *sptr, int parc, char *parv[]) introduce_server(cptr, acptr); #ifdef USE_SERVICES check_services_butone(SERVICE_WANT_SERVER, acptr->serv, acptr, - ":%s SERVER %s %d %s :%s", parv[0], + ":%s SERVER %s %d %s %s :%s", parv[0], acptr->name, hop+1, acptr->serv->sid, - acptr->info); + acptr->serv->verstr, acptr->info); #endif sendto_flag(SCH_SERVER, "Received SERVER %s from %s (%d %s)", acptr->name, parv[0], hop+1, acptr->info); @@ -1227,8 +1228,8 @@ int m_server_estab(aClient *cptr, char *sid, char *versionbuf) add_fd(cptr->fd, &fdas); #ifdef USE_SERVICES check_services_butone(SERVICE_WANT_SERVER, cptr->serv, cptr, - ":%s SERVER %s %d %s :%s", ME, cptr->name, - cptr->hopcount+1, cptr->serv->sid, cptr->info); + ":%s SERVER %s %d %s %s :%s", ME, cptr->name, + cptr->hopcount+1, cptr->serv->sid, cptr->serv->verstr, cptr->info); #endif sendto_flag(SCH_SERVER, "Received SERVER %s from %s (%d %s)", cptr->name, ME, 1, cptr->info); diff --git a/ircd/s_service.c b/ircd/s_service.c index 83ee19b2..81fbf736 100644 --- a/ircd/s_service.c +++ b/ircd/s_service.c @@ -671,10 +671,11 @@ int m_servset(aClient *cptr, aClient *sptr, int parc, char *parv[]) continue; split = (MyConnect(acptr) && mycmp(acptr->name, acptr->sockhost)); - sendto_one(sptr, ":%s SERVER %s %d %s :%s", + sendto_one(sptr, ":%s SERVER %s %d %s %s :%s", acptr->serv->up->name, acptr->name, acptr->hopcount+1, acptr->serv->sid, + acptr->serv->verstr, acptr->info); } } From a76da7e52a03b411243f8ab4c7c433dde88616af Mon Sep 17 00:00:00 2001 From: Patrick Date: Fri, 1 May 2026 17:53:05 +0200 Subject: [PATCH 4/6] Updated service SERVER message to contain SIDs instead of names --- ircd/s_serv.c | 21 +++++++++++++++------ ircd/s_service.c | 11 ++++++----- 2 files changed, 21 insertions(+), 11 deletions(-) diff --git a/ircd/s_serv.c b/ircd/s_serv.c index 385e4039..4ce1d9e9 100644 --- a/ircd/s_serv.c +++ b/ircd/s_serv.c @@ -549,7 +549,7 @@ int m_smask(aClient *cptr, aClient *sptr, int parc, char *parv[]) #ifdef USE_SERVICES check_services_butone(SERVICE_WANT_SERVER, acptr->serv, acptr, ":%s SERVER %s %d %s %s :%s", - acptr->serv->up->name, + acptr->serv->up->serv->sid, acptr->name, acptr->hopcount + 1, acptr->serv->sid, @@ -813,9 +813,13 @@ int m_server(aClient *cptr, aClient *sptr, int parc, char *parv[]) introduce_server(cptr, acptr); #ifdef USE_SERVICES check_services_butone(SERVICE_WANT_SERVER, acptr->serv, acptr, - ":%s SERVER %s %d %s %s :%s", parv[0], - acptr->name, hop+1, acptr->serv->sid, - acptr->serv->verstr, acptr->info); + ":%s SERVER %s %d %s %s :%s", + acptr->serv->up->serv->sid, + acptr->name, + hop + 1, + acptr->serv->sid, + acptr->serv->verstr, + acptr->info); #endif sendto_flag(SCH_SERVER, "Received SERVER %s from %s (%d %s)", acptr->name, parv[0], hop+1, acptr->info); @@ -1228,8 +1232,13 @@ int m_server_estab(aClient *cptr, char *sid, char *versionbuf) add_fd(cptr->fd, &fdas); #ifdef USE_SERVICES check_services_butone(SERVICE_WANT_SERVER, cptr->serv, cptr, - ":%s SERVER %s %d %s %s :%s", ME, cptr->name, - cptr->hopcount+1, cptr->serv->sid, cptr->serv->verstr, cptr->info); + ":%s SERVER %s %d %s %s :%s", + cptr->serv->up->serv->sid, + cptr->name, + cptr->hopcount + 1, + cptr->serv->sid, + cptr->serv->verstr, + cptr->info); #endif sendto_flag(SCH_SERVER, "Received SERVER %s from %s (%d %s)", cptr->name, ME, 1, cptr->info); diff --git a/ircd/s_service.c b/ircd/s_service.c index 81fbf736..f4ce7c31 100644 --- a/ircd/s_service.c +++ b/ircd/s_service.c @@ -672,11 +672,12 @@ int m_servset(aClient *cptr, aClient *sptr, int parc, char *parv[]) split = (MyConnect(acptr) && mycmp(acptr->name, acptr->sockhost)); sendto_one(sptr, ":%s SERVER %s %d %s %s :%s", - acptr->serv->up->name, acptr->name, - acptr->hopcount+1, - acptr->serv->sid, - acptr->serv->verstr, - acptr->info); + acptr->serv->up->serv->sid, + acptr->name, + acptr->hopcount + 1, + acptr->serv->sid, + acptr->serv->verstr, + acptr->info); } } From 03163243258b9d5535669c1f49d1c91695d5d77c Mon Sep 17 00:00:00 2001 From: Patrick Date: Sat, 2 May 2026 21:56:03 +0200 Subject: [PATCH 5/6] Added SASL user to UNICK message for services --- ircd/s_service.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/ircd/s_service.c b/ircd/s_service.c index f4ce7c31..61004503 100644 --- a/ircd/s_service.c +++ b/ircd/s_service.c @@ -197,7 +197,7 @@ static void sendnum_toone(aClient *cptr, int wants, aClient *sptr, umode = "+"; if ((wants & SERVICE_WANT_UID) && sptr->user) - sendto_one(cptr, ":%s UNICK %s %s %s %s %s %s :%s", + sendto_one(cptr, ":%s UNICK %s %s %s %s %s %s %s :%s", sptr->user->servp->sid, (wants & SERVICE_WANT_NICK) ? sptr->name : ".", sptr->uid, @@ -205,6 +205,7 @@ static void sendnum_toone(aClient *cptr, int wants, aClient *sptr, (wants & SERVICE_WANT_USER) ? sptr->user->host : ".", (wants & SERVICE_WANT_USER) ? get_client_ip(sptr) : ".", (wants & (SERVICE_WANT_UMODE|SERVICE_WANT_OPER)) ? umode : "+", + (wants & SERVICE_WANT_USER) ? (IsSASLAuthed(sptr) ? sptr->sasl_user : "*") : "", (wants & SERVICE_WANT_USER) ? sptr->info : ""); else if (wants & SERVICE_WANT_EXTNICK) From 195fdb43b55d5e2baf75af6c894d0924e0f9b67c Mon Sep 17 00:00:00 2001 From: Patrick Date: Thu, 7 May 2026 08:49:55 +0200 Subject: [PATCH 6/6] Services: Added SASL user to UNICK (clang-format) --- ircd/s_misc.c | 8 ++++---- ircd/s_serv.c | 42 +++++++++++++++++++++--------------------- ircd/s_service.c | 32 ++++++++++++++++---------------- 3 files changed, 41 insertions(+), 41 deletions(-) diff --git a/ircd/s_misc.c b/ircd/s_misc.c index 2b8dee04..95ec9584 100644 --- a/ircd/s_misc.c +++ b/ircd/s_misc.c @@ -756,10 +756,10 @@ static void exit_one_client(aClient *cptr, aClient *sptr, aClient *from, } #ifdef USE_SERVICES check_services_butone(SERVICE_WANT_SQUIT, sptr->serv, sptr, - ":%s SQUIT %s :%s", - sptr->serv->up->serv->sid, - sptr->serv->sid, - comment); + ":%s SQUIT %s :%s", + sptr->serv->up->serv->sid, + sptr->serv->sid, + comment); #endif del_from_sid_hash_table(sptr->serv); remove_server_from_tree(sptr); diff --git a/ircd/s_serv.c b/ircd/s_serv.c index 4ce1d9e9..e242725c 100644 --- a/ircd/s_serv.c +++ b/ircd/s_serv.c @@ -548,13 +548,13 @@ int m_smask(aClient *cptr, aClient *sptr, int parc, char *parv[]) add_server_to_tree(acptr); #ifdef USE_SERVICES check_services_butone(SERVICE_WANT_SERVER, acptr->serv, acptr, - ":%s SERVER %s %d %s %s :%s", - acptr->serv->up->serv->sid, - acptr->name, - acptr->hopcount + 1, - acptr->serv->sid, - acptr->serv->verstr, - acptr->info); + ":%s SERVER %s %d %s %s :%s", + acptr->serv->up->serv->sid, + acptr->name, + acptr->hopcount + 1, + acptr->serv->sid, + acptr->serv->verstr, + acptr->info); #endif /* And introduce the server to others. */ introduce_server(cptr, acptr); @@ -813,13 +813,13 @@ int m_server(aClient *cptr, aClient *sptr, int parc, char *parv[]) introduce_server(cptr, acptr); #ifdef USE_SERVICES check_services_butone(SERVICE_WANT_SERVER, acptr->serv, acptr, - ":%s SERVER %s %d %s %s :%s", - acptr->serv->up->serv->sid, - acptr->name, - hop + 1, - acptr->serv->sid, - acptr->serv->verstr, - acptr->info); + ":%s SERVER %s %d %s %s :%s", + acptr->serv->up->serv->sid, + acptr->name, + hop + 1, + acptr->serv->sid, + acptr->serv->verstr, + acptr->info); #endif sendto_flag(SCH_SERVER, "Received SERVER %s from %s (%d %s)", acptr->name, parv[0], hop+1, acptr->info); @@ -1232,13 +1232,13 @@ int m_server_estab(aClient *cptr, char *sid, char *versionbuf) add_fd(cptr->fd, &fdas); #ifdef USE_SERVICES check_services_butone(SERVICE_WANT_SERVER, cptr->serv, cptr, - ":%s SERVER %s %d %s %s :%s", - cptr->serv->up->serv->sid, - cptr->name, - cptr->hopcount + 1, - cptr->serv->sid, - cptr->serv->verstr, - cptr->info); + ":%s SERVER %s %d %s %s :%s", + cptr->serv->up->serv->sid, + cptr->name, + cptr->hopcount + 1, + cptr->serv->sid, + cptr->serv->verstr, + cptr->info); #endif sendto_flag(SCH_SERVER, "Received SERVER %s from %s (%d %s)", cptr->name, ME, 1, cptr->info); diff --git a/ircd/s_service.c b/ircd/s_service.c index 61004503..b5cf2d6b 100644 --- a/ircd/s_service.c +++ b/ircd/s_service.c @@ -198,15 +198,15 @@ static void sendnum_toone(aClient *cptr, int wants, aClient *sptr, if ((wants & SERVICE_WANT_UID) && sptr->user) sendto_one(cptr, ":%s UNICK %s %s %s %s %s %s %s :%s", - sptr->user->servp->sid, - (wants & SERVICE_WANT_NICK) ? sptr->name : ".", - sptr->uid, - (wants & SERVICE_WANT_USER) ? sptr->user->username : ".", - (wants & SERVICE_WANT_USER) ? sptr->user->host : ".", - (wants & SERVICE_WANT_USER) ? get_client_ip(sptr) : ".", - (wants & (SERVICE_WANT_UMODE|SERVICE_WANT_OPER)) ? umode : "+", - (wants & SERVICE_WANT_USER) ? (IsSASLAuthed(sptr) ? sptr->sasl_user : "*") : "", - (wants & SERVICE_WANT_USER) ? sptr->info : ""); + sptr->user->servp->sid, + (wants & SERVICE_WANT_NICK) ? sptr->name : ".", + sptr->uid, + (wants & SERVICE_WANT_USER) ? sptr->user->username : ".", + (wants & SERVICE_WANT_USER) ? sptr->user->host : ".", + (wants & SERVICE_WANT_USER) ? get_client_ip(sptr) : ".", + (wants & (SERVICE_WANT_UMODE | SERVICE_WANT_OPER)) ? umode : "+", + (wants & SERVICE_WANT_USER) ? (IsSASLAuthed(sptr) ? sptr->sasl_user : "*") : "", + (wants & SERVICE_WANT_USER) ? sptr->info : ""); else if (wants & SERVICE_WANT_EXTNICK) /* extended NICK syntax */ @@ -673,13 +673,13 @@ int m_servset(aClient *cptr, aClient *sptr, int parc, char *parv[]) split = (MyConnect(acptr) && mycmp(acptr->name, acptr->sockhost)); sendto_one(sptr, ":%s SERVER %s %d %s %s :%s", - acptr->serv->up->serv->sid, - acptr->name, - acptr->hopcount + 1, - acptr->serv->sid, - acptr->serv->verstr, - acptr->info); - } + acptr->serv->up->serv->sid, + acptr->name, + acptr->hopcount + 1, + acptr->serv->sid, + acptr->serv->verstr, + acptr->info); + } } if (burst & (SERVICE_WANT_NICK|SERVICE_WANT_USER|SERVICE_WANT_SERVICE))