)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"a9335b9867ebcc592ad25463a5c67cb723d746e2","unresolved":false,"context_lines":[{"line_number":7,"context_line":"Initial kerberos plugin implementation."},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This patch will allow to use kerberos credentials to retrieve"},{"line_number":10,"context_line":"a token during a post on /v3/tokens. It will force the negotiate"},{"line_number":11,"context_line":"communication with the client if the method specified is kerberos"},{"line_number":12,"context_line":"and leaves unaffected the other plugins."},{"line_number":13,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":5,"id":"AAAAVX%2F%2F8gY%3D","line":10,"updated":"2014-02-27 07:58:06.000000000","message":"\u0027a post on /v3/auth/tokens\u0027","commit_id":"37eb60cb7249481e66deef93ea289188d2501c4c"}],"etc/keystone.conf.sample":[{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"a9335b9867ebcc592ad25463a5c67cb723d746e2","unresolved":false,"context_lines":[{"line_number":464,"context_line":"#"},{"line_number":465,"context_line":""},{"line_number":466,"context_line":"# Default auth methods. (list value)"},{"line_number":467,"context_line":"#methods\u003dexternal,kerberos,password,token"},{"line_number":468,"context_line":""},{"line_number":469,"context_line":"# The password auth plugin module (string value)"},{"line_number":470,"context_line":"#password\u003dkeystone.auth.plugins.password.Password"}],"source_content_type":"application/octet-stream","patch_set":5,"id":"AAAAVX%2F%2F8gk%3D","line":467,"updated":"2014-02-27 07:58:06.000000000","message":"this shouldn\u0027t be enabled by default. remove this change, and the ones below. \n\nif you are writing tests, you can modify https://github.com/openstack/keystone/blob/master/keystone/tests/test_overrides.conf","commit_id":"37eb60cb7249481e66deef93ea289188d2501c4c"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"6246888efbb0046efde240aff8f1915f55e60416","unresolved":false,"context_lines":[{"line_number":1064,"context_line":"# Specify the location of the kerberos keytab"},{"line_number":1065,"context_line":"# keytab_file \u003d /etc/keystone/keystone.keytab"},{"line_number":1066,"context_line":"# Specify the name of the service inside the keytab"},{"line_number":1067,"context_line":"# service_name \u003d keystone.example.com"},{"line_number":1068,"context_line":""},{"line_number":1069,"context_line":"[paste_deploy]"},{"line_number":1070,"context_line":""}],"source_content_type":"application/octet-stream","patch_set":6,"id":"AAAAVX%2F%2F2fg%3D","line":1067,"updated":"2014-02-27 20:33:21.000000000","message":"Regenerate the sample.conf using the config_generator tool. \n\nhttp://docs.openstack.org/developer/keystone/developing.html#generating-updated-sample-config-file","commit_id":"622839556396811554b87fd6490fa5aabb31e977"},{"author":{"_account_id":11717,"name":"Ryan Oshima","email":"ryan.oshima@hp.com","username":"RyanOshima"},"change_message_id":"45b28e74dc21e64883a3556052afa0cdf3eae2ff","unresolved":false,"context_lines":[{"line_number":835,"context_line":"[kerberos]"},{"line_number":836,"context_line":""},{"line_number":837,"context_line":"#"},{"line_number":838,"context_line":"# Options defined in keystone"},{"line_number":839,"context_line":"#"},{"line_number":840,"context_line":""},{"line_number":841,"context_line":"# Name of the service in the keytab file. (string value)"}],"source_content_type":"application/octet-stream","patch_set":14,"id":"baada198_e7903350","line":838,"updated":"2014-07-25 21:57:26.000000000","message":"\"keystone\"-\u003e\"Keystone\"","commit_id":"98f5d166f77ab3debd9b3944c71655d1d5790728"},{"author":{"_account_id":8533,"name":"Marcos Fermín Lobo","email":"lobo@lukos.org","username":"mlobo"},"change_message_id":"73f24dc5acb35b919e7b0b459d457d7b8affd8a8","unresolved":false,"context_lines":[{"line_number":835,"context_line":"[kerberos]"},{"line_number":836,"context_line":""},{"line_number":837,"context_line":"#"},{"line_number":838,"context_line":"# Options defined in keystone"},{"line_number":839,"context_line":"#"},{"line_number":840,"context_line":""},{"line_number":841,"context_line":"# Name of the service in the keytab file. (string value)"}],"source_content_type":"application/octet-stream","patch_set":14,"id":"fa98f980_62cbad1e","line":838,"in_reply_to":"baada198_e7903350","updated":"2014-09-02 07:46:34.000000000","message":"Done","commit_id":"98f5d166f77ab3debd9b3944c71655d1d5790728"}],"keystone/auth/plugins/kerberos.py":[{"author":{"_account_id":2218,"name":"Adam Young","email":"adam@younglogic.com","username":"ayoung"},"change_message_id":"20fed3fbe9a64c3b34d3650d01e4f4295f03f7b4","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# vim: tabstop\u003d4 shiftwidth\u003d4 softtabstop\u003d4"},{"line_number":2,"context_line":""},{"line_number":3,"context_line":"# Copyright 2014 OpenStack Foundation"},{"line_number":4,"context_line":"#"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAU3%2F%2FuLs%3D","line":1,"updated":"2014-02-25 04:00:45.000000000","message":"these 3 lines can go away.","commit_id":"3e392234bf4580bc13633e9a559cb3d9dd15ef02"},{"author":{"_account_id":5575,"name":"Jose Castro Leon","email":"jose.castro.leon@cern.ch","username":"jose-castro-leon"},"change_message_id":"35a73534bd18b7e9c06e21d25d54374afb410755","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# vim: tabstop\u003d4 shiftwidth\u003d4 softtabstop\u003d4"},{"line_number":2,"context_line":""},{"line_number":3,"context_line":"# Copyright 2014 OpenStack Foundation"},{"line_number":4,"context_line":"#"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAU3%2F%2Fsdw%3D","line":1,"in_reply_to":"AAAAU3%2F%2FuLs%3D","updated":"2014-02-26 14:33:12.000000000","message":"Done","commit_id":"3e392234bf4580bc13633e9a559cb3d9dd15ef02"},{"author":{"_account_id":1916,"name":"Guang Yee","email":"gyee@suse.com","username":"guang-yee"},"change_message_id":"f2f822955999018a2f80f6eacdc2c74ec5ac6005","unresolved":false,"context_lines":[{"line_number":33,"context_line":""},{"line_number":34,"context_line":"class Kerberos(auth.AuthMethodHandler):"},{"line_number":35,"context_line":"    def __init__(self):"},{"line_number":36,"context_line":"        self.identity_api \u003d identity.Manager()"},{"line_number":37,"context_line":"        servicename \u003d CONF.kerberos.service_name"},{"line_number":38,"context_line":"        self.service \u003d \u0027HTTP@%s\u0027 % servicename"},{"line_number":39,"context_line":"        os.environ[\u0027KRB5_KTNAME\u0027] \u003d CONF.kerberos.keytab_file"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAU3%2F%2FuBE%3D","line":36,"updated":"2014-02-25 04:28:43.000000000","message":"use dependency injection for identity_api","commit_id":"3e392234bf4580bc13633e9a559cb3d9dd15ef02"},{"author":{"_account_id":1916,"name":"Guang Yee","email":"gyee@suse.com","username":"guang-yee"},"change_message_id":"f2f822955999018a2f80f6eacdc2c74ec5ac6005","unresolved":false,"context_lines":[{"line_number":36,"context_line":"        self.identity_api \u003d identity.Manager()"},{"line_number":37,"context_line":"        servicename \u003d CONF.kerberos.service_name"},{"line_number":38,"context_line":"        self.service \u003d \u0027HTTP@%s\u0027 % servicename"},{"line_number":39,"context_line":"        os.environ[\u0027KRB5_KTNAME\u0027] \u003d CONF.kerberos.keytab_file"},{"line_number":40,"context_line":"        try:"},{"line_number":41,"context_line":"            principal \u003d krb_lib.getServerPrincipalDetails(\u0027HTTP\u0027, servicename)"},{"line_number":42,"context_line":"        except krb_lib.KrbError as ex:"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAU3%2F%2FuA4%3D","line":39,"updated":"2014-02-25 04:28:43.000000000","message":"move os.environ to the top as this is static information","commit_id":"3e392234bf4580bc13633e9a559cb3d9dd15ef02"},{"author":{"_account_id":1916,"name":"Guang Yee","email":"gyee@suse.com","username":"guang-yee"},"change_message_id":"f2f822955999018a2f80f6eacdc2c74ec5ac6005","unresolved":false,"context_lines":[{"line_number":40,"context_line":"        try:"},{"line_number":41,"context_line":"            principal \u003d krb_lib.getServerPrincipalDetails(\u0027HTTP\u0027, servicename)"},{"line_number":42,"context_line":"        except krb_lib.KrbError as ex:"},{"line_number":43,"context_line":"            LOG.warn(_(\u0027Error while initializing kerberos library: %s\u0027), ex)"},{"line_number":44,"context_line":"        else:"},{"line_number":45,"context_line":"            LOG.info(_(\u0027Kerberos is identifying as %s\u0027), principal)"},{"line_number":46,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAU3%2F%2Ft%2Fw%3D","line":43,"updated":"2014-02-25 04:28:43.000000000","message":"warn only? seem like a catastrophic error","commit_id":"3e392234bf4580bc13633e9a559cb3d9dd15ef02"},{"author":{"_account_id":1916,"name":"Guang Yee","email":"gyee@suse.com","username":"guang-yee"},"change_message_id":"f2f822955999018a2f80f6eacdc2c74ec5ac6005","unresolved":false,"context_lines":[{"line_number":42,"context_line":"        except krb_lib.KrbError as ex:"},{"line_number":43,"context_line":"            LOG.warn(_(\u0027Error while initializing kerberos library: %s\u0027), ex)"},{"line_number":44,"context_line":"        else:"},{"line_number":45,"context_line":"            LOG.info(_(\u0027Kerberos is identifying as %s\u0027), principal)"},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"    def kerberos_step(self, client_token):"},{"line_number":48,"context_line":"        state \u003d None"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAU3%2F%2Ft%2FY%3D","line":45,"updated":"2014-02-25 04:28:43.000000000","message":"s/Kerberos/Kerberos principal/","commit_id":"3e392234bf4580bc13633e9a559cb3d9dd15ef02"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"a9335b9867ebcc592ad25463a5c67cb723d746e2","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright 2014 OpenStack Foundation"},{"line_number":2,"context_line":"#"},{"line_number":3,"context_line":"# Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":4,"context_line":"# not use this file except in compliance with the License. You may obtain"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAVX%2F%2F8mc%3D","line":1,"updated":"2014-02-27 07:58:06.000000000","message":"don\u0027t use foundation","commit_id":"37eb60cb7249481e66deef93ea289188d2501c4c"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"a9335b9867ebcc592ad25463a5c67cb723d746e2","unresolved":false,"context_lines":[{"line_number":13,"context_line":"# under the License."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"from __future__ import absolute_import"},{"line_number":16,"context_line":"import kerberos as krb_lib"},{"line_number":17,"context_line":"import os"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"from keystone import auth"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAVX%2F%2F8mE%3D","line":16,"updated":"2014-02-27 07:58:06.000000000","message":"this rename seems unnecessary","commit_id":"37eb60cb7249481e66deef93ea289188d2501c4c"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"a9335b9867ebcc592ad25463a5c67cb723d746e2","unresolved":false,"context_lines":[{"line_number":14,"context_line":""},{"line_number":15,"context_line":"from __future__ import absolute_import"},{"line_number":16,"context_line":"import kerberos as krb_lib"},{"line_number":17,"context_line":"import os"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"from keystone import auth"},{"line_number":20,"context_line":"from keystone import config"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAVX%2F%2F8lw%3D","line":17,"updated":"2014-02-27 07:58:06.000000000","message":"also, i think os should go above kerberos.\nthe order is:\nstdlib imports, external package imports, then local package imports","commit_id":"37eb60cb7249481e66deef93ea289188d2501c4c"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"a9335b9867ebcc592ad25463a5c67cb723d746e2","unresolved":false,"context_lines":[{"line_number":38,"context_line":"        try:"},{"line_number":39,"context_line":"            principal \u003d krb_lib.getServerPrincipalDetails(\u0027HTTP\u0027, servicename)"},{"line_number":40,"context_line":"        except krb_lib.KrbError as ex:"},{"line_number":41,"context_line":"            LOG.error(_(\u0027Error while initializing kerberos library: %s\u0027), ex)"},{"line_number":42,"context_line":"        else:"},{"line_number":43,"context_line":"            LOG.info(_(\u0027Service identified as Kerberos/%s\u0027), principal)"},{"line_number":44,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAVX%2F%2F8kU%3D","line":41,"updated":"2014-02-27 07:58:06.000000000","message":"why would this be an error initializing the library?","commit_id":"37eb60cb7249481e66deef93ea289188d2501c4c"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"a9335b9867ebcc592ad25463a5c67cb723d746e2","unresolved":false,"context_lines":[{"line_number":42,"context_line":"        else:"},{"line_number":43,"context_line":"            LOG.info(_(\u0027Service identified as Kerberos/%s\u0027), principal)"},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"    def kerberos_step(self, client_token):"},{"line_number":46,"context_line":"        state \u003d None"},{"line_number":47,"context_line":"        server_token \u003d None"},{"line_number":48,"context_line":"        user \u003d None"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAVX%2F%2F8jI%3D","line":45,"updated":"2014-02-27 07:58:06.000000000","message":"definitely need some doc strings for this function","commit_id":"37eb60cb7249481e66deef93ea289188d2501c4c"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"a9335b9867ebcc592ad25463a5c67cb723d746e2","unresolved":false,"context_lines":[{"line_number":63,"context_line":"                krb_lib.authGSSServerClean(state)"},{"line_number":64,"context_line":"        return server_token, user"},{"line_number":65,"context_line":""},{"line_number":66,"context_line":"    def authenticate(self, context, auth_payload, user_context):"},{"line_number":67,"context_line":"        authHeader \u003d context[\u0027headers\u0027].get(\u0027Authorization\u0027)"},{"line_number":68,"context_line":"        if authHeader is None:"},{"line_number":69,"context_line":"            raise exception.Unauthorized(method\u003d\u0027Negotiate\u0027)"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAVX%2F%2F8i0%3D","line":66,"updated":"2014-02-27 07:58:06.000000000","message":"doc strings here too.","commit_id":"37eb60cb7249481e66deef93ea289188d2501c4c"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"a9335b9867ebcc592ad25463a5c67cb723d746e2","unresolved":false,"context_lines":[{"line_number":64,"context_line":"        return server_token, user"},{"line_number":65,"context_line":""},{"line_number":66,"context_line":"    def authenticate(self, context, auth_payload, user_context):"},{"line_number":67,"context_line":"        authHeader \u003d context[\u0027headers\u0027].get(\u0027Authorization\u0027)"},{"line_number":68,"context_line":"        if authHeader is None:"},{"line_number":69,"context_line":"            raise exception.Unauthorized(method\u003d\u0027Negotiate\u0027)"},{"line_number":70,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAVX%2F%2F8kI%3D","line":67,"updated":"2014-02-27 07:58:06.000000000","message":"s/authHeader/auth_header","commit_id":"37eb60cb7249481e66deef93ea289188d2501c4c"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"cad3dc177022fc7c77e3b6456fb5d7468c789d7d","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright 2014 OpenStack Foundation"},{"line_number":2,"context_line":"#"},{"line_number":3,"context_line":"# Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":4,"context_line":"# not use this file except in compliance with the License. You may obtain"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAVX%2F%2F4xs%3D","line":1,"updated":"2014-02-27 15:35:36.000000000","message":"OpenStack Foundation doesn\u0027t own code - remove this line","commit_id":"622839556396811554b87fd6490fa5aabb31e977"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"cad3dc177022fc7c77e3b6456fb5d7468c789d7d","unresolved":false,"context_lines":[{"line_number":14,"context_line":""},{"line_number":15,"context_line":"from __future__ import absolute_import"},{"line_number":16,"context_line":"import os"},{"line_number":17,"context_line":"import kerberos"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"from keystone import auth"},{"line_number":20,"context_line":"from keystone import config"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAVX%2F%2F4xo%3D","line":17,"updated":"2014-02-27 15:35:36.000000000","message":"add a new line between os and kerberos","commit_id":"622839556396811554b87fd6490fa5aabb31e977"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"6246888efbb0046efde240aff8f1915f55e60416","unresolved":false,"context_lines":[{"line_number":46,"context_line":"        \"\"\""},{"line_number":47,"context_line":"        Validates the client kerberos ticket within the system"},{"line_number":48,"context_line":"        If it requires an extra validation it will send an extra"},{"line_number":49,"context_line":"        authentication token. If the authentication suceeds it will"},{"line_number":50,"context_line":"        return the user in the format (user@REALM) received."},{"line_number":51,"context_line":"        \"\"\""},{"line_number":52,"context_line":"        state \u003d None"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAVX%2F%2F2gs%3D","line":49,"updated":"2014-02-27 20:33:21.000000000","message":"succeeds*","commit_id":"622839556396811554b87fd6490fa5aabb31e977"},{"author":{"_account_id":7191,"name":"Jamie Lennox","email":"jamielennox@gmail.com","username":"jamielennox"},"change_message_id":"89c3efa069f93941cd91d2527b456da8713830d6","unresolved":false,"context_lines":[{"line_number":99,"context_line":"                user_context[\u0027user_id\u0027] \u003d user_ref[\u0027id\u0027]"},{"line_number":100,"context_line":"        elif server_token:"},{"line_number":101,"context_line":"            raise exception.Unauthorized(method\u003d\u0027Negotiate\u0027,"},{"line_number":102,"context_line":"                                         token\u003dserver_token)"},{"line_number":103,"context_line":"        else:"},{"line_number":104,"context_line":"            raise exception.Forbidden()"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAVX%2F%2F2Gw%3D","line":102,"updated":"2014-02-27 21:41:51.000000000","message":"The other option here is that you can return your response as a WebOb Response and that way keystone\u0027s rendering won\u0027t try to mangle it.\n\nIt means you don\u0027t need special exception handling.","commit_id":"622839556396811554b87fd6490fa5aabb31e977"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"c3aaf958346e234c10384e2abebd72f3ad3cb6fa","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright 2014 OpenStack Foundation"},{"line_number":2,"context_line":"#"},{"line_number":3,"context_line":"# Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":4,"context_line":"# not use this file except in compliance with the License. You may obtain"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAVn%2F%2F21g%3D","line":1,"updated":"2014-03-03 19:23:46.000000000","message":"you don\u0027t work for the foundation, and thus cannot assign code to them.\n\nplace the name of your workplace or remove it entirely.","commit_id":"207b654bce845022653aec8fa9ad340f81ec56c4"},{"author":{"_account_id":5575,"name":"Jose Castro Leon","email":"jose.castro.leon@cern.ch","username":"jose-castro-leon"},"change_message_id":"eb4ec0bb6d78b0bc8685be796d53464a62e0e5a8","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright 2014 OpenStack Foundation"},{"line_number":2,"context_line":"#"},{"line_number":3,"context_line":"# Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":4,"context_line":"# not use this file except in compliance with the License. You may obtain"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAVn%2F%2FwxE%3D","line":1,"in_reply_to":"AAAAVn%2F%2F21g%3D","updated":"2014-03-04 08:32:44.000000000","message":"OK","commit_id":"207b654bce845022653aec8fa9ad340f81ec56c4"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"c3aaf958346e234c10384e2abebd72f3ad3cb6fa","unresolved":false,"context_lines":[{"line_number":26,"context_line":""},{"line_number":27,"context_line":"CONF \u003d config.CONF"},{"line_number":28,"context_line":"METHOD_NAME \u003d \u0027kerberos\u0027"},{"line_number":29,"context_line":"os.environ[\u0027KRB5_KTNAME\u0027] \u003d CONF.kerberos.keytab_file"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":32,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAVn%2F%2F2z0%3D","line":29,"updated":"2014-03-03 19:23:46.000000000","message":"is there any way to use the kerberos library without having to set a new env variable?","commit_id":"207b654bce845022653aec8fa9ad340f81ec56c4"},{"author":{"_account_id":5575,"name":"Jose Castro Leon","email":"jose.castro.leon@cern.ch","username":"jose-castro-leon"},"change_message_id":"eb4ec0bb6d78b0bc8685be796d53464a62e0e5a8","unresolved":false,"context_lines":[{"line_number":26,"context_line":""},{"line_number":27,"context_line":"CONF \u003d config.CONF"},{"line_number":28,"context_line":"METHOD_NAME \u003d \u0027kerberos\u0027"},{"line_number":29,"context_line":"os.environ[\u0027KRB5_KTNAME\u0027] \u003d CONF.kerberos.keytab_file"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":32,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAVn%2F%2FwyI%3D","line":29,"in_reply_to":"AAAAVn%2F%2F2z0%3D","updated":"2014-03-04 08:32:44.000000000","message":"If you don\u0027t specify anything, the library takes the keytab of the system located in /etc/krb5.keytab","commit_id":"207b654bce845022653aec8fa9ad340f81ec56c4"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"c3aaf958346e234c10384e2abebd72f3ad3cb6fa","unresolved":false,"context_lines":[{"line_number":39,"context_line":"        try:"},{"line_number":40,"context_line":"            principal \u003d kerberos.getServerPrincipalDetails(\u0027HTTP\u0027, servicename)"},{"line_number":41,"context_line":"        except kerberos.KrbError as ex:"},{"line_number":42,"context_line":"            LOG.warn(_(\u0027Error while initializing kerberos library: %s\u0027), ex)"},{"line_number":43,"context_line":"        else:"},{"line_number":44,"context_line":"            LOG.info(_(\u0027Service identified as Kerberos/%s\u0027), principal)"},{"line_number":45,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAVn%2F%2F20s%3D","line":42,"updated":"2014-03-03 19:23:46.000000000","message":"suggest: Error while getting server details?","commit_id":"207b654bce845022653aec8fa9ad340f81ec56c4"},{"author":{"_account_id":5575,"name":"Jose Castro Leon","email":"jose.castro.leon@cern.ch","username":"jose-castro-leon"},"change_message_id":"eb4ec0bb6d78b0bc8685be796d53464a62e0e5a8","unresolved":false,"context_lines":[{"line_number":39,"context_line":"        try:"},{"line_number":40,"context_line":"            principal \u003d kerberos.getServerPrincipalDetails(\u0027HTTP\u0027, servicename)"},{"line_number":41,"context_line":"        except kerberos.KrbError as ex:"},{"line_number":42,"context_line":"            LOG.warn(_(\u0027Error while initializing kerberos library: %s\u0027), ex)"},{"line_number":43,"context_line":"        else:"},{"line_number":44,"context_line":"            LOG.info(_(\u0027Service identified as Kerberos/%s\u0027), principal)"},{"line_number":45,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAVn%2F%2Fwxk%3D","line":42,"in_reply_to":"AAAAVn%2F%2F20s%3D","updated":"2014-03-04 08:32:44.000000000","message":"It is supposed to initialize the library with the Kerberos Principal stored in the keytab file","commit_id":"207b654bce845022653aec8fa9ad340f81ec56c4"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"c3aaf958346e234c10384e2abebd72f3ad3cb6fa","unresolved":false,"context_lines":[{"line_number":101,"context_line":"        elif server_token:"},{"line_number":102,"context_line":"            raise exception.KerberosUnauthorized(token\u003dserver_token)"},{"line_number":103,"context_line":"        else:"},{"line_number":104,"context_line":"            raise exception.Forbidden()"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAVn%2F%2F2zg%3D","line":104,"updated":"2014-03-03 19:23:46.000000000","message":"suggest you add a message","commit_id":"207b654bce845022653aec8fa9ad340f81ec56c4"},{"author":{"_account_id":5575,"name":"Jose Castro Leon","email":"jose.castro.leon@cern.ch","username":"jose-castro-leon"},"change_message_id":"eb4ec0bb6d78b0bc8685be796d53464a62e0e5a8","unresolved":false,"context_lines":[{"line_number":101,"context_line":"        elif server_token:"},{"line_number":102,"context_line":"            raise exception.KerberosUnauthorized(token\u003dserver_token)"},{"line_number":103,"context_line":"        else:"},{"line_number":104,"context_line":"            raise exception.Forbidden()"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAVn%2F%2FwxM%3D","line":104,"in_reply_to":"AAAAVn%2F%2F2zg%3D","updated":"2014-03-04 08:32:44.000000000","message":"OK","commit_id":"207b654bce845022653aec8fa9ad340f81ec56c4"},{"author":{"_account_id":7191,"name":"Jamie Lennox","email":"jamielennox@gmail.com","username":"jamielennox"},"change_message_id":"fb7cb8db9c41acbf80ccc86d86989a69cc5f053c","unresolved":false,"context_lines":[{"line_number":40,"context_line":"        try:"},{"line_number":41,"context_line":"            principal \u003d kerberos.getServerPrincipalDetails(\u0027HTTP\u0027, servicename)"},{"line_number":42,"context_line":"        except kerberos.KrbError as ex:"},{"line_number":43,"context_line":"            LOG.warn(_(\u0027Error while initializing kerberos library: %s\u0027), ex)"},{"line_number":44,"context_line":"        else:"},{"line_number":45,"context_line":"            LOG.info(_(\u0027Service identified as Kerberos/%s\u0027), principal)"},{"line_number":46,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAWH%2F9VOo%3D","line":43,"updated":"2014-04-06 22:39:08.000000000","message":"if there is an error here do we need to remove kerberos from the available plugins list?","commit_id":"fe53f822c379af1931230c59646cbbc6bdf32a4b"},{"author":{"_account_id":7191,"name":"Jamie Lennox","email":"jamielennox@gmail.com","username":"jamielennox"},"change_message_id":"fb7cb8db9c41acbf80ccc86d86989a69cc5f053c","unresolved":false,"context_lines":[{"line_number":64,"context_line":"                    server_token \u003d kerberos.authGSSServerResponse(state)"},{"line_number":65,"context_line":"        except kerberos.GSSError as ex:"},{"line_number":66,"context_line":"            LOG.error(_(\u0027Error during kerberos step: %s\u0027), ex)"},{"line_number":67,"context_line":"            pass"},{"line_number":68,"context_line":"        finally:"},{"line_number":69,"context_line":"            if state:"},{"line_number":70,"context_line":"                kerberos.authGSSServerClean(state)"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAWH%2F9VOw%3D","line":67,"updated":"2014-04-06 22:39:08.000000000","message":"pass is unnecessary","commit_id":"fe53f822c379af1931230c59646cbbc6bdf32a4b"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"be6f416b37052846290e46073867560a8e6bd439","unresolved":false,"context_lines":[{"line_number":21,"context_line":"from keystone import exception"},{"line_number":22,"context_line":"from keystone.openstack.common.gettextutils import _"},{"line_number":23,"context_line":"from keystone.openstack.common import log"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"CONF \u003d config.CONF"},{"line_number":26,"context_line":"METHOD_NAME \u003d \u0027kerberos\u0027"},{"line_number":27,"context_line":"os.environ[\u0027KRB5_KTNAME\u0027] \u003d CONF.kerberos.keytab_file"}],"source_content_type":"text/x-python","patch_set":12,"id":"baada198_45d214d3","line":24,"updated":"2014-07-10 16:02:26.000000000","message":"(nit) newline","commit_id":"8a3d786e4f19f8b3a9b60b3cc732075b987eb8cf"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"be6f416b37052846290e46073867560a8e6bd439","unresolved":false,"context_lines":[{"line_number":34,"context_line":""},{"line_number":35,"context_line":"    method \u003d METHOD_NAME"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"    def __init__(self):"},{"line_number":38,"context_line":"        servicename \u003d CONF.kerberos.service_name"},{"line_number":39,"context_line":"        self.service \u003d \u0027HTTP@%s\u0027 % servicename"},{"line_number":40,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":12,"id":"baada198_65ec7890","line":37,"updated":"2014-07-10 16:02:26.000000000","message":"Do you not need to call super here?","commit_id":"8a3d786e4f19f8b3a9b60b3cc732075b987eb8cf"}],"keystone/common/config.py":[{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"a9335b9867ebcc592ad25463a5c67cb723d746e2","unresolved":false,"context_lines":[{"line_number":510,"context_line":"    \u0027kerberos\u0027: ["},{"line_number":511,"context_line":"        cfg.StrOpt(\u0027service_name\u0027, default\u003d\u0027keystone.example.com\u0027,"},{"line_number":512,"context_line":"                   help\u003d\u0027Name of the service in the keytab file.\u0027),"},{"line_number":513,"context_line":"        cfg.StrOpt(\u0027keytab_file\u0027, default\u003d\u0027/etc/keystone/keystone.keytab\u0027,"},{"line_number":514,"context_line":"                   help\u003d\u0027Location of the keytab file for the service.\u0027)]}"},{"line_number":515,"context_line":""},{"line_number":516,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAVX%2F%2F8lo%3D","line":513,"updated":"2014-02-27 07:58:06.000000000","message":"will a keytab file be checked in?","commit_id":"37eb60cb7249481e66deef93ea289188d2501c4c"}],"keystone/common/wsgi.py":[{"author":{"_account_id":2218,"name":"Adam Young","email":"adam@younglogic.com","username":"ayoung"},"change_message_id":"20fed3fbe9a64c3b34d3650d01e4f4295f03f7b4","unresolved":false,"context_lines":[{"line_number":585,"context_line":"        \u0027title\u0027: error.title,"},{"line_number":586,"context_line":"        \u0027message\u0027: message,"},{"line_number":587,"context_line":"    }}"},{"line_number":588,"context_line":"    headers \u003d error.headers"},{"line_number":589,"context_line":"    if isinstance(error, exception.AuthPluginException):"},{"line_number":590,"context_line":"        body[\u0027error\u0027][\u0027identity\u0027] \u003d error.authentication"},{"line_number":591,"context_line":"    elif isinstance(error, exception.Unauthorized):"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAU3%2F%2FuKw%3D","line":588,"updated":"2014-02-25 04:00:45.000000000","message":"this change seems suspect.","commit_id":"3e392234bf4580bc13633e9a559cb3d9dd15ef02"},{"author":{"_account_id":2218,"name":"Adam Young","email":"adam@younglogic.com","username":"ayoung"},"change_message_id":"633e6c7ff1a65fb2b951ebbf4e349aacc1e7e18f","unresolved":false,"context_lines":[{"line_number":585,"context_line":"        \u0027title\u0027: error.title,"},{"line_number":586,"context_line":"        \u0027message\u0027: message,"},{"line_number":587,"context_line":"    }}"},{"line_number":588,"context_line":"    headers \u003d error.headers"},{"line_number":589,"context_line":"    if isinstance(error, exception.AuthPluginException):"},{"line_number":590,"context_line":"        body[\u0027error\u0027][\u0027identity\u0027] \u003d error.authentication"},{"line_number":591,"context_line":"    elif isinstance(error, exception.Unauthorized):"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAU3%2F%2FdKM%3D","line":588,"in_reply_to":"AAAAU3%2F%2Fse4%3D","updated":"2014-02-26 14:47:11.000000000","message":"is error guaranteed to have a headers field that is an empty array if not negotiate?\nif not, check for presence before setting.","commit_id":"3e392234bf4580bc13633e9a559cb3d9dd15ef02"},{"author":{"_account_id":5575,"name":"Jose Castro Leon","email":"jose.castro.leon@cern.ch","username":"jose-castro-leon"},"change_message_id":"35a73534bd18b7e9c06e21d25d54374afb410755","unresolved":false,"context_lines":[{"line_number":585,"context_line":"        \u0027title\u0027: error.title,"},{"line_number":586,"context_line":"        \u0027message\u0027: message,"},{"line_number":587,"context_line":"    }}"},{"line_number":588,"context_line":"    headers \u003d error.headers"},{"line_number":589,"context_line":"    if isinstance(error, exception.AuthPluginException):"},{"line_number":590,"context_line":"        body[\u0027error\u0027][\u0027identity\u0027] \u003d error.authentication"},{"line_number":591,"context_line":"    elif isinstance(error, exception.Unauthorized):"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAU3%2F%2Fse4%3D","line":588,"in_reply_to":"AAAAU3%2F%2Ft9E%3D","updated":"2014-02-26 14:33:12.000000000","message":"But that\u0027s not how kerberos negotiation works, it needs \u0027WWW-Authenticate: Negotiate\u0027 on the headers.","commit_id":"3e392234bf4580bc13633e9a559cb3d9dd15ef02"},{"author":{"_account_id":1916,"name":"Guang Yee","email":"gyee@suse.com","username":"guang-yee"},"change_message_id":"f2f822955999018a2f80f6eacdc2c74ec5ac6005","unresolved":false,"context_lines":[{"line_number":585,"context_line":"        \u0027title\u0027: error.title,"},{"line_number":586,"context_line":"        \u0027message\u0027: message,"},{"line_number":587,"context_line":"    }}"},{"line_number":588,"context_line":"    headers \u003d error.headers"},{"line_number":589,"context_line":"    if isinstance(error, exception.AuthPluginException):"},{"line_number":590,"context_line":"        body[\u0027error\u0027][\u0027identity\u0027] \u003d error.authentication"},{"line_number":591,"context_line":"    elif isinstance(error, exception.Unauthorized):"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAU3%2F%2Ft9E%3D","line":588,"in_reply_to":"AAAAU3%2F%2FuKw%3D","updated":"2014-02-25 04:28:43.000000000","message":"yeah, seem unnecessary. Error/negotiation should be set in\n\nline 590\n\nbody[\u0027error\u0027][\u0027identity\u0027]\n\nthat\u0027s the payload designed for continuation","commit_id":"3e392234bf4580bc13633e9a559cb3d9dd15ef02"},{"author":{"_account_id":7191,"name":"Jamie Lennox","email":"jamielennox@gmail.com","username":"jamielennox"},"change_message_id":"fb7cb8db9c41acbf80ccc86d86989a69cc5f053c","unresolved":false,"context_lines":[{"line_number":625,"context_line":"        else:"},{"line_number":626,"context_line":"            url \u003d url % CONF"},{"line_number":627,"context_line":""},{"line_number":628,"context_line":"        headers.append((\u0027WWW-Authenticate\u0027, \u0027Keystone uri\u003d\"%s\"\u0027 % url))"},{"line_number":629,"context_line":"    return render_response(status\u003d(error.code, error.title),"},{"line_number":630,"context_line":"                           body\u003dbody,"},{"line_number":631,"context_line":"                           headers\u003dheaders)"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAWH%2F9VOM%3D","line":628,"updated":"2014-04-06 22:39:08.000000000","message":"what happens when this and negotiate are both set?","commit_id":"fe53f822c379af1931230c59646cbbc6bdf32a4b"}],"keystone/contrib/kerberos/middleware.py":[{"author":{"_account_id":7191,"name":"Jamie Lennox","email":"jamielennox@gmail.com","username":"jamielennox"},"change_message_id":"95055d329bcc2430dfa50097c51d2c95a8864c94","unresolved":false,"context_lines":[{"line_number":49,"context_line":""},{"line_number":50,"context_line":"    def create_token(self, context, username, auth):"},{"line_number":51,"context_line":"        context[\u0027REMOTE_USER\u0027] \u003d username"},{"line_number":52,"context_line":"        context[\u0027query_string\u0027] \u003d \u0027nocatalog\u0027"},{"line_number":53,"context_line":"        return auth_v3_controllers.Auth().authenticate_for_token(context, auth)"},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"    def authenticate(self, client_token):"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAUX%2F%2Byms%3D","line":52,"updated":"2014-02-19 02:02:28.000000000","message":"This shouldn\u0027t be set by an auth","commit_id":"d038f40aa5da97bbca18f2a9711e4442c0525f5e"},{"author":{"_account_id":7662,"name":"Rob Crittenden","email":"rcritten@redhat.com","username":"rcritten"},"change_message_id":"3ed92cfaf227c08f793dc1c58c0d35c81785fc42","unresolved":false,"context_lines":[{"line_number":66,"context_line":"                elif rc \u003d\u003d kerberos.AUTH_GSS_CONTINUE:"},{"line_number":67,"context_line":"                    server_token \u003d kerberos.authGSSServerResponse(state)"},{"line_number":68,"context_line":"        except kerberos.GSSError:"},{"line_number":69,"context_line":"            pass"},{"line_number":70,"context_line":"        finally:"},{"line_number":71,"context_line":"            if state:"},{"line_number":72,"context_line":"                kerberos.authGSSServerClean(state)"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAUX%2F%2B2z0%3D","line":69,"updated":"2014-02-18 15:54:37.000000000","message":"You should at least log failures so a user has a chance at debugging failures when GSSError is raised.\n\nAlso, if something goes wrong without raising an exception then this will fall through with no logging at all and no indication of where the failure is.","commit_id":"d038f40aa5da97bbca18f2a9711e4442c0525f5e"},{"author":{"_account_id":7662,"name":"Rob Crittenden","email":"rcritten@redhat.com","username":"rcritten"},"change_message_id":"3ed92cfaf227c08f793dc1c58c0d35c81785fc42","unresolved":false,"context_lines":[{"line_number":95,"context_line":"            if authHeader is None:"},{"line_number":96,"context_line":"                return self.unauthorized_response()"},{"line_number":97,"context_line":""},{"line_number":98,"context_line":"            client_token \u003d \u0027\u0027.join(authHeader.split()[1:])"},{"line_number":99,"context_line":"            server_token, user \u003d self.authenticate(client_token)"},{"line_number":100,"context_line":""},{"line_number":101,"context_line":"            if user:"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAUX%2F%2B2y8%3D","line":98,"updated":"2014-02-18 15:54:37.000000000","message":"I\u0027d put a try/except around this to catch malformed requests.","commit_id":"d038f40aa5da97bbca18f2a9711e4442c0525f5e"}],"keystone/exception.py":[{"author":{"_account_id":2218,"name":"Adam Young","email":"adam@younglogic.com","username":"ayoung"},"change_message_id":"20fed3fbe9a64c3b34d3650d01e4f4295f03f7b4","unresolved":false,"context_lines":[{"line_number":134,"context_line":"    title \u003d \u0027Unauthorized\u0027"},{"line_number":135,"context_line":""},{"line_number":136,"context_line":""},{"line_number":137,"context_line":"class UnauthorizedNegotiate(SecurityError):"},{"line_number":138,"context_line":"    message_format \u003d _(\"The request you have made requires authentication.\")"},{"line_number":139,"context_line":"    code \u003d 401"},{"line_number":140,"context_line":"    title \u003d \u0027Unauthorized\u0027"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAU3%2F%2FuKM%3D","line":137,"updated":"2014-02-25 04:00:45.000000000","message":"Do we really need a different exception for each form of authentication?  I think you can drop this in favor of just Unauthorized,  or extend it to get the headers.","commit_id":"3e392234bf4580bc13633e9a559cb3d9dd15ef02"},{"author":{"_account_id":5575,"name":"Jose Castro Leon","email":"jose.castro.leon@cern.ch","username":"jose-castro-leon"},"change_message_id":"35a73534bd18b7e9c06e21d25d54374afb410755","unresolved":false,"context_lines":[{"line_number":134,"context_line":"    title \u003d \u0027Unauthorized\u0027"},{"line_number":135,"context_line":""},{"line_number":136,"context_line":""},{"line_number":137,"context_line":"class UnauthorizedNegotiate(SecurityError):"},{"line_number":138,"context_line":"    message_format \u003d _(\"The request you have made requires authentication.\")"},{"line_number":139,"context_line":"    code \u003d 401"},{"line_number":140,"context_line":"    title \u003d \u0027Unauthorized\u0027"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAU3%2F%2FseA%3D","line":137,"in_reply_to":"AAAAU3%2F%2FuKM%3D","updated":"2014-02-26 14:33:12.000000000","message":"I\u0027ll review this","commit_id":"3e392234bf4580bc13633e9a559cb3d9dd15ef02"},{"author":{"_account_id":7191,"name":"Jamie Lennox","email":"jamielennox@gmail.com","username":"jamielennox"},"change_message_id":"89c3efa069f93941cd91d2527b456da8713830d6","unresolved":false,"context_lines":[{"line_number":142,"context_line":"                self.headers.append((\u0027WWW-Authenticate\u0027, \u0027Negotiate\u0027))"},{"line_number":143,"context_line":"        else:"},{"line_number":144,"context_line":"            self.headers.append((\u0027WWW-Authenticate\u0027, \u0027Keystone uri\u003d\"%s\"\u0027 % ("},{"line_number":145,"context_line":"                CONF.public_endpoint % CONF)))"},{"line_number":146,"context_line":""},{"line_number":147,"context_line":"class AuthPluginException(Unauthorized):"},{"line_number":148,"context_line":"    message_format \u003d _(\"Authentication plugin error.\")"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAVX%2F%2F2Hw%3D","line":145,"updated":"2014-02-27 21:41:51.000000000","message":"Is it easier to just subclass Unauthorized with a KerberosUnautorized?","commit_id":"622839556396811554b87fd6490fa5aabb31e977"},{"author":{"_account_id":7191,"name":"Jamie Lennox","email":"jamielennox@gmail.com","username":"jamielennox"},"change_message_id":"fb7cb8db9c41acbf80ccc86d86989a69cc5f053c","unresolved":false,"context_lines":[{"line_number":37,"context_line":"    code \u003d None"},{"line_number":38,"context_line":"    title \u003d None"},{"line_number":39,"context_line":"    message_format \u003d None"},{"line_number":40,"context_line":"    headers \u003d []"},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"    def __init__(self, message\u003dNone, **kwargs):"},{"line_number":43,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAWH%2F9VPY%3D","line":40,"updated":"2014-04-06 22:39:08.000000000","message":"this should go into __init__, objects on the class like that are going to get misused","commit_id":"fe53f822c379af1931230c59646cbbc6bdf32a4b"},{"author":{"_account_id":7191,"name":"Jamie Lennox","email":"jamielennox@gmail.com","username":"jamielennox"},"change_message_id":"fb7cb8db9c41acbf80ccc86d86989a69cc5f053c","unresolved":false,"context_lines":[{"line_number":137,"context_line":"    def __init__(self, **kwargs):"},{"line_number":138,"context_line":"        super(SecurityError, self).__init__(**kwargs)"},{"line_number":139,"context_line":"        self.headers.append((\u0027WWW-Authenticate\u0027, \u0027Keystone uri\u003d\"%s\"\u0027 % ("},{"line_number":140,"context_line":"            CONF.public_endpoint % CONF)))"},{"line_number":141,"context_line":""},{"line_number":142,"context_line":""},{"line_number":143,"context_line":"class KerberosUnauthorized(Unauthorized):"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAWH%2F9VOc%3D","line":140,"updated":"2014-04-06 22:39:08.000000000","message":"like here, where you are going to end up with an additional WWW-Authenticate header every time you raise the error","commit_id":"fe53f822c379af1931230c59646cbbc6bdf32a4b"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"be6f416b37052846290e46073867560a8e6bd439","unresolved":false,"context_lines":[{"line_number":134,"context_line":"    title \u003d \u0027Unauthorized\u0027"},{"line_number":135,"context_line":"    www_authenticate \u003d None"},{"line_number":136,"context_line":""},{"line_number":137,"context_line":"    def __init__(self, **kwargs):"},{"line_number":138,"context_line":"        super(SecurityError, self).__init__(**kwargs)"},{"line_number":139,"context_line":"        self.www_authenticate \u003d \u0027Keystone uri\u003d\"%s\"\u0027 % ("},{"line_number":140,"context_line":"            CONF.public_endpoint % CONF)"}],"source_content_type":"text/x-python","patch_set":12,"id":"baada198_b0d88c80","line":137,"updated":"2014-07-10 16:02:26.000000000","message":"I believe some tests are failing because they positional args are being passed into Unauthorized(). Is there are reason that you didn\u0027t add *args?\n\n(nit) I may be nice the split the Unauthorized exception refactoring into a separate patch.","commit_id":"8a3d786e4f19f8b3a9b60b3cc732075b987eb8cf"}],"keystone/tests/config_files/test_kerberos_auth.conf":[{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"3ad759d28c5ffc04703bf7f660a31a78b0966be9","unresolved":false,"context_lines":[{"line_number":1,"context_line":"[auth]"},{"line_number":2,"context_line":"methods \u003d external,password,token,kerberos"},{"line_number":3,"context_line":"kerberos \u003d keystone.auth.plugins.kerberos.Kerberos"}],"source_content_type":"text/plain","patch_set":9,"id":"AAAAWH%2F92bE%3D","line":3,"updated":"2014-04-01 17:03:47.000000000","message":"instead of this new file, make a change to: \n\nhttps://github.com/openstack/keystone/blob/ebb11e4861c6804effabf92d11ffd9112b1a162a/keystone/tests/core.py#L350","commit_id":"398db04589dc2f1ded1a35c4b7f029712c2837fb"}],"keystone/tests/test_kerberos_auth.py":[{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"3ad759d28c5ffc04703bf7f660a31a78b0966be9","unresolved":false,"context_lines":[{"line_number":1,"context_line":"#"},{"line_number":2,"context_line":"# Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":3,"context_line":"# not use this file except in compliance with the License. You may obtain"},{"line_number":4,"context_line":"# a copy of the License at"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAWH%2F92dU%3D","line":1,"updated":"2014-04-01 17:03:47.000000000","message":"extra line, remove","commit_id":"398db04589dc2f1ded1a35c4b7f029712c2837fb"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"3ad759d28c5ffc04703bf7f660a31a78b0966be9","unresolved":false,"context_lines":[{"line_number":13,"context_line":""},{"line_number":14,"context_line":"import kerberos"},{"line_number":15,"context_line":"import mock"},{"line_number":16,"context_line":"import uuid"},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"from keystone import auth"},{"line_number":19,"context_line":"from keystone import exception"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAWH%2F93U8%3D","line":16,"updated":"2014-04-01 17:03:47.000000000","message":"uuid is standard lib, so it should be above kerberos and mock, with a blank line between standard and imported libs.","commit_id":"398db04589dc2f1ded1a35c4b7f029712c2837fb"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"3ad759d28c5ffc04703bf7f660a31a78b0966be9","unresolved":false,"context_lines":[{"line_number":29,"context_line":"        self.load_fixtures(tests.default_fixtures)"},{"line_number":30,"context_line":"        self.api \u003d auth.controllers.Auth()"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"    def config_files(self):"},{"line_number":33,"context_line":"        config_files \u003d super(TestKerberosAuthPlugin, self).config_files()"},{"line_number":34,"context_line":"        config_files.append(tests.dirs.tests_conf(\u0027test_kerberos_auth.conf\u0027))"},{"line_number":35,"context_line":"        return config_files"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAWH%2F92aQ%3D","line":32,"updated":"2014-04-01 17:03:47.000000000","message":"this can be removed if you add to: \nhttps://github.com/openstack/keystone/blob/ebb11e4861c6804effabf92d11ffd9112b1a162a/keystone/tests/core.py#L350","commit_id":"398db04589dc2f1ded1a35c4b7f029712c2837fb"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"3ad759d28c5ffc04703bf7f660a31a78b0966be9","unresolved":false,"context_lines":[{"line_number":34,"context_line":"        config_files.append(tests.dirs.tests_conf(\u0027test_kerberos_auth.conf\u0027))"},{"line_number":35,"context_line":"        return config_files"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"    def config_overrides(self):"},{"line_number":38,"context_line":"        super(TestKerberosAuthPlugin, self).config_overrides()"},{"line_number":39,"context_line":"        self.config_fixture.config("},{"line_number":40,"context_line":"            group\u003d\u0027auth\u0027,"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAWH%2F92aE%3D","line":37,"updated":"2014-04-01 17:03:47.000000000","message":"this can likely be removed too","commit_id":"398db04589dc2f1ded1a35c4b7f029712c2837fb"}],"requirements.txt":[{"author":{"_account_id":2218,"name":"Adam Young","email":"adam@younglogic.com","username":"ayoung"},"change_message_id":"20fed3fbe9a64c3b34d3650d01e4f4295f03f7b4","unresolved":false,"context_lines":[{"line_number":22,"context_line":"dogpile.cache\u003e\u003d0.5.0"},{"line_number":23,"context_line":"jsonschema\u003e\u003d2.0.0,\u003c3.0.0"},{"line_number":24,"context_line":"pycadf\u003e\u003d0.1.9"},{"line_number":25,"context_line":"kerberos"},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"# KDS exclusive dependencies"},{"line_number":28,"context_line":""}],"source_content_type":"text/plain","patch_set":4,"id":"AAAAU3%2F%2FuJk%3D","line":25,"updated":"2014-02-25 04:00:45.000000000","message":"This is a pretty significant addition.","commit_id":"3e392234bf4580bc13633e9a559cb3d9dd15ef02"},{"author":{"_account_id":5575,"name":"Jose Castro Leon","email":"jose.castro.leon@cern.ch","username":"jose-castro-leon"},"change_message_id":"35a73534bd18b7e9c06e21d25d54374afb410755","unresolved":false,"context_lines":[{"line_number":22,"context_line":"dogpile.cache\u003e\u003d0.5.0"},{"line_number":23,"context_line":"jsonschema\u003e\u003d2.0.0,\u003c3.0.0"},{"line_number":24,"context_line":"pycadf\u003e\u003d0.1.9"},{"line_number":25,"context_line":"kerberos"},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"# KDS exclusive dependencies"},{"line_number":28,"context_line":""}],"source_content_type":"text/plain","patch_set":4,"id":"AAAAU3%2F%2Fsec%3D","line":25,"in_reply_to":"AAAAU3%2F%2FuJk%3D","updated":"2014-02-26 14:33:12.000000000","message":"any suggestion to avoid it?","commit_id":"3e392234bf4580bc13633e9a559cb3d9dd15ef02"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"361da51eb40e7235fca8603ef37604b8fe759c0c","unresolved":false,"context_lines":[{"line_number":21,"context_line":"dogpile.cache\u003e\u003d0.5.0"},{"line_number":22,"context_line":"jsonschema\u003e\u003d2.0.0,\u003c3.0.0"},{"line_number":23,"context_line":"pycadf\u003e\u003d0.4.1"},{"line_number":24,"context_line":"kerberos"}],"source_content_type":"text/plain","patch_set":11,"id":"9ad9bd40_099f8453","line":24,"updated":"2014-05-01 14:20:17.000000000","message":"what about using requests_kerberos? \n\nhttps://pypi.python.org/pypi/requests-kerberos/\n\nIt seems like there is more documentation for requests kerberos","commit_id":"6397d6c58c2807f1cd0642d3506d4a19225622c0"},{"author":{"_account_id":2218,"name":"Adam Young","email":"adam@younglogic.com","username":"ayoung"},"change_message_id":"e8bd8428ea4c26ae4b8802a44a98b0fef218b9ef","unresolved":false,"context_lines":[{"line_number":21,"context_line":"dogpile.cache\u003e\u003d0.5.0"},{"line_number":22,"context_line":"jsonschema\u003e\u003d2.0.0,\u003c3.0.0"},{"line_number":23,"context_line":"pycadf\u003e\u003d0.4.1"},{"line_number":24,"context_line":"kerberos"}],"source_content_type":"text/plain","patch_set":11,"id":"9ad9bd40_49c7cc45","line":24,"in_reply_to":"9ad9bd40_099f8453","updated":"2014-05-01 14:22:53.000000000","message":"Different review for that, and it solves a different purpose.  This is s the server side piece.\nrequests-kerberos is the client piece and we are waiting for an updated release that supports py33 from them.","commit_id":"6397d6c58c2807f1cd0642d3506d4a19225622c0"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"1d68253a630555041116f7b534472cf126a6dfb9","unresolved":false,"context_lines":[{"line_number":21,"context_line":"dogpile.cache\u003e\u003d0.5.0"},{"line_number":22,"context_line":"jsonschema\u003e\u003d2.0.0,\u003c3.0.0"},{"line_number":23,"context_line":"pycadf\u003e\u003d0.4.1"},{"line_number":24,"context_line":"kerberos"}],"source_content_type":"text/plain","patch_set":11,"id":"9ad9bd40_892c74ad","line":24,"in_reply_to":"9ad9bd40_49c7cc45","updated":"2014-05-01 14:37:56.000000000","message":"makes sense, thanks @ayoung","commit_id":"6397d6c58c2807f1cd0642d3506d4a19225622c0"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"be6f416b37052846290e46073867560a8e6bd439","unresolved":false,"context_lines":[{"line_number":22,"context_line":"jsonschema\u003e\u003d2.0.0,\u003c3.0.0"},{"line_number":23,"context_line":"pycadf\u003e\u003d0.4.1"},{"line_number":24,"context_line":"posix_ipc"},{"line_number":25,"context_line":"kerberos"}],"source_content_type":"text/plain","patch_set":12,"id":"baada198_257d20e8","line":25,"updated":"2014-07-10 16:02:26.000000000","message":"I didn\u0027t see this in global requirements. Is there a patch to get that in there as well?","commit_id":"8a3d786e4f19f8b3a9b60b3cc732075b987eb8cf"}]}
