You are viewing a plain text version of this content. The canonical link for it is here.
Posted to modperl@perl.apache.org by speeves <sp...@unt.edu> on 2003/07/16 00:09:15 UTC
modperl2 Apache::HTTP_FORBIDDEN and Apache::HTTP_INTERNAL_SERVER_ERROR
implemented?
Hi!
Just wondering if Apache::HTTP_FORBIDDEN and
Apache::HTTP_INTERNAL_SERVER_ERROR have been implemented? I have been
trying to port Apache::AuthenNTLM, and keep getting:
[Tue Jul 15 16:46:08 2003] [error] failed to resolve handler
`Apache::AuthenNTLM'
[Tue Jul 15 16:46:08 2003] [error] [client 192.168.1.2] Bareword
"Apache::HTTP_FORBIDDEN" not allowed while "strict subs" in u
se at /usr/local/lib/perl/5.6.1/Apache/AuthenNTLM.pm line 593.
Bareword "Apache::HTTP_INTERNAL_SERVER_ERROR" not allowed while "strict
subs" in use at /usr/local/lib/perl/5.6.1/Apache/Authe
nNTLM.pm line 597.
Bareword "Apache::HTTP_INTERNAL_SERVER_ERROR" not allowed while "strict
subs" in use at /usr/local/lib/perl/5.6.1/Apache/Authe
nNTLM.pm line 632.
BEGIN not safe after errors--compilation aborted at
/usr/local/lib/perl/5.6.1/Apache/AuthenNTLM.pm line 671.
Compilation failed in require at (eval 10) line 3.
in the error_log. I have other constants that are imported from
Apache::Const, so do not think that it is a problem with scope... Here
is the code:
line 593 -- return $self->{ntlmauthoritative} ? (defined($nonce) ? (MP2
? Apache::HTTP_FORBIDDEN : Apache::Constants::HTTP_
FORBIDDEN) : (MP2 ? Apache::HTTP_INTERNAL_SERVER_ERROR :
Apache::Constants::HTTP_INTERNAL_SERVER_ERROR)) : (MP2 ? Apache::DE
CLINED : Apache::Constants::DECLINED) ;
and
line 632 --- # return MP2 ? Apache::HTTP_INTERNAL_SERVER_ERROR :
Apache::Constants::HTTP_INTERNAL_SERVER_ERROR ;
If you need more, let me know.
thanks,
speeves
cws
Re: modperl2 Apache::HTTP_FORBIDDEN... [long post]
Posted by Shannon Eric Peevey <sp...@unt.edu>.
Stas Bekman wrote:
> Shannon Eric Peevey wrote:
>
>>>
>>>
>>>> use constant MP2 => ($mod_perl::VERSION >= 1.99);
>>>>
>>>> # test for the version of mod_perl, and use the appropriate libraries
>>>> BEGIN {
>>>> if (MP2) {
>>>> require Apache::Const;
>>>> require Apache::Access;
>>>> require Apache::Connection;
>>>> require Apache::Log;
>>>> require Apache::RequestRec;
>>>> require Apache::RequestUtil;
>>>> apache::Const->import(-compile =>
>>>>
>>>
>>>
>>> ^^^^^^^^^^^^^
>>> This might be a typo, but if you change that to Apache::Const
>>> (upper case 'A'), does that help?
>>>
>>>
>>>
>> Fantastic!!! I have been staring at all of the wrong code for way
>> too long... :P
>>
>> Thanks for taking the time to find my error :)
>>
>> I should have a working version by the beginning of next week.
>
>
> I think that this still won't work. The reason:
>
> Apache::Const->import(-compile =>
> 'HTTP_UNAUTHORIZED','HTTP_INTERNAL_SERVER_ERROR','DECLINED','HTTP_FORBIDDEN','OK');
>
>
> only compiles the constants, it doesn't import them. Drop the
> '-compile =>' part, and then they will be imported. -compile tell
> Apache::Const to not import the constants but to compile them.
>
It did work, in fact. (I was just snoozing on the job... :P )
Thanks, Randy!
speeves
cws
Re: modperl2 Apache::HTTP_FORBIDDEN... [long post]
Posted by Stas Bekman <st...@stason.org>.
Shannon Eric Peevey wrote:
>>
>>
>>> use constant MP2 => ($mod_perl::VERSION >= 1.99);
>>>
>>> # test for the version of mod_perl, and use the appropriate libraries
>>> BEGIN {
>>> if (MP2) {
>>> require Apache::Const;
>>> require Apache::Access;
>>> require Apache::Connection;
>>> require Apache::Log;
>>> require Apache::RequestRec;
>>> require Apache::RequestUtil;
>>> apache::Const->import(-compile =>
>>>
>>
>> ^^^^^^^^^^^^^
>> This might be a typo, but if you change that to Apache::Const
>> (upper case 'A'), does that help?
>>
>>
>>
> Fantastic!!! I have been staring at all of the wrong code for way too
> long... :P
>
> Thanks for taking the time to find my error :)
>
> I should have a working version by the beginning of next week.
I think that this still won't work. The reason:
Apache::Const->import(-compile =>
'HTTP_UNAUTHORIZED','HTTP_INTERNAL_SERVER_ERROR','DECLINED','HTTP_FORBIDDEN','OK');
only compiles the constants, it doesn't import them. Drop the '-compile =>'
part, and then they will be imported. -compile tell Apache::Const to not
import the constants but to compile them.
--
__________________________________________________________________
Stas Bekman JAm_pH ------> Just Another mod_perl Hacker
http://stason.org/ mod_perl Guide ---> http://perl.apache.org
mailto:stas@stason.org http://use.perl.org http://apacheweek.com
http://modperlbook.org http://apache.org http://ticketmaster.com
Re: modperl2 Apache::HTTP_FORBIDDEN... [long post]
Posted by Shannon Eric Peevey <sp...@unt.edu>.
>
>
>>use constant MP2 => ($mod_perl::VERSION >= 1.99);
>>
>># test for the version of mod_perl, and use the appropriate libraries
>>BEGIN {
>> if (MP2) {
>> require Apache::Const;
>> require Apache::Access;
>> require Apache::Connection;
>> require Apache::Log;
>> require Apache::RequestRec;
>> require Apache::RequestUtil;
>> apache::Const->import(-compile =>
>>
>>
> ^^^^^^^^^^^^^
>This might be a typo, but if you change that to Apache::Const
>(upper case 'A'), does that help?
>
>
>
Fantastic!!! I have been staring at all of the wrong code for way too
long... :P
Thanks for taking the time to find my error :)
I should have a working version by the beginning of next week.
speeves
cws
Re: modperl2 Apache::HTTP_FORBIDDEN... [long post]
Posted by Randy Kobes <ra...@theoryx5.uwinnipeg.ca>.
On Thu, 17 Jul 2003, Shannon Eric Peevey wrote:
> > Have you imported them?
> > use Apache::Const compile ->qw(Apache::HTTP_FORBIDDEN);
> > All the available Apache:: constants are listed here:
> > http://perl.apache.org/docs/2.0/api/Apache/Const.html
>
> I have included the bare minimum of the code from the module,
> (Apache::AuthenNTLM). It is still acting as if I have not
> imported the modules, but I have changed "require" to "use",
> moved the "use" statements into various places of the module
> to see if they would catch it, and nothing doing... I am at
> the end of my wits. If someone would have a minute to see if
> they can see why the Constants within the "sub handler" would
> not be found, (though they are imported), that would be a great
> thanks and help :) I am running apache 2.0.46 and mod_perl
> 1.99_09, perl 5.6.1 on a Debian machine.
>
> package Apache::AuthenNTLM ;
[ .. ]
> use constant MP2 => ($mod_perl::VERSION >= 1.99);
>
> # test for the version of mod_perl, and use the appropriate libraries
> BEGIN {
> if (MP2) {
> require Apache::Const;
> require Apache::Access;
> require Apache::Connection;
> require Apache::Log;
> require Apache::RequestRec;
> require Apache::RequestUtil;
> apache::Const->import(-compile =>
^^^^^^^^^^^^^
This might be a typo, but if you change that to Apache::Const
(upper case 'A'), does that help?
--
best regards,
randy kobes
Re: modperl2 Apache::HTTP_FORBIDDEN... [long post]
Posted by Shannon Eric Peevey <sp...@unt.edu>.
>
> Have you imported them?
>
> use Apache::Const compile ->qw(Apache::HTTP_FORBIDDEN);
>
> All the available Apache:: constants are listed here:
>
> http://perl.apache.org/docs/2.0/api/Apache/Const.html
>
>
>
Hi!
I have included the bare minimum of the code from the module,
(Apache::AuthenNTLM). It is still acting as if I have not imported the
modules, but I have changed "require" to "use", moved the "use"
statements into various places of the module to see if they would catch
it, and nothing doing... I am at the end of my wits. If someone would
have a minute to see if they can see why the Constants within the "sub
handler" would not be found, (though they are imported), that would be a
great thanks and help :) I am running apache 2.0.46 and mod_perl
1.99_09, perl 5.6.1 on a Debian machine.
Thanks in advance,
speeves
cws
package Apache::AuthenNTLM ;
use strict ;
use vars qw{$cache $VERSION %msgflags1 %msgflags2 %msgflags3 %invflags1
%invflags2 %invflags3 $debug} ;
use warnings ;
no warnings 'redefine';
$VERSION = 0.24 ;
$debug = 0 ;
$cache = undef ;
use MIME::Base64 () ;
use Authen::Smb 0.95 ;
use Socket ;
############################################
# here is where we start the new code....
############################################
use mod_perl ;
# use Apache::Constants qw(:common);
# setting the constants to help identify which version of mod_perl
# is installed
use constant MP2 => ($mod_perl::VERSION >= 1.99);
# test for the version of mod_perl, and use the appropriate libraries
BEGIN {
if (MP2) {
require Apache::Const;
require Apache::Access;
require Apache::Connection;
require Apache::Log;
require Apache::RequestRec;
require Apache::RequestUtil;
apache::Const->import(-compile =>
'HTTP_UNAUTHORIZED','HTTP_INTERNAL_SERVER_ERROR','DECLINED','HTTP_FORBIDDEN','OK');
} else {
require Apache::Constants;
Apache::Constants->import('HTTP_UNAUTHORIZED','HTTP_INTERNAL_SERVER_ERROR','DECLINED','HTTP_FORBIDDEN','OK');
}
}
##################### end modperl code ######################
sub handler : method # ($$)
{
my ($class, $r) = @_ ;
my $type ;
my $nonce = '' ;
my $self ;
my $conn = $r -> connection ;
my $connhdr = $r -> header_in ('Connection') ;
my $fh = select (STDERR) ;
$| = 1 ;
select ($fh) ;
my ($addr, $port) = sockaddr_in ($conn -> remote_addr) ;
print STDERR "[$$] AuthenNTLM: Start NTLM Authen handler pid = $$,
connection = $$conn conn_http_hdr = $connhdr main = " . ($r -> main) .
" cuser = " . $conn -> user .
' remote_ip = ' . $conn -> remote_ip . " remote_port
= " . unpack('n', $port) . ' remote_host = <' . $conn -> remote_host .
"> version = $VERSION\n" if ($debug) ;
# we cannot attach our object to the connection record. Since in
# Apache 1.3 there is only one connection at a time per process
# we can cache our object and check if the connection has changed.
# The check is done by slightly changing the remote_host member, which
# persists as long as the connection does
# This has to be reworked to work with Apache 2.0
if (ref ($cache) ne $class || $$conn != $cache -> {connectionid} ||
$conn -> remote_host ne $cache->{remote_host})
{
$conn -> remote_host ($conn -> remote_host . ' ') ;
$self = {connectionid => $$conn, remote_host => $conn ->
remote_host} ;
bless $self, $class ;
$cache = $self ;
print STDERR "[$$] AuthenNTLM: Setup new object\n" if ($debug) ;
}
else
{
$self = $cache ;
print STDERR "[$$] AuthenNTLM: Object exists user =
$self->{userdomain}\\$self->{username}\n" if ($debug) ;
if ($self -> {ok})
{
$conn -> user($self->{mappedusername}) ;
# we accept the user because we are on the same connection
$type = $self -> get_msg ($r);
my $content_len = $r -> header_in('content-length') ;
my $method = $r -> method ;
print STDERR "[$$] AuthenNTLM: Same connection pid = $$,
connection = $$conn cuser = " .
$conn -> user . ' ip = ' . $conn ->
remote_ip . ' method = ' . $method . ' Content-Length = ' .
$content_len . ' type = ' . $type . "\n"
if ($debug) ;
# IE (5.5, 6.0, probably others) can send a type 1 message
# after authenticating on the same connection. This is a
# problem for POST messages, because IE also sends a
# "Content-length: 0" with no POST data.
if ($method eq 'GET' || $method eq 'HEAD' || $method eq
'OPTION' || $method eq 'DELETE' ||
$content_len > 0 || $type == 3)
{
print STDERR "[$$] AuthenNTLM: OK because same
connection\n" if ($debug) ;
return MP2 ? Apache::OK : Apache::Constants::OK ;
}
}
}
$self -> get_config ($r) ;
$type = $self -> get_msg ($r) if (!$type) ;
if (!$type)
{
$self -> {lock} = undef ; # reset lock in case anything has gone
wrong
if (!$self->{ntlmauthoritative})
{ # see if we have any header
my $auth_line = $r -> header_in ($r->proxyreq ?
'Proxy-Authorization' : 'Authorization') ;
if ($auth_line)
{
MP2 ? $r->log_error('Bad/Missing NTLM Authorization
Header for ' . $r->uri . '; DECLINEing because we are not authoritative'
) : $r->log_reason('Bad/Missing NTLM Authorization Header for ' .
$r->uri . '; DECLINEing because we are not authoritative' ) ;
return MP2 ? Apache::DECLINED :
Apache::Constants::DECLINED ;
}
}
MP2 ? $r->log_error('Bad/Missing NTLM/Basic Authorization
Header for ' . $r->uri) : $r->log_reason('Bad/Missing NTLM/Basic
Authorization Header for ' . $r->uri) ;
my $hdr = $r -> err_headers_out ;
$hdr -> add ($r->proxyreq ? 'Proxy-Authenticate' :
'WWW-Authenticate', 'NTLM') if ($self -> {authntlm}) ;
$hdr -> add ($r->proxyreq ? 'Proxy-Authenticate' :
'WWW-Authenticate', 'Basic realm="' . $self -> {authname} . '"') if
($self -> {authbasic}) ;
return MP2 ? Apache::HTTP_UNAUTHORIZED :
Apache::Constants::HTTP_UNAUTHORIZED ;
}
if ($type == 1)
{
my $log = $r->log;
my $nonce = $self -> get_nonce ($r) ;
$log->notice("Nonce value set to $nonce.");
if (!$nonce)
{
$self -> {lock} = undef ; # reset lock in case anything has
gone wrong
MP2 ? $r->log_error("Cannot get nonce") :
$r->log_reason("Cannot get nonce") if (!defined ($nonce)) ;
return $self->{ntlmauthoritative} ? (defined($nonce)) ? (MP2
? Apache::HTTP_FORBIDDEN : Apache::Constants::HTTP_FORBIDDEN) : (MP2 ?
Apache::HTTP_INTERNAL_SERVER_ERROR :
Apache::Constants::HTTP_INTERNAL_SERVER_ERROR) : (MP2 ? Apache::DECLINED
: Apache::Constants::DECLINED) ;
# return
$self->{ntlmauthoritative}?(defined($nonce)?Apache::HTTP_FORBIDDEN:Apache::HTTP_INTERNAL_SERVER_ERROR):Apache::DECLINED
;
}
$self -> set_msg2 ($r, $nonce) ;
return MP2 ? Apache::HTTP_UNAUTHORIZED :
Apache::Constants::HTTP_UNAUTHORIZED ;
}
elsif ($type == 3)
{
if ( !$self->verify_user( $r ) )
{
if ( $self->{ntlmauthoritative} )
{
my $hdr = $r -> err_headers_out ;
$hdr -> add ($r->proxyreq ? 'Proxy-Authenticate' :
'WWW-Authenticate', 'NTLM') if ($self -> {authntlm}) ;
$hdr -> add ($r->proxyreq ? 'Proxy-Authenticate' :
'WWW-Authenticate', 'Basic realm="' . $self -> {authname} . '"') if
($self -> {authbasic}) ;
return MP2 ? Apache::HTTP_UNAUTHORIZED :
Apache::Constants::HTTP_UNAUTHORIZED ;
}
else
{
return MP2 ? Apache::DECLINED :
Apache::Constants::DECLINED ;
}
}
}
elsif ($type == -1)
{
my $nonce = $self -> get_nonce ($r) ;
if (!$nonce)
{
$self -> {lock} = undef ; # reset lock in case anything has
gone wrong
MP2 ? $r->log_error("Cannot get nonce for " . $r->uri) :
$r->log_reason("Cannot get nonce for " . $r->uri) ;
return MP2 ? Apache::HTTP_INTERNAL_SERVER_ERROR :
Apache::Constants::HTTP_INTERNAL_SERVER_ERROR ;
}
if (!$self -> verify_user ($r))
{
if ($self -> {basicauthoritative})
{
my $hdr = $r -> err_headers_out ;
$hdr -> add ($r->proxyreq ? 'Proxy-Authenticate'
:'WWW-Authenticate', 'Basic realm="' . $self -> {authname} . '"') if
($self -> {authbasic}) ;
return MP2 ? Apache::HTTP_UNAUTHORIZED :
Apache::Constants::HTTP_UNAUTHORIZED ;
}
else
{
return MP2 ? Apache::DECLINED :
Apache::Constants::DECLINED ;
}
}
}
else
{
$self -> {lock} = undef ; # reset lock in case anything has gone
wrong
MP2 ? $r->log_error("Bad NTLM Authorization Header type $type
for " . $r->uri) : $r->log_reason("Bad NTLM Authorization Header type
$type for " . $r->uri) ;
return MP2 ? Apache::HTTP_UNAUTHORIZED :
Apache::Constants::HTTP_UNAUTHORIZED ;
}
$self -> {lock} = undef ; # reset lock in case anything has gone wrong
$conn -> user($self -> {mappedusername} = $self -> map_user ($r)) ;
$self->{ok} = 1 ;
print STDERR "[$$] AuthenNTLM: OK pid = $$, connection = $$conn
cuser = " . $conn -> user .
' ip = ' . $conn -> remote_ip . "\n" if ($debug) ;
return MP2 ? Apache::OK : Apache::Constants::OK ;
}
[Thu Jul 17 11:51:30 2003] [error] failed to resolve handler
`Apache::AuthenNTLM'
[Thu Jul 17 11:51:30 2003] [error] [client 127.0.0.1] Bareword
"Apache::DECLINED" not allowed while "strict su
bs" in use at /usr/local/lib/perl/5.6.1/Apache/AuthenNTLM.pm line 141.
Bareword "Apache::HTTP_UNAUTHORIZED" not allowed while "strict subs" in
use at /usr/local/lib/perl/5.6.1/Apach
e/AuthenNTLM.pm line 150.
Bareword "Apache::HTTP_FORBIDDEN" not allowed while "strict subs" in use
at /usr/local/lib/perl/5.6.1/Apache/A
uthenNTLM.pm line 162.
Bareword "Apache::HTTP_UNAUTHORIZED" not allowed while "strict subs" in
use at /usr/local/lib/perl/5.6.1/Apach
e/AuthenNTLM.pm line 167.
Bareword "Apache::HTTP_INTERNAL_SERVER_ERROR" not allowed while "strict
subs" in use at /usr/local/lib/perl/5.
6.1/Apache/AuthenNTLM.pm line 162.
Bareword "Apache::DECLINED" not allowed while "strict subs" in use at
/usr/local/lib/perl/5.6.1/Apache/AuthenN
TLM.pm line 162.
Bareword "Apache::HTTP_UNAUTHORIZED" not allowed while "strict subs" in
use at /usr/local/lib/perl/5.6.1/Apach
e/AuthenNTLM.pm line 178.
Bareword "Apache::DECLINED" not allowed while "strict subs" in use at
/usr/local/lib/perl/5.6.1/Apache/AuthenN
TLM.pm line 182.
Bareword "Apache::HTTP_INTERNAL_SERVER_ERROR" not allowed while "strict
subs" in use at /usr/local/lib/perl/5.
6.1/Apache/AuthenNTLM.pm line 193.
Bareword "Apache::HTTP_UNAUTHORIZED" not allowed while "strict subs" in
use at /usr/local/lib/perl/5.6.1/Apach
e/AuthenNTLM.pm line 202.
Bareword "Apache::DECLINED" not allowed while "strict subs" in use at
/usr/local/lib/perl/5.6.1/Apache/AuthenN
TLM.pm line 206.
Bareword "Apache::HTTP_UNAUTHORIZED" not allowed while "strict subs" in
use at /usr/local/lib/perl/5.6.1/Apach
e/AuthenNTLM.pm line 214.
Compilation failed in require at (eval 4) line 3.
Re: modperl2 Apache::HTTP_FORBIDDEN and Apache::HTTP_INTERNAL_SERVER_ERROR
implemented?
Posted by Stas Bekman <st...@stason.org>.
speeves wrote:
> Hi!
>
> Just wondering if Apache::HTTP_FORBIDDEN and
> Apache::HTTP_INTERNAL_SERVER_ERROR have been implemented? I have been
> trying to port Apache::AuthenNTLM, and keep getting:
>
> [Tue Jul 15 16:46:08 2003] [error] failed to resolve handler
> `Apache::AuthenNTLM'
> [Tue Jul 15 16:46:08 2003] [error] [client 192.168.1.2] Bareword
> "Apache::HTTP_FORBIDDEN" not allowed while "strict subs" in u
> se at /usr/local/lib/perl/5.6.1/Apache/AuthenNTLM.pm line 593.
> Bareword "Apache::HTTP_INTERNAL_SERVER_ERROR" not allowed while "strict
> subs" in use at /usr/local/lib/perl/5.6.1/Apache/Authe
> nNTLM.pm line 597.
> Bareword "Apache::HTTP_INTERNAL_SERVER_ERROR" not allowed while "strict
> subs" in use at /usr/local/lib/perl/5.6.1/Apache/Authe
> nNTLM.pm line 632.
> BEGIN not safe after errors--compilation aborted at
> /usr/local/lib/perl/5.6.1/Apache/AuthenNTLM.pm line 671.
> Compilation failed in require at (eval 10) line 3.
>
> in the error_log. I have other constants that are imported from
> Apache::Const, so do not think that it is a problem with scope... Here
> is the code:
>
> line 593 -- return $self->{ntlmauthoritative} ? (defined($nonce) ? (MP2
> ? Apache::HTTP_FORBIDDEN : Apache::Constants::HTTP_
> FORBIDDEN) : (MP2 ? Apache::HTTP_INTERNAL_SERVER_ERROR :
> Apache::Constants::HTTP_INTERNAL_SERVER_ERROR)) : (MP2 ? Apache::DE
> CLINED : Apache::Constants::DECLINED) ;
>
> and
>
> line 632 --- # return MP2 ? Apache::HTTP_INTERNAL_SERVER_ERROR :
> Apache::Constants::HTTP_INTERNAL_SERVER_ERROR ;
>
> If you need more, let me know.
Have you imported them?
use Apache::Const compile ->qw(Apache::HTTP_FORBIDDEN);
All the available Apache:: constants are listed here:
http://perl.apache.org/docs/2.0/api/Apache/Const.html
__________________________________________________________________
Stas Bekman JAm_pH ------> Just Another mod_perl Hacker
http://stason.org/ mod_perl Guide ---> http://perl.apache.org
mailto:stas@stason.org http://use.perl.org http://apacheweek.com
http://modperlbook.org http://apache.org http://ticketmaster.com