Graham Dumpleton
grahamd at dscpl.com.au
Wed Oct 11 19:00:42 EDT 2006
Sells, Fred wrote .. > I'm new to mod_python and to apache config. > > I would like to setup a master security "trap" that intercepts all .py > urls > and then check for a cookie, and if it exists, I send it to the legacy > server which should respond with the user name. Most of our web stuff > is on > that legacy server and it has it's own security model that is outside my > responsibility. If the cookie doesn't exist, I redirect to our standard > login page. > > It doesn't look like I can use the Apache Basic authentication, since that > gives me the Apache login popup. I tried input filter, but can't get it > to > work. Can anyone show what I'm doing wrong? my setup is... > > -----------httpd.conf--------------------------------- > <Directory "/var/www/html/modpytest"> > AddHandler mod_python .py > PythonHandler form > # PythonHandler mod_python.publisher > PythonInputFilter security SECURITY > AddInputFilter SECURITY .py > PythonDebug On > </Directory> > > > -------------form.py------------------------------ > from mod_python import apache > from mod_python import Cookie > from mod_python import Session > import urllib2 > > def handler(req): > apache.log_error('in handler') > req.content_type = "text/plain" > text = "basic handler works" > text += '\ndir(req) = ' + str( dir(req)) > text += '\nget_config returns %s' % req.get_config() > text += '\nget_remote_host() returns %s' % req.get_remote_host() > text += '\nreq.the_request %s' % req.the_request > text += '\nreq.unparsed_uri %s' % req.unparsed_uri > text += '\nreeq.uri %s' % req.uri > text += '\nreq.args = ' + str(req.args) +' > '+str(type(req.args)) > req.write(text) > return apache.OK > > ------------------security.py----------------------- > from mod_python import apache > > def inputfilter(filter): > apache.log_error("inputfilter called") > s = filter.read() > while s: > filter.write(s.upper()) > s = filter.read() > if s is None: > filter.close() A filter is not the way to be doing this. Instead, probably best to use a headerparserhandler(). Thus: <Directory "/var/www/html/modpytest"> AddHandler mod_python .py PythonHeaderParserHandler cookiecheck PythonHandler mod_python.publisher PythonDebug On </Directory> The cookiecheck module handler would be written as: from mod_python import apache import posixpath def headerparserhandler(req): ext = posixpath.path.split(req.filename)[1] if ext != '.py': return apache.OK # check for existence of required cookie if have_cookie: return apache.OK req.status = apache.HTTP_MOVED_TEMPORARILY req.err_headers_out["Location"] = 'http://somehost/some/url' # other stuff so that other site know where to redirect back to req.write('some informative text in case browser redirect is not prompt') return apache.DONE Note that I have avoided using util.redirect() as will not work in mod_python <3.3 in phases earlier than response handler. Graham
|