|
Ian Clelland
ian at veryfresh.com
Fri Aug 16 14:51:37 EST 2002
On Fri, Aug 16, 2002 at 05:05:28PM -0400, Hunter Matthews wrote:
> If anyone on the list has any ideas why the authz handler, which
> _looked_ like the handler I should use (using HTTP request headers to
> determine if a client was authorized to make this request), isn't
> working, I'd still appreciate knowing.
After playing with it for about 20 minutes, I managed to get your authorization handler to run on my machine. This appears to be a minimal configuration:
Apache http.conf:
<VirtualHost *:80>
ServerName pytest.zoostation
DocumentRoot /var/local/apache/htdocs/pytest
Alias /XMLRPC/$RHN /home/ian/pytest
<Directory /home/pytest>
Options FollowSymLinks
AllowOverride None
</Directory>
<Location ~ "/XMLRPC$">
PythonPath "sys.path+['/home/ian/src/pytest']"
SetHandler python-program
PythonHandler current_apache
</Location>
<Location /XMLRPC/$RHN>
AuthName 'Restricted Area'
AuthType Basic
PythonPath "sys.path+['/home/ian/src/pytest']"
PythonAuthenHandler current_apache
PythonAuthzHandler current_apache
require valid-user
</Location>
</VirtualHost>
current_apache.py:
from mod_python import apache
def authenhandler(req):
""" temp function for testing.
this version accepts any username and password
"""
apache.log_error("Inside the authenhandler!", apache.APLOG_NOERRNO & apache.APLOG_ERR)
apache.log_error("method = %s" % req.method, apache.APLOG_NOERRNO & apache.APLOG_ERR)
apache.log_error("headers = %s" % `req.headers_in`, apache.APLOG_NOERRNO & apache.APLOG_ERR)
pw = req.get_basic_auth_pw()
if req.connection.user == None:
return apache.HTTP_UNAUTHORIZED
return apache.OK
def authzhandler(req):
""" temp function for testing
this version accepts all users for all uris
"""
apache.log_error("Inside the authzhandler!", apache.APLOG_NOERRNO & apache.APLOG_ERR)
apache.log_error("method = %s" % req.method, apache.APLOG_NOERRNO & apache.APLOG_ERR)
apache.log_error("headers = %s" % `req.headers_in`, apache.APLOG_NOERRNO & apache.APLOG_ERR)
return apache.OK
def handler(req):
""" temp function for testing"""
req.content_type = 'text/html'
req.send_http_header()
req.write("<html><body><h1>Testing</h1></body></html>")
return apache.OK
Explanation:
In the Apache configuration, the line which triggers all of the
authentication/authorization is the 'require' line. Without this line,
the AuthenHandler and AuthzHandler will not be called. 'require
valid-user' seems to be sufficient for most cases, since your
AuthenHandler can decide who a valid user is, and your AuthzHandler can
filter out anyone unauthorized.
As soon as you add that line, Apache will report an internal server
error until you give it an AuthName, AuthType, and some sort of
Authentication handler. I added a stub handler which accepts any
username and password.
Once those are all present, then Apache will happily run the
AuthzHandler whenever the AuthenHandler returns OK.
Hope this helps,
Ian
<ian at veryfresh.com>
|