etlegacy32
The non-standard host hosts a mod file (PK3 and a 32-bit library) for ET:Legacy, which are data and a prebuilt binary module; while the binary module poses a potential risk, it is specific to the game and not a generic remote code execution, reducing severity to low.
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 90%): The non-standard host hosts a mod file (PK3 and a 32-bit library) for ET:Legacy, which are data and a prebuilt binary module; while the binary module poses a potential risk, it is specific to the game and not a generic remote code execution, reducing severity to low.
1 higher static finding superseded - not the current verdict (shown for transparency)
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:17
"https://www.etlegacy.com/download/file/772")
PKGBUILD
1 offending line(s) highlighted# ET:Legacy is provided as a cross-compiled 32 bit version for compatibility reason with existing 32 bit mods.
# On a 64 bits system, [multilib] must be enabled and multilib-devel installed for 32 bits cross-compilation.
# The engine is dynamically compiled, while the official precompiled mod libraries are provided.
_pkgbase=etlegacy
pkgbase=etlegacy32
pkgname=('etlegacy32' 'etlegacy32-mod')
pkgver=2.86.1
pkgrel=1
arch=('i686' 'x86_64')
url="http://www.etlegacy.com/"
license=('GPL3' 'custom')
makedepends=('cmake' 'zip')
makedepends_i686=('alsa-lib' 'curl' 'freetype2' 'gcc-libs' 'glew' 'libjpeg-turbo' 'libvorbis' 'sdl2' 'minizip' 'openal' 'libtheora' 'sqlite' 'cjson')
makedepends_x86_64=('lib32-alsa-lib' 'lib32-curl' 'lib32-freetype2' 'lib32-gcc-libs' 'lib32-glew' 'lib32-libjpeg-turbo' 'lib32-libvorbis' 'lib32-sdl2' 'lib32-minizip' 'lib32-openal' 'lib32-libtheora' 'lib32-sqlite' 'lib32-cjson')
source=("https://github.com/etlegacy/etlegacy/archive/v$pkgver.tar.gz"
"https://www.etlegacy.com/download/file/772")
sha256sums=('33aaeaccb53ffe54715abd03e2c6e52eac8af56228c161d731b8657e19bec058'
'8e2657396c2162c625d09e540295a1e417e7df97f1f5be0c822d5ec0a3b97ab9')
build() {
cd "$_pkgbase-$pkgver"
# fix for https://archlinux.org/todo/prepare-packages-for-d_fortify_source3/
export CFLAGS="${CFLAGS/_FORTIFY_SOURCE=3/_FORTIFY_SOURCE=2}"
export CXXFLAGS="${CXXFLAGS/_FORTIFY_SOURCE=3/_FORTIFY_SOURCE=2}"
if [[ "$CARCH" == "i686" ]]; then
cmakeopts+=(
'-DCMAKE_LIBRARY_PATH=/usr/lib'
'-DCMAKE_PREFIX_PATH=/usr/lib/cmake'
'-DCROSS_COMPILE32=0'
)
else
cmakeopts+=(
'-DCMAKE_LIBRARY_PATH=/usr/lib32'
'-DCMAKE_PREFIX_PATH=/usr/lib32/cmake'
'-DCROSS_COMPILE32=1'
)
fi
echo "OPTS" ${cmakeopts[@]}
cmake . ${cmakeopts[@]} \
-DCMAKE_BUILD_TYPE=Release \
-DCMAKE_INSTALL_PREFIX=/usr \
-DINSTALL_DEFAULT_BASEDIR=/usr/lib/etlegacy\
-DINSTALL_DEFAULT_BINDIR=bin \
-DINSTALL_DEFAULT_MODDIR=lib/etlegacy \
-DBUILD_SERVER=1 \
-DBUILD_CLIENT=1 \
-DBUILD_MOD=0 \
-DBUILD_MOD_PK3=0 \
-DBUNDLED_LIBS=0 \
-DFEATURE_AUTOUPDATE=0 \
-DINSTALL_OMNIBOT=0
make
}
package_etlegacy32() {
pkgdesc="Wolfenstein: Enemy Territory 2.60b compatible client/server (etlegacy engine, 32 bit)"
depends=('etlegacy32-mod')
depends_i686=('alsa-lib' 'curl' 'freetype2' 'gcc-libs' 'glew' 'libjpeg-turbo' 'libvorbis' 'lua' 'sdl2' 'minizip' 'openal' 'libtheora' 'sqlite' 'cjson')
depends_x86_64=('lib32-alsa-lib' 'lib32-curl' 'lib32-freetype2' 'lib32-gcc-libs' 'lib32-glew' 'lib32-libjpeg-turbo' 'lib32-libvorbis' 'lib32-lua' 'lib32-sdl2' 'lib32-minizip' 'lib32-openal' 'lib32-libtheora' 'lib32-sqlite' 'lib32-cjson')
provides=('etlegacy')
conflicts=('etlegacy')
backup=('etc/xdg/etlegacy/etmain/etl_server.cfg'
'etc/xdg/etlegacy/etmain/legacy.cfg'
'etc/xdg/etlegacy/etmain/campaigncycle.cfg'
'etc/xdg/etlegacy/etmain/lmscycle.cfg'
'etc/xdg/etlegacy/etmain/mapvotecycle.cfg'
'etc/xdg/etlegacy/etmain/objectivecycle.cfg')
install=etlegacy.install
cd "$_pkgbase-$pkgver"
# engine
make DESTDIR="$pkgdir/" install
# mod
rm -rf $pkgdir/usr/lib/$_pkgbase/legacy
# assets
ln -s /usr/share/enemy-territory/etmain/{pak0,pak1,pak2}.pk3 $pkgdir/usr/lib/$_pkgbase/etmain/
# doc
mkdir -p $pkgdir/usr/share/doc/$_pkgbase
install -m 644 docs/game/anticheat.html $pkgdir/usr/share/doc/$_pkgbase/
# license
mkdir -p $pkgdir/usr/share/licenses/$_pkgbase
# systemd
mkdir -p $pkgdir/etc/xdg/$_pkgbase/etmain
mkdir -p $pkgdir/usr/lib/systemd/system
install -m 644 misc/etlegacy.conf $pkgdir/etc/xdg/$_pkgbase/
install -m 644 misc/etlegacy.service.in $pkgdir/usr/lib/systemd/system/etlegacy-x86.service
# config
mv $pkgdir/usr/lib/$_pkgbase/etmain/*.cfg $pkgdir/etc/xdg/$_pkgbase/etmain/
ln -s /etc/xdg/$_pkgbase/etmain/{etl_server,legacy,{campaign,lms,mapvote,objective}cycle}.cfg $pkgdir/usr/lib/$_pkgbase/etmain/
# server
mkdir -p $pkgdir/var/lib/$_pkgbase-server
ln -s /etc/xdg/$_pkgbase/etmain $pkgdir/var/lib/$_pkgbase-server/
}
package_etlegacy32-mod() {
pkgdesc="Wolfenstein: Enemy Territory 2.60b compatible client/server (etlegacy mod, 32 bit)"
depends=('enemy-territory-data' 'geoip-database')
optdepends=('etlegacy-omnibot: artificial intelligence (AI) controlled opponent'
'geoip-database: GeoLite country geolocation database')
provides=('etlegacy-mod')
conflicts=('etlegacy-mod')
# mod
mkdir -p $pkgdir/usr/lib/$_pkgbase/legacy
install -m 644 $srcdir/etlegacy-v$pkgver-i386/legacy/legacy_v$pkgver.pk3 $pkgdir/usr/lib/$_pkgbase/legacy
install -m 644 $srcdir/etlegacy-v$pkgver-i386/legacy/qagame.mp.i386.so $pkgdir/usr/lib/$_pkgbase/legacy
# geoip
ln -s /usr/share/GeoIP/GeoIP.dat $pkgdir/usr/lib/$_pkgbase/legacy
}
Scan history
| Scanned at (UTC) | Severity | Rules |
|---|---|---|
| 2026-11-01 00:21:48 | Low | 2 |
| 2026-10-31 00:07:41 | Low | 2 |
| 2026-10-30 00:29:30 | Low | 2 |
| 2026-10-29 00:13:55 | Low | 2 |
| 2026-10-28 00:06:54 | Low | 2 |
| 2026-10-27 00:23:28 | Low | 2 |
| 2026-10-26 00:12:40 | Low | 2 |
| 2026-10-25 00:20:48 | Low | 2 |
| 2026-10-24 00:14:55 | Low | 2 |
| 2026-10-23 00:02:19 | Low | 2 |
| 2026-10-22 00:13:10 | Low | 2 |
| 2026-10-21 00:12:50 | Low | 2 |
| 2026-10-20 00:10:31 | Low | 2 |
| 2026-10-19 00:03:55 | Low | 2 |
| 2026-10-18 00:06:55 | Low | 2 |
| 2026-10-17 00:21:55 | Low | 2 |
| 2026-10-16 00:12:47 | Low | 2 |
| 2026-10-15 00:28:05 | Low | 2 |
| 2026-10-14 00:06:47 | Low | 2 |
| 2026-10-13 00:23:45 | Low | 2 |