howdy-next
Triggered rules
llm_review
The static rules flagged this MEDIUM, but an AI model (qwen/qwen3-235b-a22b-2507) reviewed the full PKGBUILD and judged it LOW (confidence 95%): The package installs a setuid binary as part of its legitimate functionality (facial recognition authentication), which is expected for PAM modules, and does not involve remote code execution or unauthorized privilege escalation.
1 higher static finding superseded - not the current verdict (shown for transparency)
privileged_install
The package grants elevated privileges or installs an update path outside pacman: a /etc/sudoers.d rule (often passwordless), a setuid/setgid binary, or a self-update script/service that can fetch and run future code with no checksum verification. The initial install may be verified, but the ongoing privilege + update surface is a real supply-chain / privilege-escalation risk.
-
PKGBUILD:42
chmod 4755 "$pkgdir/usr/lib/howdy/howdy-auth-helper"
PKGBUILD
1 offending line(s) highlighted# Maintainer: nathawat <nathawat[at]noreply[dot]codeberg[dot]org>
pkgname=howdy-next
pkgver=3.3.0
pkgrel=2
pkgdesc="C++ rewrite of Howdy facial-recognition authentication on Linux"
arch=('x86_64')
url="https://codeberg.org/nathawat/howdy-next"
license=('MIT')
depends=('libinih' 'libevdev' 'pam' 'opencv>=5.0.0' 'curl' 'openssl' 'qt6-base' 'yyjson>=0.12.0')
makedepends=('meson>=1.11.0' 'gettext')
optdepends=('linux-enable-ir-emitter: Enables infrared cameras that are not directly enabled out-of-the box')
provides=('howdy')
conflicts=('howdy' 'howdy-next-git')
replaces=('howdy-next-git')
backup=('etc/howdy/config.ini')
install=howdy-next.install
_tag="v${pkgver}"
source=(
"${pkgname}-${pkgver}.tar.gz::${url}/archive/${_tag}.tar.gz"
"polkit-agent-helper-howdy.conf"
)
b2sums=('396a21c434fccc4c3ac5de95308afee8beeeb90c220163e8ae242bd94b3b8108fc4119c54aa800bb8c219428960f4df57d04e9aac42906ca8c1c61e7568322e3'
'ac6c1a82d6b4a00e4d518ad49592d5eb0aa4590e6c584328230fe875af0604b56861235cfbf9cd8a93bc9f1130eafb02392705cfa3a247770eb013da8576922b')
build() {
arch-meson "$srcdir/howdy-next" "$srcdir/build" \
-Dconfig_dir=/etc/howdy \
-Duser_models_dir=/etc/howdy/models
meson compile -C "$srcdir/build"
}
check() {
meson test -C "$srcdir/build" --print-errorlogs
}
package() {
meson install -C "$srcdir/build" --destdir "$pkgdir"
chmod 4755 "$pkgdir/usr/lib/howdy/howdy-auth-helper"
install -d -m750 "$pkgdir/etc/howdy/models"
install -m640 "$srcdir/howdy-next/config/config.ini" "$pkgdir/etc/howdy/config.ini"
install -Dm644 "$srcdir/howdy-next/LICENSE" \
"$pkgdir/usr/share/licenses/$pkgname/LICENSE"
# Workaround for polkit 127+ breaking howdy (boltgolt/howdy#1077)
install -Dm644 "$srcdir/polkit-agent-helper-howdy.conf" \
"$pkgdir/usr/lib/systemd/system/polkit-agent-helper@.service.d/10-howdy.conf"
}
Changes since previous scan
--- PKGBUILD @ 2026-07-18 00:14+++ PKGBUILD @ 2026-08-03 00:08@@ -21,7 +21,7 @@ "${pkgname}-${pkgver}.tar.gz::${url}/archive/${_tag}.tar.gz" "polkit-agent-helper-howdy.conf" )-b2sums=('2dce843867b81de0f713019ad2e2e9b8500570556d6fa51e7eb8ab8706a15534b94442c81b22bc3c204adfef9696336ec134d28d86c3168ee85067a706e787d3'+b2sums=('396a21c434fccc4c3ac5de95308afee8beeeb90c220163e8ae242bd94b3b8108fc4119c54aa800bb8c219428960f4df57d04e9aac42906ca8c1c61e7568322e3' 'ac6c1a82d6b4a00e4d518ad49592d5eb0aa4590e6c584328230fe875af0604b56861235cfbf9cd8a93bc9f1130eafb02392705cfa3a247770eb013da8576922b') build() {Scan history
| Scanned at (UTC) | Severity | Rules |
|---|---|---|
| 2026-08-03 00:08:14 | LOW | 2 |
| 2026-08-02 00:16:08 | LOW | 2 |
| 2026-08-01 00:11:18 | LOW | 2 |
| 2026-07-31 00:14:10 | LOW | 2 |
| 2026-07-30 00:17:23 | LOW | 2 |
| 2026-07-29 00:25:53 | LOW | 2 |
| 2026-07-28 00:07:28 | LOW | 2 |
| 2026-07-27 00:24:32 | LOW | 2 |
| 2026-07-26 00:07:32 | LOW | 2 |
| 2026-07-25 00:13:44 | LOW | 2 |
| 2026-07-24 00:02:28 | LOW | 2 |
| 2026-07-23 00:14:47 | LOW | 2 |
| 2026-07-22 00:29:32 | LOW | 2 |
| 2026-07-21 00:24:15 | LOW | 2 |
| 2026-07-20 00:19:49 | LOW | 2 |
| 2026-07-19 00:17:08 | LOW | 2 |
| 2026-07-18 19:59:04 | MEDIUM | 1 |
| 2026-07-18 00:14:48 | LOW | 2 |
| 2026-07-17 00:06:16 | LOW | 2 |
| 2026-07-16 00:05:41 | LOW | 2 |