#!@PERL@ # BEGIN LICENSE BLOCK # # Copyright (c) 1996-2003 Jesse Vincent # # (Except where explictly superceded by other copyright notices) # # This work is made available to you under the terms of Version 2 of # the GNU General Public License. A copy of that license should have # been provided with this software, but in any event can be snarfed # from www.gnu.org. # # This work is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # Unless otherwise specified, all modifications, corrections or # extensions to this work which alter its source code become the # property of Best Practical Solutions, LLC when submitted for # inclusion in the work. # # # END LICENSE BLOCK use strict; BEGIN { $ENV{'PATH'} = '/bin:/usr/bin'; # or whatever you need $ENV{'CDPATH'} = '' if defined $ENV{'CDPATH'}; $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@"); use RT; package RT::Mason; 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; } else { require HTML::Mason::CGIHandler; } } use HTML::Mason; # brings in subpackages: Parser, Interp, etc. use vars qw($Nobody $SystemUser $r); #This drags in RT's config.pm RT::LoadConfig(); use Carp; { package HTML::Mason::Commands; use vars qw(%session); use RT::Tickets; use RT::Transactions; use RT::Users; use RT::CurrentUser; use RT::Templates; use RT::Queues; use RT::ScripActions; use RT::ScripConditions; use RT::Scrips; use RT::Groups; use RT::GroupMembers; use RT::CustomFields; use RT::CustomFieldValues; use RT::TicketCustomFieldValues; use RT::Interface::Web; use MIME::Entity; use Text::Wrapper; use CGI::Cookie; use Time::ParseDate; use HTML::Entities; } # Activate the following if running httpd as root (the normal case). # Resets ownership of all files created by Mason at startup. # Note that mysql uses DB for sessions, so there's no need to do this. unless ($RT::DatabaseType =~ /(mysql|Pg)/) { # Clean up our umask to protect session files umask(0077); if ( $CGI::MOD_PERL) { chown( Apache->server->uid, Apache->server->gid, [$RT::MasonSessionDir] ) if Apache->server->can('uid'); } # Die if WebSessionDir doesn't exist or we can't write to it stat($RT::MasonSessionDir); die "Can't read and write $RT::MasonSessionDir" unless ( ( -d _ ) and ( -r _ ) and ( -w _ ) ); } 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; eval { $status = $ah->handle_request($r) }; if ($@) { $RT::Logger->crit($@); } undef (%session); 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; } 1;