From f8f8c9257473e17dba3461c8e512357421518af5 Mon Sep 17 00:00:00 2001 From: Michael Ortmann <41313082+michaelortmann@users.noreply.github.com> Date: Sat, 1 Feb 2025 02:38:48 +0100 Subject: [PATCH] send SETNAME to server, when cap setname is enabled and bot changes realname --- src/eggdrop.h | 11 +++++++---- src/mod/server.mod/server.c | 21 +++++++++++++++++++-- src/mod/server.mod/servmsg.c | 3 ++- 3 files changed, 28 insertions(+), 7 deletions(-) diff --git a/src/eggdrop.h b/src/eggdrop.h index 393de019d4..dc0d9988b6 100644 --- a/src/eggdrop.h +++ b/src/eggdrop.h @@ -49,10 +49,12 @@ * You should leave this at 32 characters and modify nick-len in the * configuration file instead. */ -#define CHANNELLEN 80 /* FIXME see issue #3 and issue #38 and rfc1459 <= 200 */ -#define HANDLEN 32 /* valid values 9->NICKMAX */ -#define NICKMAX 32 /* valid values HANDLEN->32 */ -#define USERLEN 10 +#define CHANNELLEN 80 /* FIXME see issue #3 and issue #38 and rfc1459 <= 200 */ +#define HANDLEN 32 /* valid values 9->NICKMAX */ +#define NICKMAX 32 /* valid values HANDLEN->32 */ +#define USERLEN 10 +#define REALNAMEMAX 130 /* maxreal Number 130 The maximum length of a real name. + https://docs.inspircd.org/4/configuration/ */ /* Handy string lengths */ @@ -88,6 +90,7 @@ #define NOTENAMELEN ((HANDLEN * 2) + 1) #define PASSWORDMAX 30 /* highest value compatible to older eggdrop */ #define PASSWORDLEN PASSWORDMAX + 1 +#define REALNAMELEN REALNAMEMAX + 1 #ifdef HAVE_UNISTD_H # include diff --git a/src/mod/server.mod/server.c b/src/mod/server.mod/server.c index 6aff0e488e..6697a84c6c 100644 --- a/src/mod/server.mod/server.c +++ b/src/mod/server.mod/server.c @@ -61,7 +61,7 @@ static time_t lastpingcheck; /* set when i unidle myself, cleared when static time_t server_online; /* server connection time */ static time_t server_cycle_wait; /* seconds to wait before * re-beginning the server list */ -static char botrealname[81]; /* realname of bot */ +static char botrealname[REALNAMELEN]; /* realname of bot */ static int server_timeout; /* server timeout for connecting */ static struct server_list *serverlist; /* old-style queue, still used by * server list */ @@ -106,6 +106,7 @@ static int monitor005 = 0; /* Monitor */ static int max_monitor = 0; /* Maximum # of monitored nicks, from server */ static int monitor732 = 0; /* Monitor */ static struct monitor_list *monitor = NULL; +static int namelen005 = 0; /* Maximum len of realname */ static p_tcl_bind_list H_wall, H_raw, H_notc, H_msgm, H_msg, H_flud, H_ctcr, @@ -1733,10 +1734,20 @@ static char *traced_nicklen(ClientData cdata, Tcl_Interp *irp, return NULL; } +static char *traced_realname(ClientData cdata, Tcl_Interp *irp, + EGG_CONST char *name1, + EGG_CONST char *name2, int flags) +{ + printf("DEBUG: traced_realname() namelen005 = %i\n", namelen005); + if (namelen005 && ((flags & TCL_TRACE_WRITES) || (flags & TCL_TRACE_UNSETS))) + dprintf(DP_SERVER, "SETNAME %s\n", botrealname); + return NULL; +} + static tcl_strings my_tcl_strings[] = { {"botnick", NULL, 0, STR_PROTECT}, {"altnick", altnick, NICKMAX, 0}, - {"realname", botrealname, 80, 0}, + {"realname", botrealname, REALNAMEMAX, 0}, {"init-server", initserver, 120, 0}, {"connect-server", connectserver, 120, 0}, {"stackable-commands", stackablecmds, 510, 0}, @@ -2301,6 +2312,9 @@ static char *server_close() Tcl_UntraceVar(interp, "nick-len", TCL_TRACE_READS | TCL_TRACE_WRITES | TCL_TRACE_UNSETS, traced_nicklen, NULL); + Tcl_UntraceVar(interp, "realname", + TCL_TRACE_WRITES | TCL_TRACE_UNSETS, + traced_realname, NULL); tcl_untraceserver("servers", NULL); empty_msgq(); del_hook(HOOK_SECONDLY, (Function) server_secondly); @@ -2487,6 +2501,9 @@ char *server_start(Function *global_funcs) Tcl_TraceVar(interp, "nick-len", TCL_TRACE_READS | TCL_TRACE_WRITES | TCL_TRACE_UNSETS, traced_nicklen, NULL); + Tcl_TraceVar(interp, "realname", + TCL_TRACE_WRITES | TCL_TRACE_UNSETS, + traced_realname, NULL); H_wall = add_bind_table("wall", HT_STACKABLE, server_2char); H_raw = add_bind_table("raw", HT_STACKABLE, server_raw); H_rawt = add_bind_table("rawt", HT_STACKABLE, server_rawt); diff --git a/src/mod/server.mod/servmsg.c b/src/mod/server.mod/servmsg.c index c0e048a2bc..d0205d5bec 100644 --- a/src/mod/server.mod/servmsg.c +++ b/src/mod/server.mod/servmsg.c @@ -2134,7 +2134,8 @@ static int server_isupport(char *key, char *isset_str, char *value) } else if (!strcmp(key, "MONITOR")) { monitor005 = isset; isupport_parseint(key, isset ? value : NULL, 1, 500, 1, 0, &max_monitor); - } + } else if (!strcmp(key, "NAMELEN")) + isupport_parseint(key, isset ? value : NULL, 0, REALNAMEMAX, 1, 50, &namelen005); return 0; }