Bug in xbps-create when a relative symlink point to an absolute symlink
Nessuno ha ancora preso questa issue.
Valutazione
- Difficoltà
- 4/5
- Tempo stimato
- 3-5 giorni
- Idoneità per principianti
- 38/100
Direzione di ricerca
Start by running the supplied reproduction script and inspect xbps-create's symlink handling around readlink and realpath. Compare the generated files.plist with the package contents, then verify that the corrected metadata lets xbps-remove remove both symlinks without truncating the target path.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Descrizione
Simple script to reproduce
#! /bin/sh
set -e
PKGVER=bug-1_1
ARCH=x86_64
DESC="Package to show a bug in xbps-create"
DESTDIR=/tmp/bug-1
mkdir -p $DESTDIR/etc/A
ln -s /etc/os-release $DESTDIR/etc/abs
ln -s ../abs $DESTDIR/etc/A/rel
xbps-create --arch "$ARCH" --desc "$DESC" --pkgver "$PKGVER" $DESTDIR
After running this script you'll end up with a badly formed package. Contents are ok:
$ tar tvf bug-1_1.x86_64.xbps
-rw-r--r-- root/root 503 1969-12-31 21:00 ./props.plist
-rw-r--r-- root/root 744 1969-12-31 21:00 ./files.plist
lrwxrwxrwx 0/0 0 2021-11-28 20:06 ./etc/abs -> /etc/os-release
lrwxrwxrwx 0/0 0 2021-11-28 20:06 ./etc/A/rel -> ../abs
But files.plist is wrong:
$ tar xOf bug-1_1.x86_64.xbps ./files.plist
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>dirs</key>
<array>
<dict>
<key>file</key>
<string>/etc</string>
</dict>
<dict>
<key>file</key>
<string>/etc/A</string>
</dict>
</array>
<key>links</key>
<array>
<dict>
<key>file</key>
<string>/etc/A/rel</string>
<key>mtime</key>
<integer>1638140801</integer>
<key>target</key>
<string>lease</string>
</dict>
<dict>
<key>file</key>
<string>/etc/abs</string>
<key>mtime</key>
<integer>1638140801</integer>
<key>target</key>
<string>/etc/os-release</string>
</dict>
</array>
</dict>
</plist>
What is going on I think is:
- the file in destdir
/etc/A/relis a symlink andreadlinkgives../abswhich is understood to be relative since it starts with. - the filename is then canonicalized (using realpath) to
/etc/os-release - since the symlink was thought to be relative, this is expected to be inside destdir
- hence we drop the destdir prefix
/tmp/bug-1, that's 10 characters so/etc/os-releaseminus 10 characters giveslease
This actually bit us in the wip sagemath package. The net result is that those symlinks that are badly reported in files.plistare not removed by xbps-remove.
I've since made a workaround in the sagemath package so this won't affect us, but it'd be nice to fix this logic (whiich is kind of hard to understand), at the very least check that the prefix for the link is indeed the destdir before droping it naively and complain if not.
All of this is affected by whether the canonicalized path is actually an existing file; that's why I chose /etc/os-release which should always exist (if this file is not there, the bug doesn't trigger).
- Lingua principale
- C
- Stelle
- 1.2k
- Fork
- 152
- Metriche di merge delle PR
- Nessuna PR unita negli ultimi 30g
Preparare l'ambiente
- Nessun Dockerfile né file Docker Compose
- Nessun modello di pull request
- Leggi la guida per i contributori
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Altre issue di void-linux/xbps
-
Difficoltà 1/5 Meno di un'ora Idoneità per principianti 68/100
void-linux/xbps#475 ·
-
Difficoltà 4/5 3-5 giorni Idoneità per principianti 45/100
void-linux/xbps#701 ·
-
Difficoltà 4/5 3-5 giorni Idoneità per principianti 55/100
void-linux/xbps#700 ·
-
xbps-query -RX repository overridesForse già presa @outofsyncrs l’ha presa 31 giorni fa. Apertabug
Difficoltà 3/5 1-2 giorni Idoneità per principianti 45/100
void-linux/xbps#696 ·
-
Difficoltà 3/5 1-2 giorni Idoneità per principianti 52/100
void-linux/xbps#695 · 7 commenti ·
Tutte le issue di void-linux/xbps
Issue simili
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 72/100
I maintainer di solito rispondono entro 1 giorno
-
Policy query leaks host primary block (BSL_PrimaryBlock_deinit skipped) on two early-exit pathsAperta
Difficoltà 2/5 1-3 ore Idoneità per principianti 72/100
NASA-AMMOS/BSL#355 ·
I maintainer di solito rispondono entro 1 giorno
-
bug
Difficoltà 2/5 1-3 ore Idoneità per principianti 78/100
arancormonk/dsd-neo#660 ·
I maintainer di solito rispondono entro 1 giorno
-
[Bug]: remote-ls --updates reports up-to-date OCI refs because it ignores deployed Alt-idForse già presa @Joao-kouznetz l’ha presa oggi. Aperta
Difficoltà 2/5 1-3 ore Idoneità per principianti 72/100
I maintainer di solito rispondono entro 1 giorno
-
#242 leftovers: dated narrative and shas in the social-features test planForse già presa Una pull request collegata a questa issue è aperta o già unita. Aperta
Difficoltà 2/5 1-3 ore Idoneità per principianti 72/100
EchoTools/nevr-runtime#264 ·
I maintainer di solito rispondono entro 1 giorno