summaryrefslogtreecommitdiff
path: root/www/p5-Apache-AuthenURL/files/patch-AuthenURL.pm
blob: 4905e3f6ef0e5a3cbe0c0c07bac54303f01bf26a (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
--- AuthenURL.pm	Tue Nov  4 23:47:14 2003
+++ AuthenURL.pm	Sat Oct 23 14:58:56 2004
@@ -1,14 +1,31 @@
 # $Id: AuthenURL.pm,v 0.10 2003/11/04 15:47:13 jdg117 Exp $
 package Apache::AuthenURL;
+$Apache::AuthenURL::VERSION = '0.9';
+
 use strict;
-use Apache();
-use Apache::Constants qw(OK SERVER_ERROR AUTH_REQUIRED);
 use LWP::UserAgent;
-use vars qw($VERSION);
 
-my $prefix = "Apache::AuthenURL";
+BEGIN { local $@; eval { require Apache2; } }
 
-$VERSION = '0.9';
+use mod_perl;
+use constant MP2 => ($mod_perl::VERSION >= 1.99);
+use constant OK => 0;
+use constant SERVER_ERROR => 500;
+use constant AUTH_REQUIRED => 401;
+
+if (MP2) { 
+    require Apache::Access;
+    require Apache::Connection;
+    require Apache::Log;
+    require Apache::RequestRec;
+    require Apache::RequestUtil;
+}
+else {
+    require Apache::ModuleConfig;
+    require Apache::Constants;
+}
+
+my $prefix = "Apache::AuthenURL";
 
 my(%Config) = (
     'AuthenURL_url'		=> '',
@@ -31,20 +48,23 @@
  
 sub check {
     my($r, $attr) = @_;
+    return undef unless defined($r);
+
     my($res, $sent_pwd);
     ($res, $sent_pwd) = $r->get_basic_auth_pw;
     return $res if $res; #decline if not Basic
 
-    my $user = $r->connection->user;
-    my $passwd;
+    my $user = (MP2) ? $r->user : $r->connection->user;
+    my $uri = $r->uri;
+    my $method = $r->method;
 
     unless ( $attr->{method} ) {
-        $r->warn("$prefix is missing the METHOD (defaulting to GET) for URI: " . $r->uri);
+        $r->warn("$prefix is missing the METHOD (defaulting to GET) for URI: " . $uri);
         $attr->{method} = "GET";
     }
 
     unless ( $attr->{url} ) {
-        $r->log_reason("$prefix is missing the URL", $r->uri);
+        $r->log_error("$prefix is missing the URL for $uri");
         return SERVER_ERROR;
     }
 
@@ -55,14 +75,32 @@
         $lwp_ua->use_alarm(0);
         my $lwp_req = new HTTP::Request $attr->{method} => $attr->{url};
         unless( defined $lwp_req ) {
-            $r->log_reason("LWP failed to use METHOD: " . $attr->{method} . " to connect to URL: ".$attr->{url}, $r->uri);
+            $r->log_error("LWP failed to use METHOD: " . $attr->{method} . " to connect to URL: ".$attr->{url});
             return SERVER_ERROR;
         }
         
         $lwp_req->authorization_basic($user, $sent_pwd);
+
+        if ($attr->{method} eq 'POST') {
+            $lwp_req->header('Content-Type' => 'application/x-www-form-urlencoded');
+
+            require URI;
+            my $url = URI->new('http:');
+            $url->query_form(
+                user => $user,
+                password => $sent_pwd,
+                uri => $uri,
+                method => $method,
+            );
+
+            my $content = $url->query;
+            $lwp_req->header('Content-Length' => length($content));
+            $lwp_req->content($content);
+        }
+
         my $lwp_res = $lwp_ua->request($lwp_req);
         unless( $lwp_res->is_success ) {
-            $r->log_reason("LWP user $user: " . $attr->{url} . $lwp_res->status_line, $r->uri);
+            $r->log_error("LWP user $user: $attr->{url} fails with ".$lwp_res->status_line)."for $uri";
             $r->note_basic_auth_failure;
             return AUTH_REQUIRED;
         }
@@ -83,7 +121,7 @@
  #in .htaccess
  AuthName MyHTTPAuth
  AuthType Basic
- PerlAuthenHandler Apache::AuthenCache Apache::AuthenURL::handler Apache::AuthenCache::manage_cache
+ PerlAuthenHandler Apache::AuthenCache Apache::AuthenURL Apache::AuthenCache::manage_cache
 
  PerlSetVar AuthenURL_method HEAD		# a valid LWP method
  PerlSetVar AuthenURL_url https://somehost
@@ -99,6 +137,12 @@
 I wrote this module to work around the lack of DCE support for Solaris x86.
 DCE authentication in my application is handled using Gradient's DCE
 plug-in for Netscape Enterprise Server. The request is encrypted using SSL.
+
+=head1 NOTES
+
+If C<AuthenURL_method> is set to C<POST>, the request is sent with three
+parameters: C<user>, C<password> and C<uri>, in addition to the basic
+authentication headers common to all methods.
 
 =head1 ACKNOWLEDGEMENTS