[Zope] Re: Z2.log logs user as Anonymous

Ruth Mizzi ruth at anvil.com
Fri Oct 17 04:05:22 EDT 2003


Thanks loads for your answers,
Thankfully yesterday I found Paul's "shameful fix" as mentioned by Dennis...
I merged it into my code and it's now working beautifully ....

Cheers
Ruth

----- Original Message ----- 
From: "Dennis Allison" <allison at sumeru.stanford.edu>
To: "Paul Winkler" <pw_lists at slinkp.com>
Cc: <zope at zope.org>
Sent: Thursday, October 16, 2003 10:21 PM
Subject: Re: [Zope] Re: Z2.log logs user as Anonymous


>
> I had the same problem which was solved by pault. i have patched
> the version of ZServer I use to handle the logs properly.  Here's
> Paul's "shameful fix".  It works for Zope 2.5.1 through 2.6.2b3.
>
> Subject: Re: Z2.log user name problem
> From: Paul Tiemann <pault at center7.com>
> To: Dennis Allison <allison at sumeru.stanford.EDU>
> Cc: zope at zope.org
>
> > I'm using out-of-the-box user authentication with
> > CookieCrumbler.  Everything seems fine except that
> > the identified user in the Z2.log file is wrong.
>
> I've got a "fix" for your problem.  It wouldn't have
> been my first choice to do it the way I did, but it
> works, and it's quicker than my other options were...
>
> (Some history)
> I had the same problem with cookie-based authentication.
> The root of the problem lies in the log() method of the
> file ZServer/medusa/http_server.py.  That method uses the
> 'Authorization' header of the request to determine the
> name of the user.  Due to the architecture of the internal
> objects used to represent the request at this level (not
> the "REQUEST" we're usually used to using, but another
> lower-level request object) the 'Authorization' header
> is a read-only field.  I believe it's the __get_item__
> and __set_item__ methods that are custom for that request
> object, so that all attempts to "set" the Authorization
> HTTP header will just be dumped into the list of response
> headers.  Since I could see no other way to get around the
> problem by making a change in the 'CookieCrumbler', or in my
> case 'LDAPUserFolder' products, I decided to just fix the
> problem by monkey-patching the log() method in the
> http_server.py file itself.
>
> To do that, you can do something like this:
>
> 1) Add two lines like these to the top of http_server.py
>    for the import you'll need below to make parsing
>    the cookies easier.
>
> # PAUL DID THIS SHAMEFUL THING
> from ZPublisher.HTTPRequest import parse_cookie
>
> 2) Down near line 290, you have the part that determines
>    the name that will go to the Z2.log file.  Here, you
>    see 'name' being set to 'Anonymous', then there is
>    an 'if auth is not None:' block which determines
>    the name from the "Authorization" header.  In my case,
>    I added an 'else:' block below the if which has this
>    dirty patch of code:
>
> try:
>   auth_cookie_name = "my_auth" # probably '__ac'?
>   cookie = None
>   try:
>     cookies = {}
>     header_value = self.get_header("Cookie")
>     if header_value:
>       parse_cookie(header_value, cookies)
>       cookie = cookies.get(auth_cookie_name, None)
>   except:
>     name = "Anonymous"
>
>   if cookie is not None:
>     cookie = unquote( cookie )
>     try:
>       cookie = base64.decodestring( cookie )
>       name, password = tuple( cookie.split( ':', 1 ) )
>     except: name = "Unknown (bad auth cookie)"
> except:
>   name = "Failure!"
>
> Note that the way I solved the problem is "brittle" because
> should you ever change your auth_cookie_name, and forget
> to change it in http_server.py as well, you'll stop
> seeing correct values in your logs.
>
> One more important note:  Since you have more than one
> acl_users, you might want to put the 'Cookie' based
> name-fetch code before the 'Authorization' header based
> stuff.  It would be possible for you to log in as admin,
> then use the cookie-based login page to authenticate as
> a normal user, in which case your browser will be sending
> the 'Authorization' header, as well as the cookie, and
> that would cause the standard acl_users username to be
> logged...
>
> > I assume there is some method which needs to be called
> > to update the username for logging purposes when the
> > login is upgraded, but I've been unable to find it.  Or
> > is this a problem caused by the lack of a CookieCrumbler
> > in the root folder....
>
> I tried to find a method like the one you're describing, and
> one alternative to my solution would have been to add that
> kind of facility to the low-level request object, and make
> different changes to http_server.py so it would get the
> user's name from that new variable instead of from the
> Authorization header, but I couldn't find it, and it
> didn't appear that CookieCrumbler was doing that either...
>
> If there is an alternative solution that is more desirable
> than my own, I would love to hear about it...  Maybe someone
> on the list knows another way...
>
> Good luck, I hope I've helped,
> ;) Paul
>
>
>
> On Thu, 16 Oct 2003, Paul Winkler wrote:
>
> > On Thu, Oct 16, 2003 at 07:23:24PM +0200, Jochen Knuth wrote:
> > > the problem here is the use of cookie based authentication. so the
user
> > > info is not in the http authentication header, which is where the user
> > > in the logs come from.
> > > So you have the choice:
> > >
> > > 1. user names in the logs -> dont use cookie base authentication
> > > 2. cookie based authentication (login with forms) - >no user names in
logs
> >
> > That may be, I don't use cookie auth much.
> > Even so, I believe that anonymously accessible objects will
> > *always* be logged as Anonymous.
> >
> > -- 
> >
> > Paul Winkler
> > http://www.slinkp.com
> > Look! Up in the sky! It's PYRO BOAT LIUTENANT!
> > (random hero from isometric.spaceninja.com)
> >
> > _______________________________________________
> > Zope maillist  -  Zope at zope.org
> > http://mail.zope.org/mailman/listinfo/zope
> > **   No cross posts or HTML encoding!  **
> > (Related lists -
> >  http://mail.zope.org/mailman/listinfo/zope-announce
> >  http://mail.zope.org/mailman/listinfo/zope-dev )
> >
>
>
> _______________________________________________
> Zope maillist  -  Zope at zope.org
> http://mail.zope.org/mailman/listinfo/zope
> **   No cross posts or HTML encoding!  **
> (Related lists -
>  http://mail.zope.org/mailman/listinfo/zope-announce
>  http://mail.zope.org/mailman/listinfo/zope-dev )
>




More information about the Zope mailing list