X-Git-Url: http://git.freeside.biz/gitweb/?p=freeside.git;a=blobdiff_plain;f=rt%2Fbin%2Fwebmux.pl.in;h=87794896028cc5080a9dc0548b6f577fc4af8605;hp=2c8487c0d5cf2512833d3e4eb1a231540c29b474;hb=d39d52aac8f38ea9115628039f0df5aa3ac826de;hpb=c582e92888b4a5553e1b4e5214cf35217e4a0cf0 diff --git a/rt/bin/webmux.pl.in b/rt/bin/webmux.pl.in index 2c8487c0d..877948960 100644 --- a/rt/bin/webmux.pl.in +++ b/rt/bin/webmux.pl.in @@ -1,9 +1,15 @@ #!@PERL@ -# BEGIN LICENSE BLOCK +# {{{ BEGIN BPS TAGGED BLOCK # -# Copyright (c) 1996-2003 Jesse Vincent +# COPYRIGHT: +# +# This software is Copyright (c) 1996-2004 Best Practical Solutions, LLC +# # -# (Except where explictly superceded by other copyright notices) +# (Except where explicitly superseded by other copyright notices) +# +# +# LICENSE: # # 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 @@ -15,30 +21,46 @@ # 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. +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. # # -# END LICENSE BLOCK - +# CONTRIBUTION SUBMISSION POLICY: +# +# (The following paragraph is not intended to limit the rights granted +# to you to modify and distribute this software under the terms of +# the GNU General Public License and is only of importance to you if +# you choose to contribute your changes and enhancements to the +# community by submitting them to Best Practical Solutions, LLC.) +# +# By intentionally submitting any modifications, corrections or +# derivatives to this work, or any other work intended for use with +# Request Tracker, to Best Practical Solutions, LLC, you confirm that +# you are the copyright holder for those contributions and you grant +# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +# royalty-free, perpetual, license to use, copy, create derivative +# works based on those contributions, and sublicense and distribute +# those contributions and any derivatives thereof. +# +# }}} END BPS TAGGED BLOCK use strict; BEGIN { - $ENV{'PATH'} = '/bin:/usr/bin'; # or whatever you need + $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@ - eval { require Apache2; require Apache::compat } - if $ENV{'MOD_PERL'} and $ENV{'MOD_PERL'} =~ m{mod_perl/(?:2|1\.9)}; + eval { require Apache2; require APR::Table; require MasonX::Apache2Handler; 1 } or + eval { require Apache2; require Apache::compat; 1 } or die $@ + if $ENV{'MOD_PERL'} + and $ENV{'MOD_PERL'} =~ m{mod_perl/(?:2|1\.9)}; } -use lib ("@LOCAL_LIB_PATH@", "@RT_LIB_PATH@"); +use lib ( "@LOCAL_LIB_PATH@", "@RT_LIB_PATH@" ); use RT; package RT::Mason; @@ -46,29 +68,9 @@ 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 HTML::Mason; # brings in subpackages: Parser, Interp, etc. -use vars qw($Nobody $SystemUser $r); +use vars qw($Nobody $SystemUser $Handler $r); #This drags in RT's config.pm RT::LoadConfig(); @@ -76,6 +78,7 @@ RT::LoadConfig(); use Carp; { + package HTML::Mason::Commands; use vars qw(%session); @@ -100,27 +103,12 @@ use Carp; use CGI::Cookie; use Time::ParseDate; use HTML::Entities; + use HTML::Scrubber; + use Text::Quoted; } - -# 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; +use RT::Interface::Web::Handler; +$Handler = RT::Interface::Web::Handler->new(@RT::MasonParameters); sub handler { ($r) = @_; @@ -130,21 +118,23 @@ sub handler { RT::Init(); - # We don't need to handle non-text items - return -1 if defined( $r->content_type ) && $r->content_type !~ m|^text/|io; + # We don't need to handle non-text, non-xml items + return -1 if defined( $r->content_type ) && $r->content_type !~ m!(^text/|\bxml\b)!io; my %session; my $status; - eval { $status = $ah->handle_request($r) }; + eval { $status = $Handler->handle_request($r) }; if ($@) { - $RT::Logger->crit($@); + $RT::Logger->crit($@); } - undef (%session); + 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") ; + 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; }