Control: tags 1001961 patch Christoph Biedl wrote...
> it seems recent changes in libc6 caused the stat() call in C applications
> to be expanded in a different way, a way fakeroot does not properly
> handle, resulting in the real user-id, not 0.
Fix appended (inline, not a patch) for better readability. Tested
successfully on the following archs: amd64, i386, armel, armhf, arm64;
with both fakeroot(-sysv) and fakeroot-tcp.
Cheers,
Christoph
Subject: Also wrap the "stat" library call
Author: Christoph Biedl <[email protected]>
Date: 2021-12-20
Bug-Debian: https://bugs.debian.org/1001961
Seems changes in glibc 2.33 caused the stat() function to be mapped
into a stat() library call instead of __xstat() as it used to be.
However, fakeroot does not wrap this, causing files to be reported
with the real owner, not 0 as expected.
The fix for this got more ugly than wished as the abstraction in
configure.ac would not allow wrapping both "stat" and "__xstat". So
enhance the search list capabilities with an optional symbol how the
wrapped function is named internally. Also hack the parser so
"state" gets actually probed.
Using "realstat" is not the best choice as it might be confusing,
but "statstat" seemed even worse.
--- a/configure.ac
+++ b/configure.ac
@@ -353,9 +353,13 @@
:>fakerootconfig.h.tmp
-for SEARCH in %stat f%stat l%stat f%statat %stat64 f%stat64 l%stat64
f%statat64 %mknod %mknodat; do
- FUNC=`echo $SEARCH|sed -e 's/.*%//'`
+for SEARCH in %stat s%tat@realstat f%stat l%stat f%statat %stat64 f%stat64
l%stat64 f%statat64 %mknod %mknodat; do
+ FUNC=`echo $SEARCH|sed -e 's/.*%// ; s/@.*//'`
PRE=`echo $SEARCH|sed -e 's/%.*//'`
+ PF_PRE=`echo $SEARCH|sed -e 's/.*@//'`
+ if test "$PF_PRE" = "$SEARCH" ; then
+ PF_PRE="${PRE}${FUNC}"
+ fi
FOUND=
for WRAPPED in __${PRE}x${FUNC} _${PRE}x${FUNC} __${PRE}${FUNC}13
${PRE}${FUNC}; do
AC_CHECK_FUNCS($WRAPPED,FOUND=$WRAPPED)
@@ -366,8 +370,8 @@
dnl for WRAPPED in _${PRE}${FUNC}; do
dnl FOUND=$WRAPPED
if test -n "$FOUND"; then
- PF=[`echo ${PRE}${FUNC}| tr '[a-z]' '[A-Z]'`]
- DEFINE_WRAP=[`echo wrap_${PRE}${FUNC}| tr '[a-z]' '[A-Z]'`]
+ PF=[`echo $PF_PRE | tr '[a-z]' '[A-Z]'`]
+ DEFINE_WRAP=[`echo wrap_${PF_PRE}| tr '[a-z]' '[A-Z]'`]
DEFINE_NEXT=[`echo wrap_${FOUND}| tr '[a-z]' '[A-Z]'`]
DEFINE_ARG=[`echo wrap_${FOUND}| tr '[a-z]' '[A-Z]'`]
AC_DEFINE_UNQUOTED(WRAP_${PF}, $FOUND)
@@ -509,6 +513,12 @@
#define TMP_STAT __astat
#define NEXT_STAT_NOARG next___astat
+#define WRAP_REALSTAT __astat
+#define WRAP_REALSTAT_QUOTE __astat
+#define WRAP_REALSTAT_RAW __astat
+#define TMP_REALSTAT __astat
+#define NEXT_REALSTAT_NOARG next___astat
+
#define WRAP_LSTAT_QUOTE __astat
#define WRAP_LSTAT __astat
#define WRAP_LSTAT_RAW __astat
signature.asc
Description: PGP signature

