You are viewing a plain text version of this content. The canonical link for it is here.
Posted to asp@perl.apache.org by Jonathan Dixon <di...@lycos.com> on 2005/04/24 03:59:38 UTC

Problem with PDF files

I am running a website where I want to control access to the various files.  I have the directory setup in httpd.conf with:

<Files ~ (\.asp)>
   SetHandler  perl-script
   PerlHandler Apache::ASP
   PerlSetVar  Global /storage/t212
   PerlSetVar  StateDir /tmp/asp
   PerlSetVar  RequestBinaryRead On
</Files>
<Files ~ (\.html)>
   SetHandler  perl-script
   PerlHandler Apache::ASP
   PerlSetVar  Global /storage/t212
   PerlSetVar  StateDir /tmp/asp
   PerlSetVar  RequestBinaryRead On
</Files>
<Files ~ (\.doc)>
   SetHandler  perl-script
   PerlHandler Apache::ASP
   PerlSetVar  Global /storage/t212
   PerlSetVar  StateDir /tmp/asp
   PerlSetVar  RequestBinaryRead On
</Files>
<Files ~ (\.pdf)>
   SetHandler  perl-script
   PerlHandler Apache::ASP
   PerlSetVar  Global /storage/t212
   PerlSetVar  StateDir /tmp/asp
   PerlSetVar  RequestBinaryRead On
</Files>

and the global.asa file that includes:

sub Script_OnStart {
    $Basename = basename($0);
    $Basename = 'index.asp' unless $Basename;
    $Logged = $Session->{"Logged"};

    $Response->Redirect("Login.asp")
	unless ($Logged or $Basename eq 'Login.asp');

    if ($Request->Form('logout')) {
	$Session->Abandon();
	$Response->Redirect("Login.asp");
    }

    if ($Basename =~ /\.css$/) {
	$Response->{ContentType} = 'text/css';
	open(FILE, $Basename) or die "File not found";
	my $temp = $/;
	$/ = undef;
	my $data = <FILE>;
	$Response->Clear;
	$Response->AddHeader('Content-Length', length $data);
	$Response->Write($data);
	$/ = $temp;
	$Response->End;
    }	

    if ($Basename =~ /\.doc$/) {
	$Response->{ContentType} = 'application/msword';
	open(FILE, $Basename) or die "File not found: $Basename";
	binmode FILE;
	my $temp = $/;
	$/ = undef;
	my $data = <FILE>;
	$Response->Clear;
	$Response->AddHeader('Content-Length', length $data);
	$Response->BinaryWrite($data);
	$/ = $temp;
	$Response->End;
    }
    if ($Basename =~ /\.pdf$/i) {
	$Response->{ContentType} = 'application/pdf';
	open(FILE, $Basename) or die "File not found: $Basename";
	binmode FILE;
	my $temp = $/;
	$/ = undef;
	my $data = <FILE>;
	$Response->Clear;
	$Response->AddHeader('Content-Length', length $data);
	$Response->BinaryWrite($data);
	$/ = $temp;
	$Response->End;
    }
    if ($Basename =~ /\.html$/) {
	$Response->{ContentType} = 'text/html';
	open(FILE, $Basename) or die "File not found";
	my $data = <FILE>;
	$Response->Clear;
	$Response->AddHeader('Content-Length', length $data);
	$Response->Write($data);
	$Response->End;
    }

    $Title = "$Name " . $Titles{$Basename};
    $Response->Include('header.inc');

    if ($Logged) {
	$Admin = $Session->{Admin};
	$User = $Session->{User};
	$UniqueID = $Session->{UID};
	$Perm = $Session->{Perm};
	my $Hash = $Session->{Hash};
	my $junk = $UniqueID . $User . $Perm;
	unless ($Hash == crypt($junk,$Hash)) {
	    $Session->{"Logged"} = 0;
	    $Response->Redirect("Login.asp");
	}
    }
}


This works well for the .doc, .css, .html, and .asp files, but the pdf files always crash with an error along the lines of:
[error] error compiling blah.pdf: Unrecognized character \\xF9 at (eval 37) line 265. <--> , /usr/lib/perl5/site_perl/5.8.3/Apache/ASP.pm line 1462

In fact, even if I change the global.asa script to die at the beginning of Script_OnStart, I still get the same error for PDF files (unlike the other file types, where I get the error from the die command).  This indicates to me that the PDF file is getting processed somehow differently from the other file types.

What am I overlooking here?  How do I get my site to follow the global.asa directives for the PDF file just the same as it does for the DOC files?

Thanks,

Jon Dixon
dixonjon@lycos.com
http://dixonjon.tripod.com/
-- 
_______________________________________________
NEW! Lycos Dating Search. The only place to search multiple dating sites at once.
http://datingsearch.lycos.com


---------------------------------------------------------------------
To unsubscribe, e-mail: asp-unsubscribe@perl.apache.org
For additional commands, e-mail: asp-help@perl.apache.org


Re: Problem with PDF files

Posted by Joshua Chamas <jo...@chamas.com>.
Jonathan Dixon wrote:
> I am running a website where I want to control access to the various files.  I have the directory setup in httpd.conf with:
...
> 
> This works well for the .doc, .css, .html, and .asp files, but the pdf files always crash with an error along the lines of:
> [error] error compiling blah.pdf: Unrecognized character \\xF9 at (eval 37) line 265. <--> , /usr/lib/perl5/site_perl/5.8.3/Apache/ASP.pm line 1462
> 
> In fact, even if I change the global.asa script to die at the beginning of Script_OnStart, I still get the same error for PDF files (unlike the other file types, where I get the error from the die command).  This indicates to me that the PDF file is getting processed somehow differently from the other file types.
> 
> What am I overlooking here?  How do I get my site to follow the global.asa directives for the PDF file just the same as it does for the DOC files?
> 

The others gave you great work arounds.  If you really had to make this work, you might
try using the Script_OnParse event instead of Script_OnStart.  Script_OnStart occurs
after the script has been compiled, but just before execution.  With Script_OnParse,
you might rewrite the script to do something like a read/binary write of the file
you are dealing with.

Regards,

Josh

---------------------------------------------------------------------
To unsubscribe, e-mail: asp-unsubscribe@perl.apache.org
For additional commands, e-mail: asp-help@perl.apache.org


Re: Problem with PDF files

Posted by Warren Young <wa...@etr-usa.com>.
Jonathan Dixon wrote:

> <Files ~ (\.pdf)>
>    SetHandler  perl-script
>    PerlHandler Apache::ASP
>    PerlSetVar  Global /storage/t212
>    PerlSetVar  StateDir /tmp/asp
>    PerlSetVar  RequestBinaryRead On
> </Files>

This declares *.pdf files as being ASP files.  Apache::ASP is trying to 
interpret them directly!

What you want to do cannot be accomplished with this mechanism.  Try 
looking at the various Apache modules.

---------------------------------------------------------------------
To unsubscribe, e-mail: asp-unsubscribe@perl.apache.org
For additional commands, e-mail: asp-help@perl.apache.org