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.
>

Reply via email to