glanced

LOW
maintainer thisisayande 0 votes scanned 2026-09-12 00:25:17.576467
View on AUR
Why flagged

Sources are the project's own GitHub tarball plus official model files from Google's MediaPipe storage and InsightFace's GitHub releases, all with pinned sha256 checksums; the models are installed as data files (not executed directly), and the build compiles the project's own Python wheel and a small PAM C module — no obfuscation, no remote code execution, no untrusted prebuilt binaries.

Triggered rules

Low Few votes, recently uploaded zero_votes_recent

Uploaded within the last 14 days with 2 or fewer community votes — little peer review so far.

Low AI review downgraded a static finding llm_review

The static rules flagged this MEDIUM, but an AI model (anthropic/claude-sonnet-4.6) reviewed the full PKGBUILD and judged it LOW (confidence 70%): Sources are the project's own GitHub tarball plus official model files from Google's MediaPipe storage and InsightFace's GitHub releases, all with pinned sha256 checksums; the models are installed as data files (not executed directly), and the build compiles the project's own Python wheel and a small PAM C module — no obfuscation, no remote code execution, no untrusted prebuilt binaries.

1 higher static finding superseded - not the current verdict (shown for transparency)
Medium source=() URL on a non-standard host source_untrusted_domain

One or more source=() URLs point to a host outside the trusted allowlist (github.com, gitlab.com, codeberg.org, pypi.org, …).

  • PKGBUILD:38 "face_landmarker.task::https://storage.googleapis.com/mediapipe-models/face_landmarker/face_landmarker/float16/1/face_landmarker.task"

PKGBUILD

1 offending line(s) highlighted
1# Maintainer: Ayan De <sayandedotcom@gmail.com>
2
3pkgname=glanced
4pkgver=0.1.1
5pkgrel=1
6pkgdesc="Face unlock for Linux with real liveness detection"
7arch=('x86_64')
8url="https://github.com/ayan-de/glance-linux"
9license=('MIT')
10
11# python-onnxruntime is a virtual name: python-onnxruntime-cpu provides it, and
12# so do the CUDA and ROCm builds. Depending on the virtual leaves a user who
13# already runs the GPU flavour alone instead of pulling a second copy.
14depends=(
15 'python'
16 'python-numpy'
17 'python-opencv'
18 'python-onnxruntime'
19 'python-mediapipe'
20 'python-cryptography'
21 'pyside6'
22 'pam'
23)
24makedepends=('python-build' 'python-installer' 'python-wheel' 'python-setuptools')
25checkdepends=('python-pytest')
26optdepends=('omarchy: bar widget and panel, via `omarchy plugin add`')
27install="$pkgname.install"
28
29# The two networks are not vendored: the landmarker is Google's, the recognizer
30# is InsightFace's. Fetching them here rather than at first run means makepkg
31# checksums them, the install works offline afterwards, and the user never
32# waits on a download to enroll.
33#
34# buffalo_s.zip is 127MB for the 13MB model inside it; upstream publishes no
35# smaller artifact. makepkg caches it, so that cost is paid once.
36source=(
37 "$pkgname-$pkgver.tar.gz::$url/archive/refs/tags/v$pkgver.tar.gz"
38 "face_landmarker.task::https://storage.googleapis.com/mediapipe-models/face_landmarker/face_landmarker/float16/1/face_landmarker.task"
39 "buffalo_s.zip::https://github.com/deepinsight/insightface/releases/download/v0.7/buffalo_s.zip"
40)
41sha256sums=(
42 'e2ea1e4ce2dcc9c25e0cde531a5233da9f6f7eaafe3ed06a96cb51ff8189d7be'
43 '64184e229b263107bc2b804c6625db1341ff2bb731874b0bcc2fe6544e0bc9ff'
44 'd85a87f503f691807cd8bb97128bdf7a0660326cd9cd02657127fa978bab8b5e'
45)
46
47build() {
48 cd "glance-linux-$pkgver"
49 python -m build --wheel --no-isolation
50 # The PAM module is 200 lines of C and links only libpam.
51 make -C pam
52}
53
54check() {
55 cd "glance-linux-$pkgver"
56 # The liveness model, the PAM-stack text transforms, the model search
57 # order and the passphrase routing need nothing but numpy, so they run in a
58 # build chroot with no camera and no display.
59 python -m pytest tests/test_liveness.py tests/test_pamsetup.py tests/test_paths.py \
60 tests/test_enroll_passphrase.py -q
61}
62
63package() {
64 cd "glance-linux-$pkgver"
65
66 python -m installer --destdir="$pkgdir" dist/*.whl
67
68 # /usr/lib/security is where PAM looks; the module is never setuid and
69 # refuses to run in a setuid context regardless.
70 make -C pam install DESTDIR="$pkgdir" LIBDIR=/usr/lib/security
71
72 # A read-only system copy of each model. `glancectl fetch-model` still works
73 # and its result takes precedence, so a user is never stuck with ours.
74 install -Dm644 "$srcdir/face_landmarker.task" \
75 "$pkgdir/usr/share/$pkgname/models/face_landmarker.task"
76 install -Dm644 "$srcdir/w600k_mbf.onnx" \
77 "$pkgdir/usr/share/$pkgname/models/arcface.onnx"
78
79 # The shipped unit points at a checkout's binary; the packaged one is on PATH.
80 sed 's|^ExecStart=.*|ExecStart=/usr/bin/glancectl daemon --mode light|' \
81 packaging/systemd/glanced.service \
82 > "$srcdir/glanced.service.packaged"
83 install -Dm644 "$srcdir/glanced.service.packaged" \
84 "$pkgdir/usr/lib/systemd/user/glanced.service"
85
86 install -Dm644 LICENSE "$pkgdir/usr/share/licenses/$pkgname/LICENSE"
87 install -Dm644 NOTICE "$pkgdir/usr/share/licenses/$pkgname/NOTICE"
88 install -Dm644 README.md "$pkgdir/usr/share/doc/$pkgname/README.md"
89}
90

Scan history

Scanned at (UTC)SeverityRules
2026-09-12 00:25:17 Low 3
2026-09-11 23:26:07 Low 3
2026-09-11 23:24:29 Medium 2

Report a package

Reports go to the AURWatch maintainer (one person) and are read by hand. No login required.

0 / 4000
Your suggestion