dlr 2002/09/27 10:20:06 Modified: src/java/org/apache/xmlrpc XmlRpcWorker.java Log: As determined on dev list discussion with Adam Megacz, throw an AuthenticationFailed exception in XmlRpcWorker's invokeHandler() if HTTP authentication is not provided for an AuthenticatedXmlRpcHandler. Daniel Rall <[EMAIL PROTECTED]> writes: > > The key concept here is that HTTP simply does not support the notion > > of "optional authentication". > HTTP does not support the notation of optional auth, but a XML-RPC > handler might (say, based on some configuration parameter). Er, if HTTP Basic authentication is being used, then XML-RPC *cannot* support optional authentication without violating the HTTP spec. If the username and password are XML-RPC values, then you can do whatever you like. > If it does not, were you trying to keep AuthenticatedXmlRpcHandler > authors from shooting themselves in the foot? Exactly. If the handler uses authentication, and user==null, returning a 401 is the *only* valid response. This is something most people aren't aware of, and are extremely likely to screw up. Revision Changes Path 1.3 +11 -0 xml-rpc/src/java/org/apache/xmlrpc/XmlRpcWorker.java Index: XmlRpcWorker.java =================================================================== RCS file: /home/cvs/xml-rpc/src/java/org/apache/xmlrpc/XmlRpcWorker.java,v retrieving revision 1.2 retrieving revision 1.3 diff -u -u -r1.2 -r1.3 --- XmlRpcWorker.java 26 Aug 2002 20:20:44 -0000 1.2 +++ XmlRpcWorker.java 27 Sep 2002 17:20:06 -0000 1.3 @@ -119,6 +119,17 @@ } else if (handler instanceof AuthenticatedXmlRpcHandler) { + // If HTTP authentication is in use, XML-RPC must + // return a 401 HTTP status code when no user name is + // supplied. This provides authentication meta data + // and tells clients to provide authentication on + // subsequent requests. + String userName = request.getUserName(); + if (userName == null || userName.length() == 0) + { + throw new AuthenticationFailed + ("No user name provided for HTTP authentication"); + } return ((AuthenticatedXmlRpcHandler) handler) .execute(request.getMethodName(), request.getParameters(), request.getUserName(), request.getPassword());