import of rt 3.0.9
[freeside.git] / rt / bin / webmux.pl.in
index 12aad85..dca5705 100644 (file)
@@ -31,6 +31,7 @@ BEGIN {
     $ENV{'SHELL'}  = '/bin/sh' if defined $ENV{'SHELL'};
     $ENV{'ENV'}    = '' if defined $ENV{'ENV'};
     $ENV{'IFS'}    = '' if defined $ENV{'IFS'};
+    @ORACLE_ENV_PREF@
 }
 
 use lib ("@LOCAL_LIB_PATH@", "@RT_LIB_PATH@");
@@ -42,6 +43,17 @@ use CGI qw(-private_tempfiles);    #bring this in before mason, to make sure we
                                    #set private_tempfiles
 
 BEGIN {
+    if ($mod_perl::VERSION >= 1.9908) {
+       require Apache::RequestUtil;
+       no warnings 'redefine';
+       my $sub = *Apache::request{CODE};
+       *Apache::request = sub {
+           my $r;
+           eval { $r = $sub->('Apache'); };
+           # warn $@ if $@;
+           return $r;
+       };
+    }
     if ($CGI::MOD_PERL) {
        require HTML::Mason::ApacheHandler;
     }
@@ -104,21 +116,32 @@ if ( $CGI::MOD_PERL)  {
        unless ( ( -d _ ) and ( -r _ ) and ( -w _ ) );
 }
 
-my $ah = &RT::Interface::Web::NewApacheHandler() if $CGI::MOD_PERL;
+my $ah = &RT::Interface::Web::NewApacheHandler(@RT::MasonParameters) if $CGI::MOD_PERL;
 
 sub handler {
     ($r) = @_;
 
+    local $SIG{__WARN__};
+    local $SIG{__DIE__};
+
     RT::Init();
 
     # We don't need to handle non-text items
     return -1 if defined( $r->content_type ) && $r->content_type !~ m|^text/|io;
 
     my %session;
-    my $status = $ah->handle_request($r);
+    my $status;
+    eval { $status = $ah->handle_request($r) };
+    if ($@) {
+       $RT::Logger->crit($@);
+    }
+
     undef (%session);
 
-    $RT::Logger->crit("Transaction not committed. Usually indicates a software fault. Data loss may have occurred") if $RT::Handle->TransactionDepth;
+    if ($RT::Handle->TransactionDepth) {
+       $RT::Handle->ForceRollback;
+       $RT::Logger->crit("Transaction not committed. Usually indicates a software fault. Data loss may have occurred") ;
+    }
     return $status;
 }