From 77451facc01892282460b97a2fbe971dae319eec Mon Sep 17 00:00:00 2001 From: pk910 Date: Thu, 7 Jul 2011 23:04:36 +0200 Subject: [PATCH] added $.x.y fakhosts where $ gets replaced with the users auth handle --- src/chanserv.c | 14 ++++++++++++++ src/nickserv.c | 5 +++++ src/proto-common.c | 7 ++++++- 3 files changed, 25 insertions(+), 1 deletion(-) diff --git a/src/chanserv.c b/src/chanserv.c index 0b1eb40..e160f62 100644 --- a/src/chanserv.c +++ b/src/chanserv.c @@ -3264,6 +3264,20 @@ eject_user(struct userNode *user, struct chanNode *channel, unsigned int argc, c offset = (action & ACTION_ADD_TIMED_BAN) ? 3 : 2; REQUIRE_PARAMS(offset); + if(argc > offset && IsNetServ(user)) + { + if(*argv[offset] == '$') { + struct userNode *hib; + const char *accountnameb = argv[offset] + 1; + if(!(hib = GetUserH(accountnameb))) + { + reply("MSG_HANDLE_UNKNOWN", accountnameb); + return 0; + } + user=hib; + offset++; + } + } if(argc > offset) { reason = unsplit_string(argv + offset, argc - offset, NULL); diff --git a/src/nickserv.c b/src/nickserv.c index 4ba4250..7911034 100644 --- a/src/nickserv.c +++ b/src/nickserv.c @@ -891,6 +891,10 @@ generate_fakehost(struct handle_info *handle) /* A leading dot indicates the stored value is actually a title. */ snprintf(buffer, sizeof(buffer), "%s.%s.%s", handle->handle, handle->fakehost+1, titlehost_suffix); return buffer; + } else if (handle->fakehost[0] == '$') { + /* A leading $ indicates the stored value begins with the user handle. */ + snprintf(buffer, sizeof(buffer), "%s%s", handle->handle, handle->fakehost+1); + return buffer; } return handle->fakehost; } @@ -1659,6 +1663,7 @@ static NICKSERV_FUNC(cmd_rename_handle) reply("NSMSG_HANDLE_CHANGED", old_handle, hi->handle); global_message(MESSAGE_RECIPIENT_STAFF, msgbuf); free(old_handle); + apply_fakehost(hi); return 1; } diff --git a/src/proto-common.c b/src/proto-common.c index e71bacd..a7c159a 100644 --- a/src/proto-common.c +++ b/src/proto-common.c @@ -757,7 +757,12 @@ generate_hostmask(struct userNode *user, int options) } hostname = user->hostname; if (IsFakeHost(user) && IsHiddenHost(user) && !(options & GENMASK_NO_HIDING)) { - hostname = user->fakehost; + if(user->fakehost && user->fakehost[0] == "$") { + hostname = alloca(strlen(user->handle_info->handle) + strlen(user->fakehost)); + sprintf(hostname, "%s%s", user->handle_info->handle, user->fakehost+1); + } else { + hostname = user->fakehost; + } } else if (IsHiddenHost(user) && user->handle_info && hidden_host_suffix && !(options & GENMASK_NO_HIDING)) { hostname = alloca(strlen(user->handle_info->handle) + strlen(hidden_host_suffix) + 2); sprintf(hostname, "%s.%s", user->handle_info->handle, hidden_host_suffix); -- 2.20.1