changeset 5657:18c9eb22c29c stable

auth: Fix tomcat throwing '505 HTTP Version Not Supported' when trying to log in to Atlassian Crowd with usernames that contain spaces If you try to log in to Kallithea via the Crowd auth module, and the username contains a space, it fails. Tomcat on the Crowd server gives error '505 HTTP Version Not Supported'. Further investigation showed that the username was not being quoted. E.g. for the user 'test account', the REST URL should contain 'test%20account' but actually was containing 'test account'. When Tomcat received this HTTP request it interprets the word 'account' as the HTTP version because of the space. This obviously isn't a valid HTTP version. This bug is fixed by using urllib2.quote on the username to ensure that special characters are correctly quoted. After making that change on my local install, the user 'test account' was able to log in successfully.
author Robert James Dennington <tinytimrob@googlemail.com>
date Fri, 15 Jan 2016 14:38:27 +0000
parents 044252c60f95
children dba6c44f0a30
files kallithea/lib/auth_modules/auth_crowd.py
diffstat 1 files changed, 2 insertions(+), 2 deletions(-) [+]
line wrap: on
line diff
--- a/kallithea/lib/auth_modules/auth_crowd.py	Thu Jan 07 01:53:04 2016 +0000
+++ b/kallithea/lib/auth_modules/auth_crowd.py	Fri Jan 15 14:38:27 2016 +0000
@@ -119,14 +119,14 @@
         """Authenticate a user against crowd. Returns brief information about
         the user."""
         url = ("%s/rest/usermanagement/%s/authentication?username=%s"
-               % (self._uri, self._version, username))
+               % (self._uri, self._version, urllib2.quote(username)))
         body = json.dumps({"value": password})
         return self._request(url, body)
 
     def user_groups(self, username):
         """Retrieve a list of groups to which this user belongs."""
         url = ("%s/rest/usermanagement/%s/user/group/nested?username=%s"
-               % (self._uri, self._version, username))
+               % (self._uri, self._version, urllib2.quote(username)))
         return self._request(url)