View Issue Details
| ID | Project | Category | View Status | Date Submitted | Last Update |
|---|---|---|---|---|---|
| 0006663 | unreal | ircd | public | 2026-11-12 21:29 | 2026-11-12 21:29 |
| Reporter | mattf | Assigned To | |||
| Priority | normal | Severity | minor | Reproducibility | always |
| Status | new | Resolution | open | ||
| Product Version | 6.2.7.1 | ||||
| Summary | 0006663: hideserver drops non-hidden servers from /MAP and /LINKS | ||||
| Description | This 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 Reproduce | 1. 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 Information | Suggested 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 | |||||
| Date Modified | Username | Field | Change |
|---|---|---|---|
| 2026-11-12 21:29 | mattf | New Issue |