fix auth with long username or password

Our auth_headers() helper uses base64.encodestring() which inserts
newlines to generate a nicely formatted text. That is surely helpful for
display purposes but unwanted when forging an authentication string.

encodestring() always append a newline, which was the reason for the
[:-1] slicing.

Switch to base64.b64encoding() and add a test ensuring no newline is
inserted.

Closes-Bug: 1039307
Change-Id: I71c3e6d504a500a1f21ff89b1d54a155da1aaf0e
This commit is contained in:
Antoine Musso
2014-11-01 23:57:22 +01:00
parent 611074dc5a
commit 69655cc682
2 changed files with 11 additions and 1 deletions

View File

@@ -67,6 +67,16 @@ class JenkinsTest(unittest.TestCase):
self.assertEqual(j.auth, b'Basic bm9uYXNjaWk6w6nigqw=')
self.assertEqual(j.crumb, None)
def test_constructor_long_user_or_password(self):
long_str = 'a' * 60
long_str_b64 = 'YWFh' * 20
j = jenkins.Jenkins('http://example.com', long_str, long_str)
self.assertNotIn(b"\n", j.auth)
self.assertEqual(j.auth.decode(), 'Basic %s' % (
long_str_b64 + 'Om' + long_str_b64[2:] + 'YQ=='))
@patch.object(jenkins.Jenkins, 'jenkins_open')
def test_get_job_config_encodes_job_name(self, jenkins_mock):
j = jenkins.Jenkins('http://example.com/', 'test', 'test')