Bug#935290: some more digging
Robert Lemmen
robertle at semistable.com
Tue Sep 10 22:13:39 BST 2019
I did some more digging on this, no real solution but perhaps its' worth
anything:
- our problem can be tracked down to src/io/fileops.c in moarvm, where
MVM_file_is_writable tries to work out whether the file can be written
to, which it decides that it can't because th call into libuv returns
uid 1234 on my box rather than 0 as expected
- libuv 1.30.1 relative to 1.24 changes src/unix/fs.c and switches to
callgin statx() rather than stat()
- putting some more debug into libuv shows that indeed statx() returns
uid 1234, a call to stat() directly afterwards does correctly return 0
- even outside libuv and moar, the simple code below shows the two different
uid values when executed against
/build/rakudo-2019.07.1/debian/rakudo/usr/lib/perl6/core, 1234 from
statx() and 0 from stat()
- doing a pbuilder login, followed by mkdir and then calling the code
below does however *not* cause the problem, we get 0 in both cases
- calling the code below during build on a file in the build directory
shows the same problem as the .../core
- calling the code below on during build / does not show the problem
- calling against /build/ and anything below does exhibit the problem
- I would therefore assume that git-pbuilder does something when
creating/mouinting /build/ that throws statx() off track, but not
stat(), which gets exposed by a newer libuv1.
- this concludes my digging for today, if anyone knows where that
/build/ directory gets created when running gbp buildpackage --git-pbuilder
then please let me know!!
regards robert
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
#include <fcntl.h>
#include <stdio.h>
int main(int argc, char **argv) {
printf("statx test against %s...\n", argv[1]);
struct statx sbuf;
int ret = statx(AT_FDCWD, argv[1], AT_STATX_SYNC_AS_STAT, 0xFFF, &sbuf);
printf("returned %i\n", ret);
printf("uid is %i\n", sbuf.stx_uid);
struct stat sbuf2;
ret = stat(argv[1], &sbuf2);
printf("stat returned %i\n", ret);
printf("stat uid is %i\n", sbuf2.st_uid);
return 0;
}
--
Robert Lemmen http://www.semistable.com
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 833 bytes
Desc: not available
URL: <http://alioth-lists.debian.net/pipermail/pkg-rakudo-devel/attachments/20190910/6e1a4601/attachment.sig>
More information about the Pkg-rakudo-devel
mailing list