From 69f09452d52b22f8515374c73a34715a91a090ec Mon Sep 17 00:00:00 2001 From: Egor Date: Mon, 12 Aug 2024 21:47:37 +0300 Subject: [PATCH] add biboumi hostname support --- src/admin.c | 1 + src/common.h | 1 + src/irc.c | 13 +++++++++++++ src/net.c | 1 + 4 files changed, 16 insertions(+) diff --git a/src/admin.c b/src/admin.c index ab8ef63..4f4a56f 100644 --- a/src/admin.c +++ b/src/admin.c @@ -147,6 +147,7 @@ static int client_index(lua_State *L) /* saslbufLen */ /* saslusername */ /* webircpeername */ + /* webirchostname */ /* buf/bufLen/wbuf/wbufLen */ integer_getter(cl, umode); integer_getter(cl, regstate); diff --git a/src/common.h b/src/common.h index 7e94d07..f2d98c8 100644 --- a/src/common.h +++ b/src/common.h @@ -52,6 +52,7 @@ struct client_data { size_t saslbufLen; char *saslusername; char *webircpeername; + char *webirchostname; char buf[2048]; size_t bufLen; char wbuf[8192]; diff --git a/src/irc.c b/src/irc.c index df370c2..bd76c36 100644 --- a/src/irc.c +++ b/src/irc.c @@ -191,6 +191,11 @@ static void cont_webirc(struct client_data *client, int res) { } else { free(client->peername); client->peername = client->webircpeername; + if (client->webirchostname) { + client_chghost(client, 0, client->webirchostname); + free(client->webirchostname); + client->webirchostname = 0; + } client->webircpeername = 0; if (client->webircwait == 2) { // NOTE: this relies on the job system being FIFO @@ -499,6 +504,14 @@ saslcleanup: client->webircwait = 1; else client->webircwait = 2; + if (!strcmp(args[1], "biboumi")) { + int len = strlen(args[2]); + client->webirchostname = malloc(len+sizeof(".xmpp")); + if (client->webirchostname) { + memcpy(client->webirchostname, args[2], len); + memcpy(client->webirchostname+len, ".xmpp", sizeof(".xmpp")); + } + } job_password_check(client, args[1], args[0], getdatafile("webirc.txt"), cont_webirc); memset(args[0], 0, strlen(args[0])); } diff --git a/src/net.c b/src/net.c index ddd9b00..32d93e7 100644 --- a/src/net.c +++ b/src/net.c @@ -143,6 +143,7 @@ void killConnectionPart2(struct client_data *cl) free(cl->saslbuf); free(cl->saslusername); free(cl->webircpeername); + free(cl->webirchostname); free(cl); } -- 2.56.0