View Issue Details

IDProjectCategoryView StatusLast Update
0006663unrealircdpublic2026-11-12 21:29
Reportermattf Assigned To 
PrioritynormalSeverityminorReproducibilityalways
Status newResolutionopen 
Product Version6.2.7.1 
Summary0006663: hideserver drops non-hidden servers from /MAP and /LINKS
DescriptionThis was found through an agentic-driven scan of the source and is part of a batch of non-critical issues I found worth reporting.

In src/modules/hideserver.c the loops that build /MAP and /LINKS use break instead of continue when they hit a hidden server. For example in the map dump loop:

    list_for_each_entry(acptr, &global_server_list, client_node)
    {
        if (acptr->uplink != server || ...)
            continue;
        if (FindHiddenServer(acptr->name))
            break; // should be continue
        SetMap(acptr);
        cnt++;
    }

Because break aborts the whole walk, every server that comes after a hidden one in global_server_list is also left out, even though it is not hidden. The same break pattern is in the other map loop and in the /LINKS override loop. The uplink filter also sits after the break, so a hidden server anywhere in the list can cut off siblings under the same uplink.

Net effect: hiding one server can hide several. A regular user sees fewer servers than hideserver was configured to hide. It is over-hiding, not an exposure; hidden servers are not revealed.
Steps To Reproduce1. Three servers are linked: a hub and two leaves (leaf-a.test and leaf-b.test), both connected directly to the hub.
2. The hub is configured to hide only one leaf: hideserver { hide { "leaf-b.test"; }; }.
3. A regular (non-oper) client connects to the hub and sends MAP, then LINKS.
4. The hub and leaf-a.test should show, with only leaf-b.test hidden. Instead, when leaf-b.test sorts before leaf-a.test, both leaves are missing and only the hub shows.
Additional InformationSuggested fix: change break to continue at each FindHiddenServer() check in the map and links loops, so a hidden server is skipped without aborting the walk.

Minor and config-gated (needs hideserver plus at least two servers under one uplink with a hidden one ordered first).

Let me know if this is desired and I could PR it myself.
3rd party modules

Activities

There are no notes attached to this issue.

Issue History

Date Modified Username Field Change
2026-11-12 21:29 mattf New Issue