You might find this link useful...

http://perl.apache.org/docs/general/perl_reference/perl_reference.html#Exception_Handling_for_mod_perl

Basically, fatalsToBrowser is "OK" to use, but it can be fraught with 
underlying issues that Matt outlines pretty well in the above URL. Has 
also given a talk on the subject at the last couple of O'Reilly conferences.

As an aside, at eXtropia, therer was a period of a couple years where we 
used fatalsToBrowser quite a bit. And everytime some incompatibility 
happened with mod_perl or some other advanced environment, we'd submit 
the bug (and sometimes a sample patch) to Lincoln Stein who has been 
very helpful.

However, Perl 5.6.0 in particular ruined all of that for us by changing 
the behavior of how fatalsToBrowser worked making eval {} tests 
impossible to use in your code. 5.6.1 fixed the problem, but there are 
MANY ISPs still running 5.6.0 and our support email volume skyrocketted.

So now when we give out scripts we provide a "debug" version of the CGI 
which calls the original CGI behind the scenes wrapped in an eval system 
that can do the same thing as fatals To Browser. When you are done 
"debugging", the intention is that you disable it by changing $DEBUG = 0 
instead of $DEBUG = 1 or you delete the debug script off your directory.

Generally, you shouldn't enable fatalsToBrowser in production as a 
general security practice.

The nice thing about making the debug into a separate script that calls 
the original CGI is that if you want to re-enable debugging output in 
production, your production users pointing to the main CGI script will 
not get any additional information. But you can still troubleshoot with 
the "debug" version of the URL which your production users won't have 
(unless they've been hacking around).

This is similar in concept to the fact that CGIWRAP has a debug and 
nondebug version I think. Or at least that's the inspiration for me to 
have written this. If you want this "debug" wrapper program, you can get 
it by downloading just about any app off our website such as "address 
book". If you download "address book", you will see "address_book.cgi 
and address_book_debug.cgi". The debug one can be easily modified to 
work with your CGI script and as far as I know has no weird Perl version 
problems like fatalsToBrowser.

Later,
   Gunther

Connie Chan wrote:

>Thanks everybody, I've made it =))
>
><code>
>package Die4CGI;
>use strict;
>
>$main::SIG{__DIE__} = \&Die4CGI::die;
>
>sub die
>{ my $dieMesg = shift; $dieMesg =~ s/ at .+$//;
>  my ($package, $file, $line) = caller;
>  $file =~ s/^C:\\Server\\Staff\\Connie\\Project\\onTry\\/\\/;
>  $file =~ s/\\/\//g;
>  print "Content-type: text/html\n\n";
>  print <<"    HTML";
>    # A lot of html #
>      Garfield said: $dieMesg happens at: $file line $line.<br>
>    # A lot of html #
>    HTML
>    ; exit(0);
>}
>
>1;
></code>
>
>So I can call it like the normal :
>
>use strict;
>use Die4CGI;
>
>my $file = 'somewhere/somewhere';
>open FH, $file or die "$!"; # prints what I want 
>
>Another fatalsToBrowser, simple and lovely!! ;)
>
>*BUT!! I still not understand, how can this overided
>the orgional "die" ? Why shouldn't I write as :
>open FH, $file or Die4CGI::die($!) ;
>
>Would anybody tell me more ? 
>
>Rgds,
>Connie
>
>
>
>  
>



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

Reply via email to