summaryrefslogtreecommitdiff
path: root/rt/lib/RT/Interface
diff options
context:
space:
mode:
Diffstat (limited to 'rt/lib/RT/Interface')
-rwxr-xr-xrt/lib/RT/Interface/Email/Auth/GnuPG.pm9
-rw-r--r--rt/lib/RT/Interface/Email/Auth/MailFrom.pm7
-rw-r--r--rt/lib/RT/Interface/Email/Filter/SpamAssassin.pm7
-rw-r--r--rt/lib/RT/Interface/REST.pm30
-rw-r--r--rt/lib/RT/Interface/Web/Handler.pm5
-rw-r--r--rt/lib/RT/Interface/Web/Menu/Item.pm3
-rwxr-xr-xrt/lib/RT/Interface/Web/QueryBuilder.pm5
-rwxr-xr-xrt/lib/RT/Interface/Web/QueryBuilder/Tree.pm5
-rwxr-xr-xrt/lib/RT/Interface/Web/Standalone.pm9
9 files changed, 36 insertions, 44 deletions
diff --git a/rt/lib/RT/Interface/Email/Auth/GnuPG.pm b/rt/lib/RT/Interface/Email/Auth/GnuPG.pm
index cc15abb..6d43b96 100755
--- a/rt/lib/RT/Interface/Email/Auth/GnuPG.pm
+++ b/rt/lib/RT/Interface/Email/Auth/GnuPG.pm
@@ -250,14 +250,7 @@ sub VerifyDecrypt {
return $status, @res, @nested;
}
-eval "require RT::Interface::Email::Auth::GnuPG_Vendor";
-die $@
- if ( $@
- && $@ !~ qr{^Can't locate RT/Interface/Email/Auth/GnuPG_Vendor.pm} );
-eval "require RT::Interface::Email::Auth::GnuPG_Local";
-die $@
- if ( $@
- && $@ !~ qr{^Can't locate RT/Interface/Email/Auth/GnuPG_Local.pm} );
+RT::Base->_ImportOverlays();
1;
diff --git a/rt/lib/RT/Interface/Email/Auth/MailFrom.pm b/rt/lib/RT/Interface/Email/Auth/MailFrom.pm
index a90306b..be2f517 100644
--- a/rt/lib/RT/Interface/Email/Auth/MailFrom.pm
+++ b/rt/lib/RT/Interface/Email/Auth/MailFrom.pm
@@ -48,6 +48,8 @@
package RT::Interface::Email::Auth::MailFrom;
use RT::Interface::Email qw(ParseSenderAddressFromHead CreateUser);
+use strict;
+use warnings;
# This is what the ordinary, non-enhanced gateway does at the moment.
@@ -174,9 +176,6 @@ sub GetCurrentUser {
return ( $CurrentUser, 1 );
}
-eval "require RT::Interface::Email::Auth::MailFrom_Vendor";
-die $@ if ($@ && $@ !~ qr{^Can't locate RT/Interface/Email/Auth/MailFrom_Vendor.pm});
-eval "require RT::Interface::Email::Auth::MailFrom_Local";
-die $@ if ($@ && $@ !~ qr{^Can't locate RT/Interface/Email/Auth/MailFrom_Local.pm});
+RT::Base->_ImportOverlays();
1;
diff --git a/rt/lib/RT/Interface/Email/Filter/SpamAssassin.pm b/rt/lib/RT/Interface/Email/Filter/SpamAssassin.pm
index 6e99fec..0470e63 100644
--- a/rt/lib/RT/Interface/Email/Filter/SpamAssassin.pm
+++ b/rt/lib/RT/Interface/Email/Filter/SpamAssassin.pm
@@ -47,6 +47,8 @@
# END BPS TAGGED BLOCK }}}
package RT::Interface::Email::Filter::SpamAssassin;
+use strict;
+use warnings;
use Mail::SpamAssassin;
my $spamtest = Mail::SpamAssassin->new();
@@ -90,9 +92,6 @@ the floor; otherwise, it is passed on as normal.
=cut
-eval "require RT::Interface::Email::Filter::SpamAssassin_Vendor";
-die $@ if ($@ && $@ !~ qr{^Can't locate RT/Interface/Email/Filter/SpamAssassin_Vendor.pm});
-eval "require RT::Interface::Email::Filter::SpamAssassin_Local";
-die $@ if ($@ && $@ !~ qr{^Can't locate RT/Interface/Email/Filter/SpamAssassin_Local.pm});
+RT::Base->_ImportOverlays();
1;
diff --git a/rt/lib/RT/Interface/REST.pm b/rt/lib/RT/Interface/REST.pm
index ae1d6ad..7f6c9ac 100644
--- a/rt/lib/RT/Interface/REST.pm
+++ b/rt/lib/RT/Interface/REST.pm
@@ -51,13 +51,14 @@
package RT::Interface::REST;
use strict;
+use warnings;
use RT;
BEGIN {
use base 'Exporter';
use vars qw($VERSION @EXPORT);
- $VERSION = do { my @r = (q$Revision: 1.1.1.9 $ =~ /\d+/g); sprintf "%d."."%02d"x$#r, @r };
+ $VERSION = do { my @r = (q$Revision: 1.1.1.10 $ =~ /\d+/g); sprintf "%d."."%02d"x$#r, @r };
@EXPORT = qw(expand_list form_parse form_compose vpush vsplit);
}
@@ -160,8 +161,8 @@ sub form_parse {
pop @v while (@v && $v[-1] eq '');
# Strip longest common leading indent from text.
- my ($ws, $ls) = ("");
- foreach $ls (map {/^(\s+)/} @v[1..$#v]) {
+ my $ws = ("");
+ foreach my $ls (map {/^(\s+)/} @v[1..$#v]) {
$ws = $ls if (!$ws || length($ls) < length($ws));
}
s/^$ws// foreach @v;
@@ -189,8 +190,7 @@ sub form_parse {
}
push(@forms, [ $c, $o, $k, $e ]) if ($e || $c || @$o);
- my $l;
- foreach $l (keys %$k) {
+ foreach my $l (keys %$k) {
$k->{$l} = vsplit($k->{$l}) if (ref $k->{$l} eq 'ARRAY');
}
@@ -202,7 +202,7 @@ sub form_compose {
my ($forms) = @_;
my (@text, $form);
- foreach $form (@$forms) {
+ foreach my $form (@$forms) {
my ($c, $o, $k, $e) = @$form;
my $text = "";
@@ -216,7 +216,7 @@ sub form_compose {
elsif ($o) {
my (@lines, $key);
- foreach $key (@$o) {
+ foreach my $key (@$o) {
my ($line, $sp, $v);
my @values = (ref $k->{$key} eq 'ARRAY') ?
@{ $k->{$key} } :
@@ -225,7 +225,7 @@ sub form_compose {
$sp = " "x(length("$key: "));
$sp = " "x4 if length($sp) > 16;
- foreach $v (@values) {
+ foreach my $v (@values) {
$v = '' unless defined $v;
if ( $v =~ /\n/) {
$v =~ s/^/$sp/gm;
@@ -293,9 +293,9 @@ sub vpush {
# "Normalise" a hash key that's known to be multi-valued.
sub vsplit {
my ($val) = @_;
- my ($line, $word, @words);
+ my @words;
- foreach $line (map {split /\n/} (ref $val eq 'ARRAY') ? @$val : ($val||''))
+ foreach my $line (map {split /\n/} (ref $val eq 'ARRAY') ? @$val : ($val||''))
{
# XXX: This should become a real parser, ? la Text::ParseWords.
$line =~ s/^\s+//;
@@ -306,15 +306,7 @@ sub vsplit {
return \@words;
}
-eval "require RT::Interface::REST_Vendor";
-if ($@ && $@ !~ qr{^Can't locate RT/Interface/REST_Vendor.pm}) {
- die $@;
-};
-
-eval "require RT::Interface::REST_Local";
-if ($@ && $@ !~ qr{^Can't locate RT/Interface/REST_Local.pm}) {
- die $@;
-};
+RT::Base->_ImportOverlays();
1;
diff --git a/rt/lib/RT/Interface/Web/Handler.pm b/rt/lib/RT/Interface/Web/Handler.pm
index 772fab0..4bb6484 100644
--- a/rt/lib/RT/Interface/Web/Handler.pm
+++ b/rt/lib/RT/Interface/Web/Handler.pm
@@ -260,6 +260,11 @@ sub CleanupRequest {
%RT::Ticket::MERGE_CACHE = ( effective => {}, merged => {} );
+ # RT::System persists between requests, so its attributes cache has to be
+ # cleared manually. Without this, for example, subject tags across multiple
+ # processes will remain cached incorrectly
+ delete $RT::System->{attributes};
+
# Explicitly remove any tmpfiles that GPG opened, and close their
# filehandles.
File::Temp::cleanup;
diff --git a/rt/lib/RT/Interface/Web/Menu/Item.pm b/rt/lib/RT/Interface/Web/Menu/Item.pm
index 5d8e675..29fb13b 100644
--- a/rt/lib/RT/Interface/Web/Menu/Item.pm
+++ b/rt/lib/RT/Interface/Web/Menu/Item.pm
@@ -47,7 +47,8 @@
# END BPS TAGGED BLOCK }}}
package RT::Interface::Web::Menu::Item;
-
+use strict;
+use warnings;
sub new {
my $class = shift;
diff --git a/rt/lib/RT/Interface/Web/QueryBuilder.pm b/rt/lib/RT/Interface/Web/QueryBuilder.pm
index 6e462ec..09b9539 100755
--- a/rt/lib/RT/Interface/Web/QueryBuilder.pm
+++ b/rt/lib/RT/Interface/Web/QueryBuilder.pm
@@ -51,9 +51,6 @@ package RT::Interface::Web::QueryBuilder;
use strict;
use warnings;
-eval "require RT::Interface::Web::QueryBuilder_Vendor";
-die $@ if ($@ && $@ !~ qr{^Can't locate RT/Interface/Web/QueryBuilder_Vendor.pm});
-eval "require RT::Interface::Web::QueryBuilder_Local";
-die $@ if ($@ && $@ !~ qr{^Can't locate RT/Interface/Web/QueryBuilder_Local.pm});
+RT::Base->_ImportOverlays();
1;
diff --git a/rt/lib/RT/Interface/Web/QueryBuilder/Tree.pm b/rt/lib/RT/Interface/Web/QueryBuilder/Tree.pm
index f804e09..493ab44 100755
--- a/rt/lib/RT/Interface/Web/QueryBuilder/Tree.pm
+++ b/rt/lib/RT/Interface/Web/QueryBuilder/Tree.pm
@@ -285,9 +285,6 @@ sub ParseSQL {
return @results;
}
-eval "require RT::Interface::Web::QueryBuilder::Tree_Vendor";
-die $@ if ($@ && $@ !~ qr{^Can't locate RT/Interface/Web/QueryBuilder/Tree_Vendor.pm});
-eval "require RT::Interface::Web::QueryBuilder::Tree_Local";
-die $@ if ($@ && $@ !~ qr{^Can't locate RT/Interface/Web/QueryBuilder/Tree_Local.pm});
+RT::Base->_ImportOverlays();
1;
diff --git a/rt/lib/RT/Interface/Web/Standalone.pm b/rt/lib/RT/Interface/Web/Standalone.pm
index 91dbac3..3157e31 100755
--- a/rt/lib/RT/Interface/Web/Standalone.pm
+++ b/rt/lib/RT/Interface/Web/Standalone.pm
@@ -77,6 +77,15 @@ sub handle_request {
Module::Refresh->refresh if RT->Config->Get('DevelMode');
RT::ConnectToDatabase() unless RT->InstallMode;
+
+ # Each environment has its own way of handling .. and so on in paths,
+ # so RT consistently forbids such paths.
+ if ( $cgi->path_info =~ m{/\.} ) {
+ $RT::Logger->crit("Invalid request for ".$cgi->path_info." aborting");
+ print STDOUT "HTTP/1.0 400\r\n\r\n";
+ return RT::Interface::Web::Handler->CleanupRequest();
+ }
+
$self->SUPER::handle_request($cgi);
$RT::Logger->crit($@) if $@ && $RT::Logger;
warn $@ if $@ && !$RT::Logger;