Python's xmlrpclib doesn't support any authentication. It is easily subclassed 
to include it. I have successfully used it to connect with Zope and I do not 
have any reason to believe that Zope is broken with regard to authentication. 

However I do think that Python's xmlrpclib should include basic auth. Perhaps 
I will make an effort to put this in, since it is so easy.

This how-to provides the code for extending xmlrpclib:

http://www.zope.org/Members/Amos/XML-RPC

It doesn't quite work for Python 2.1+, but I have attached a working version I 
use.

hth,

Casey 

On Wednesday 14 August 2002 10:51 pm, Tim Hoffman wrote:
> I have had further from Adam Megacz <[EMAIL PROTECTED]> the author of XWT
> on this issue.
> 
> I believe I should raise a collector issue on this, however do 
> people believe this is a correct assessment of the situation.
> 
> 
> ======================================================================
> Tim Hoffman <[EMAIL PROTECTED]> writes:
> > The xmlrpc spec doesn't say anything about authentication.
> > ...
> > I suppose this whole area is pretty vague.
> 
> Actually, it references the HTTP spec, which is quite clear about
> requiring a 401.
> 
>   http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.4.2
> 
> Without the 401, you don't know the authentication realm,
> authentication type, or digest nonce -- three things you need to know
> in order to authenticate (although the last one is only needed for
> Digest auth, not Basic Auth).
> 
> Unfortunately, it seems that a lot of XML-RPC libraries are broken in
> this manner. I'm working with the Apache people right now on fixing
> the Java libraries -- could you please work with the Python people to
> get this fixed?
> 
> I think this is a result of the fact that HTTP Auth isn't used very
> often in XML-RPC, although it should be. I'm working on an RFC for
> XML-RPC, and I will certainly include some wording which underscores
> the importance of the 401 response.
> 
>     http://www.xwt.org/xmc/draft-megacz-xmc-05.txt
> 
>   - a
> 
> -- 
> Sick of HTML user interfaces?
> www.xwt.org
> =========================================================================
> 
> 
> 
> On Thu, 2002-08-15 at 10:47, Tim Hoffman wrote:
> > Hi
> > 
> > I am working on a project that uses XWT (xwt.org) as a frontend to Zope.
> > 
> > XWT uses XMLRPC to communicate with a backend (in this case Zope).
> > 
> > XWT expects an Error 401 is authentication is required on an XMLRPC
> > call, so that it can negotiate the correct auth method 
> > 
> > The author of XWT sent the following email to me
> > 
> > >Tim, I've got a piece of the answer -- your server needs to return an
> > >HTTP 401 (Unauthorized) if no username/password is provided. This
> > >response includes the challenge that XWT needs in order to build an
> > >authentication request (realm, digest nonce challenge, etc).
> > 
> > However what Zope is doing is sending back a <fault> in the 
> > XMLRPC <methodResponse> packet. 
> > 
> > So it appears to me that Zope doesn't send a http response 401 for 
> > XMLRPC (over http), but will send a 401 back to the browser.
> > 
> > XMLRPC doesn't say anything about authentication, so I suppose either
> > method is acceptable. However because XMLRPC is implemented 
> > on top of http, I would have thought a http approach (ie error 401)
> > would be used.
> > 
> > It appears that this behaviour is fundamental to Zope and is not an
> > artifact of cookie auth in CMF etc..
> > 
> > Is this really correct behaviour ?
> > 
> > Regards
> > 
> > Tim Hoffman
> > 
> > 
> >  
> > 
> > 
> > _______________________________________________
> > Zope-Dev maillist  -  [EMAIL PROTECTED]
> > http://lists.zope.org/mailman/listinfo/zope-dev
> > **  No cross posts or HTML encoding!  **
> > (Related lists - 
> >  http://lists.zope.org/mailman/listinfo/zope-announce
> >  http://lists.zope.org/mailman/listinfo/zope )
> 
> 
> 
> _______________________________________________
> Zope-Dev maillist  -  [EMAIL PROTECTED]
> http://lists.zope.org/mailman/listinfo/zope-dev
> **  No cross posts or HTML encoding!  **
> (Related lists - 
>  http://lists.zope.org/mailman/listinfo/zope-announce
>  http://lists.zope.org/mailman/listinfo/zope )
> 
import string, xmlrpclib, httplib
from base64 import encodestring

class BasicAuthTransport(xmlrpclib.Transport):
    verbose = 0
    
    def __init__(self, username=None, password=None):
        self.username=username
        self.password=password

    def request(self, host, handler, request_body, verbose=0):
        # issue XML-RPC request

        h = httplib.HTTP(host)
        h.putrequest("POST", handler)

        # required by HTTP/1.1
        h.putheader("Host", host)

        # required by XML-RPC
        h.putheader("User-Agent", self.user_agent)
        h.putheader("Content-Type", "text/xml")
        h.putheader("Content-Length", str(len(request_body)))

        # basic auth
        if self.username is not None and self.password is not None:
            h.putheader("AUTHORIZATION", "Basic %s" % string.replace(
                    encodestring("%s:%s" % (self.username, self.password)),
                    "\012", ""))
        h.endheaders()

        if request_body:
            h.send(request_body)

        errcode, errmsg, headers = h.getreply()

        if errcode != 200:
            raise xmlrpclib.ProtocolError(
                host + handler,
                errcode, errmsg,
                headers
                )

        return self.parse_response(h.getfile()) 


Reply via email to