[Zope-dev] Incorrect Padding?

Steve Alexander steve@cat-box.net
Mon, 24 Jul 2000 21:36:53 +0100


Martijn Pieters wrote:
> 
> On Mon, Jul 24, 2000 at 08:56:54PM +0100, Steve Alexander wrote:
> > I've attached a patch to lib/python/AccessControl/User.py. If there are
> > no suggestions of improvements, or complaints :-)  I'll stick it into
> > the Collector.
> >
> > I looked over the RFC, and Bad Request seems to be the best response
> > code.
> 
> Agreed.
> 
> > *** lib/python/AccessControl/User.py.original Mon Jul 24 20:31:40 2000
> > --- lib/python/AccessControl/User.py  Mon Jul 24 20:51:33 2000
> > ***************
> > *** 438,444 ****
> >           # Only do basic authentication
> >           if lower(auth[:6])!='basic ':
> >               return None
> > !         name,password=tuple(split(decodestring(split(auth)[-1]), ':', 1))
> >
> >           # Check for superuser
> >           super=self._super
> > --- 438,451 ----
> >           # Only do basic authentication
> >           if lower(auth[:6])!='basic ':
> >               return None
> > !         try:
> > !             name,password=\
> > !                 tuple(split(decodestring(split(auth)[-1]), ':', 1))
> > !         except: # not a proper basic auth string
> > !             request.response.setStatus(400)
> > !             raise 'InternalError', request.response._error_html(
> > !                 "Internal Error",
> > !                 "Zope could not understand the Basic Authentication supplied.")
> >
> >           # Check for superuser
> >           super=self._super
> 
> Would it be a good idea to add the header?

I don't quite follow.

> And let's make that a less generic
> except clause, we don't want to mask Zope bugs =)

Ok.

I was thinking of just using HTTPResponse.badRequestError().
However, it has a "name" argument, and I don't quite understand how it
is meant to be used.

    def badRequestError(self,name):
        self.setStatus(400)
        if regex.match('^[A-Z_0-9]+$',name) >= 0:
            raise 'InternalError', self._error_html(
                "Internal Error",
                "Sorry, an internal error occurred in this Zope
resource.")

        raise 'BadRequest',self._error_html(
            "Invalid request",
            "The parameter, <em>%s</em>, " % name +
            "was omitted from the request.<p>" + 
            "Make sure to specify all required parameters, " +
            "and try the request again."
            )

So, any of name="FOO", name="123", name="FOO123", name="" produces an
internal error; name="foo", name="Foo", name="foo123" produces a bad
request.

What's the rationale?


Should I just use this, then?

  request.response.badRequestError(name="0") # internal error


--
Steve Alexander
Software Engineer
Cat-Box limited
http://www.cat-box.net