There's one thing, it might be important, and might be not.  The 'Alias'
setting didn't work on my setup, so instead of finding what's wrong with Alias,
I changed the config so the setup has two different but identical files perform
mod_perl and cgi requests.  So this section was (to be pedantic) different:

> +<IfModule mod_alias.c>
> +    Alias /stdin_override/mod_perl @ServerRoot@/cgi-bin/stdin.pl
> +    Alias /stdin_override/cgi      @ServerRoot@/cgi-bin/stdin.pl
> +</IfModule>
> +
> +<Location /stdin_override/mod_perl>
> +    SetHandler perl-script
> +    PerlResponseHandler ModPerl::Registry
> +    PerlOptions +ParseHeaders
> +    Options +ExecCGI
> +</Location>
> +
> +<Location /stdin_override/cgi>
> +    SetHandler cgi-script
> +    Options +ExecCGI
> +</Location>

Instead it was

+<Location /cgi-bin/stdin_mod_perl.pl>
+    SetHandler perl-script
+    PerlResponseHandler ModPerl::Registry
+    PerlOptions +ParseHeaders
+    Options +ExecCGI
+</Location>
+
+<Location /cgi-bin/stdin_cgi.pl>
+    SetHandler cgi-script
+    Options +ExecCGI
+</Location>

where stdin_cgi.pl and stdin_mod_perl.pl are copies of stdin.pl .
May I ask you to try that altered setup?

> Looking at modperl_io_perlio_restore_stdin however, isn't this where the
> real problem lies? It does restore Perl's stdin handle back to it's original
> state, but I don't see where/how that code would guarantee STDIN to re-acquire
> the same FD. Isn't that the bug ?

The problem is that modperl_io_perlio_restore_stdin() is called much later,
after possibly several further mod_perl requests are executed. I agree that
making sure to reassign FD to 0 (and stdout etc) would be a good idea, however,
by the time when the cgi script in question is being run, the FD 0 would stay
closed disregarding of whether modperl_io_perlio_restore_stdin() does the right
thing or not. 

> And avoiding the close() in the sugested patch would still need to undo
> the override in modperl_io_perlio_restore_stdin() to allow the real, 
> underlying
> STDIN to be eventially closed, no ?

I do not understand that need to close FD 0 at all. All the overriding business
is done here so that PerlIO-level STDIN glob would be something else than FD 0,
which is fine. My point is that FD 0 is a shared resource within apache process
space, and it is neither mod_perl nor anyone else's business to close it.


-- 
Sincerely,
        Dmitry Karasik


---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to