Looking at the Apache Perl dev@ traffic, this is obviously popping up more and more often. It is no longer just a virus scanner issue, but a restriction to some common WinNT security models in terms of inspecting file permissions.
While modules should just be asking for APR_FSTAT_MIN scope most of the time, or ready to accept that APR_EINCOMPLETE had still provided sufficient answers, here we should probably start coping with less-than-complete Unix stat lookups on win32, because the new model won't let us ask for the group and world permissions. This can be fixed any way we like in apr-2... Suggestions on acceptable tweaks in our apr-1 compatibility model? On Tue, Jul 16, 2019, 08:10 Steve Hay <steve.m....@googlemail.com> wrote: > I'm in the process of preparing a new mod_perl release and have run > into a few test failures on Windows 10 which are caused by apr_stat() > sometimes returning APR_INCOMPLETE (70008). > > The call stack from mod_perl into libapr-1.dll is here: > > > libapr-1.dll!more_finfo(apr_finfo_t * finfo, const void * ufile, int > wanted, int whatfile) Line 403 C > libapr-1.dll!apr_file_info_get(apr_finfo_t * finfo, int wanted, > apr_file_t * thefile) Line 561 C > libapr-1.dll!resolve_ident(apr_finfo_t * finfo, const char * fname, > int wanted, apr_pool_t * pool) Line 161 C > libapr-1.dll!apr_stat(apr_finfo_t * finfo, const char * fname, int > wanted, apr_pool_t * pool) Line 618 C > Finfo.dll!mpxs_APR__Finfo_stat(interpreter * my_perl, const char * > fname, int wanted, sv * p_sv) Line 25 C > Finfo.dll!XS_APR__Finfo_stat(interpreter * my_perl, cv * cv) Line 43 C > > The return at the end of more_finfo() is > > return ((wanted & ~finfo->valid) ? APR_INCOMPLETE : APR_SUCCESS); > > in which I have wanted = 7536640 and finfo->valid = 1306992, so > (wanted & ~finfo->valid) = 6291456, so it returns APR_INCOMPLETE > (70008). > > The file in question is just a regular plain text file. In fact, it's > httpd's own httpd.conf file, which is generated by the mod_perl test > suite. > > I can reproduce the problem using a short perl program: > > use strict; > use warnings FATAL => 'all'; > > use APR::Finfo (); > use APR::Pool (); > use APR::Const -compile => qw(FINFO_NORM); > > my $file = "D:\\Dev\\Temp\\mp2\\mod_perl-2.0.11-rc1\\t\\conf\\httpd.conf"; > > my $pool = APR::Pool->new(); > my $finfo = APR::Finfo::stat($file, APR::Const::FINFO_NORM, $pool); > > Weirdly, if I simply make a copy of the httpd.conf file and point the > above program at that copy instead of the original then it works fine. > > I'm only getting this on Windows 10. If I run the same build of > everything on Windows 7 then everything is fine. I've built everything > from scratch with VS2019. I get the same behaviour with VS2015. > > I'm using apr-1.7.0 / apr-util-1.6.1. Is it worth trying the latest > dev versions? > > Does anyone have any ideas what could be going wrong here? > > I tried doing a build of APR with -DAPR_BUILD_TESTAPR=on but the build > fails: > > [ 54%] Linking C executable testall.exe > LINK Pass 1: command > > "C:\PROGRA~2\MICROS~1\201916~1.1\PROFES~1\VC\Tools\MSVC\1421~1.277\bin\Hostx64\x64\link.exe > /nologo @CMakeFiles\testall.dir\objects1.rsp /out:testall.exe > /implib:testall.lib /pdb:D:\Dev\Temp\test\apr-1.7.0\testall.pdb > /version:0.0 /machine:x64 /debug /INCREMENTAL /subsystem:console > libapr-1.lib ws2_32.lib mswsock.lib rpcrt4.lib kernel32.lib user32.lib > gdi32.lib winspool.lib shell32.lib ole32.lib oleaut32.lib uuid.lib > comdlg32.lib advapi32.lib /MANIFEST > /MANIFESTFILE:CMakeFiles\testall.dir/intermediate.manifest > CMakeFiles\testall.dir/manifest.res" failed (exit code 1120) with the > following output: > abts.c.obj : error LNK2001: unresolved external symbol testencode > testatomic.c.obj : error LNK2019: unresolved external symbol > __imp_apr_atomic_read64 referenced in function busyloop_read64 > testatomic.c.obj : error LNK2019: unresolved external symbol > __imp_apr_atomic_set64 referenced in function busyloop_set64 > testatomic.c.obj : error LNK2019: unresolved external symbol > __imp_apr_atomic_add64 referenced in function busyloop_add64 > testatomic.c.obj : error LNK2019: unresolved external symbol > __imp_apr_atomic_sub64 referenced in function busyloop_sub64 > testatomic.c.obj : error LNK2019: unresolved external symbol > __imp_apr_atomic_inc64 referenced in function busyloop_inc64 > testatomic.c.obj : error LNK2019: unresolved external symbol > __imp_apr_atomic_dec64 referenced in function busyloop_dec64 > testatomic.c.obj : error LNK2019: unresolved external symbol > __imp_apr_atomic_cas64 referenced in function busyloop_cas64 > testatomic.c.obj : error LNK2019: unresolved external symbol > __imp_apr_atomic_xchg64 referenced in function busyloop_xchg64 > testall.exe : fatal error LNK1120: 9 unresolved externals > NMAKE : fatal error U1077: '"C:\Program Files (x86)\Microsoft Visual > Studio\2019 > 16.1\Professional\Common7\IDE\CommonExtensions\Microsoft\CMake\CMake\bin\cmake.exe"' > : return code '0xffffffff' > Stop. > NMAKE : fatal error U1077: '"C:\Program Files (x86)\Microsoft Visual > Studio\2019 > 16.1\Professional\VC\Tools\MSVC\14.21.27702\bin\HostX64\x64\nmake.exe"' > : return code '0x2' > Stop. > NMAKE : fatal error U1077: '"C:\Program Files (x86)\Microsoft Visual > Studio\2019 > 16.1\Professional\VC\Tools\MSVC\14.21.27702\bin\HostX64\x64\nmake.exe"' > : return code '0x2' > Stop. >