I can confirm this bug on Ubuntu 24.04 with rspamd 3.8.1-1ubuntu3, and I 
believe the root
cause in the original report is incorrect. It is not related to Apache, to 
reverse proxying,
or to URL fragment handling — I reproduced it with no Apache and no proxy 
involved at all.

**The web UI is served Bootstrap 4 while its markup requires Bootstrap
5.**

### Evidence

Upstream rspamd 3.8.1 bundles Bootstrap 5.3.2:

```
$ curl -s 
https://raw.githubusercontent.com/rspamd/rspamd/3.8.1/interface/js/lib/bootstrap.bundle.min.js
 | head -c 120
/*!
  * Bootstrap v5.3.2 (https://getbootstrap.com/)
  * Copyright 2011-2023 The Bootstrap Authors
```

The Ubuntu package replaces it at install time. From
`/var/lib/dpkg/info/rspamd.postinst`:

```sh
copy_js_font_files()
{
  # Rspamd web interface doesn't support symlinks and directory traversal
  # copy javascript files from original Debian packages
  RSPAMD_CSS_DIR=/usr/share/rspamd/www/css
  RSPAMD_JS_LIB_DIR=/usr/share/rspamd/www/js/lib
  cp --remove-destination 
/usr/share/javascript/bootstrap4/js/bootstrap.bundle.min.js 
$RSPAMD_JS_LIB_DIR/bootstrap.bundle.min.js
  cp --remove-destination 
/usr/share/javascript/bootstrap4/css/bootstrap.min.css 
$RSPAMD_CSS_DIR/bootstrap.min.css
  ...
```

`debian/control` correspondingly has `Depends: libjs-bootstrap4`.

Result on a stock install:

| File | Version | Size |
|---|---|---|
| upstream 3.8.1 `bootstrap.bundle.min.js` | Bootstrap 5.3.2 | 80663 |
| what ships on Ubuntu 24.04 | **Bootstrap 4.6.1** | 124345 |

Meanwhile the shipped `index.html` — which the package *does* own — uses 
Bootstrap 5 data
attributes exclusively:

```
$ grep -o 'data-bs-toggle' /usr/share/rspamd/www/index.html | wc -l
10
$ grep -o 'data-toggle='   /usr/share/rspamd/www/index.html | wc -l
0
```

Bootstrap 4's tab component listens for `data-toggle="tab"`. The markup only 
ever says
`data-bs-toggle="tab"`, so the click data-API is never wired up and **no 
handler runs at all**
when a nav tab is clicked.

### Why this matches the reported symptoms exactly

* **Clicking History/Throughput/Configuration does nothing.** Not a failed 
request — *no request
  is made*. Captured over 24 minutes of an authenticated session: 290 requests, 
all of them the
  10-second `neighbours`+`stat` auto-refresh, every one HTTP 200. Zero requests 
for
  `js/app/history.js`, which RequireJS would have to fetch on the first History 
click. The click
  never reaches rspamd's own `tabClick()`.
* **Reloading works.** `stickyTabs` activates the tab programmatically via the 
jQuery
  `.tab("show")` API, which Bootstrap 4 does provide. Only the *click-driven* 
path is dead.
* **Action icons do not render.** The CSS is replaced too, on the line above.
* **The login modal still works**, because rspamd opens and closes it 
programmatically with
  `$("#connectDialog").modal("show")`. But its `data-bs-backdrop="static"` and
  `data-bs-keyboard="false"` are silently ignored by Bootstrap 4, which reads 
`data-backdrop` /
  `data-keyboard` — so the login dialog can be dismissed by clicking the 
backdrop, which it is
  explicitly configured not to allow.

### Reproduced without any web server in the path

To rule out Apache, nginx and proxying entirely:

```sh
ssh -L 11334:127.0.0.1:11334 <host>
```

then browse `http://127.0.0.1:11334/` — rspamd's own controller, no proxy, no 
rewriting.
The tabs are equally dead there.

I also drove it headlessly through the Chrome DevTools Protocol with a real 
login. After
authentication the UI is otherwise healthy — no backdrop left over, no disabled 
navigation, the
auto-refresh countdown running — and a click on the History tab reports:

```
click dispatched, disabled=false class=nav-link
requests after click: neighbours, stat      (the auto-refresh only)
activeTab: status_nav                       (unchanged)
```

No JavaScript errors are logged, which is expected: nothing throws. Bootstrap 4 
simply never
recognises the selector.

### The fix already exists in Debian

Debian addressed this in **rspamd 3.11.0-1** (26 Feb 2025):

```
  * Replace libjs-bootstrap4 by libjs-bootstrap5
```

Debian has since moved on further — 4.0.1-1 in unstable/testing at the time of 
writing, with the
bootstrap5 dependency carried forward. The switch itself is old news in Debian; 
only Ubuntu is stuck.

Worth noting for the timeline: Debian's `3.7.1-1` (10 Oct 2023) already 
refreshed its patches for
**bootstrap 5.3.1**, so the interface has required Bootstrap 5 since October 
2023 while the packaging
kept supplying Bootstrap 4 until February 2025. Ubuntu 24.04 froze at 3.8.1 — 
squarely inside that
16-month window.

This leaves Ubuntu 24.04 LTS as the affected release: it is frozen at 3.8.1, 
which is inside the
window where the UI already required Bootstrap 5 but the packaging still 
supplied Bootstrap 4.
noble is supported until 2029, and the antispam web interface is unusable for 
its whole life
unless this is fixed.

**`libjs-bootstrap5` 5.3.1+dfsg-1 is already in noble/universe** — very close 
to the 5.3.2 that
upstream 3.8.1 bundles — so no new package is needed in the archive.

The change is confined to packaging and needs no upstream code change:

1. `debian/control`: `Depends: libjs-bootstrap4` → `libjs-bootstrap5`
2. `debian/rspamd.postinst`: copy `bootstrap.bundle.min.js` and 
`bootstrap.min.css` from the
   `bootstrap5` directory instead of `bootstrap4`

That is the same change Debian shipped, applied to 3.8.1.

### Unrelated minor defect in the same function

The same `postinst` copies RequireJS from the unminified source and
renames it:

```sh
cp --remove-destination /usr/share/javascript/requirejs/require.js 
$RSPAMD_JS_LIB_DIR/require.min.js
```

The result is an 86 kB file named `require.min.js` where upstream ships a 17 kB 
minified one.
Functionally harmless, but it is served to every user of the interface.

### Environment

```
Ubuntu 24.04.x
rspamd            3.8.1-1ubuntu3   (noble/universe)
libjs-bootstrap4  4.6.1+dfsg1-4+deb12u1build0.24.04.1
libjs-bootstrap5  5.3.1+dfsg-1     (available, not installed)
```

Reproduced behind nginx, and directly against the controller on port
11334 with no proxy.

-- 
You received this bug notification because you are a member of Ubuntu
Bugs, which is subscribed to Ubuntu.
https://bugs.launchpad.net/bugs/2065914

Title:
  rspamd webgui navigation not working ( ubuntu 24.04)

To manage notifications about this bug go to:
https://bugs.launchpad.net/ubuntu/+source/rspamd/+bug/2065914/+subscriptions


-- 
ubuntu-bugs mailing list
[email protected]
https://lists.ubuntu.com/mailman/listinfo/ubuntu-bugs

Reply via email to