)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"09bb85babd29438867bf5f6423f789252a1c72c1","unresolved":false,"context_lines":[{"line_number":7,"context_line":"Enable sensitive substitutions into whitelisted domain configs"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Allow whitelisted domain config options to specify string"},{"line_number":10,"context_line":"substitutions of sensitive options."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"Partially Implements: blueprint domain-config-ext"},{"line_number":13,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":23,"id":"9a80dd14_6499fe6d","line":10,"updated":"2015-03-11 22:16:03.000000000","message":"why are we supporting this? Seems like a security vulnerability waiting to happen.","commit_id":"5b2a2606c552dd77d0979aa40d006d60fa509eba"},{"author":{"_account_id":2903,"name":"Morgan Fainberg","email":"morgan.fainberg@gmail.com","username":"mdrnstm"},"change_message_id":"63c0bd7e01b5180bafda764a3ca9339be84f626a","unresolved":false,"context_lines":[{"line_number":7,"context_line":"Enable sensitive substitutions into whitelisted domain configs"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Allow whitelisted domain config options to specify string"},{"line_number":10,"context_line":"substitutions of sensitive options."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"Partially Implements: blueprint domain-config-ext"},{"line_number":13,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":23,"id":"9a80dd14_b63b24c7","line":10,"in_reply_to":"9a80dd14_6499fe6d","updated":"2015-03-12 01:03:06.000000000","message":"The phrasing on the commit could be improved. I don\u0027t know how you\u0027d consume sensitive information in (for example) a connection string w/o some sort of substitution.","commit_id":"5b2a2606c552dd77d0979aa40d006d60fa509eba"},{"author":{"_account_id":9142,"name":"Samuel de Medeiros Queiroz","email":"samueldmq@lsd.ufcg.edu.br","username":"samuel-z","inactive":true},"change_message_id":"cd356bcc862e8f048ca49482136ac1e43879d665","unresolved":false,"context_lines":[{"line_number":7,"context_line":"Enable sensitive substitutions into whitelisted domain configs"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Allow whitelisted domain config options to specify string"},{"line_number":10,"context_line":"substitutions of sensitive options."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"Partially Implements: blueprint domain-config-ext"},{"line_number":13,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":23,"id":"9a80dd14_439b07c9","line":10,"in_reply_to":"9a80dd14_b63b24c7","updated":"2015-03-12 03:29:21.000000000","message":"I didn\u0027t realize get_config_with_sensitive_info was used as the point of consummation of options. Thank you for making it clear.","commit_id":"5b2a2606c552dd77d0979aa40d006d60fa509eba"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"7931345e8dc989eb6b658f6e8149828a0dcd4e14","unresolved":false,"context_lines":[{"line_number":7,"context_line":"Enable sensitive substitutions into whitelisted domain configs"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Allow whitelisted domain config options to specify string"},{"line_number":10,"context_line":"substitutions of sensitive options."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"Partially Implements: blueprint domain-config-ext"},{"line_number":13,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":23,"id":"9a80dd14_34b1e2e1","line":10,"in_reply_to":"9a80dd14_b63b24c7","updated":"2015-03-14 09:44:52.000000000","message":"I\u0027ll rephrase.","commit_id":"5b2a2606c552dd77d0979aa40d006d60fa509eba"}],"keystone/resource/core.py":[{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"c081ac809062ffc0c643a38b7385d261d983da65","unresolved":false,"context_lines":[{"line_number":1198,"context_line":"                try:"},{"line_number":1199,"context_line":"                    each_whitelisted[\u0027value\u0027] \u003d ("},{"line_number":1200,"context_line":"                        each_whitelisted[\u0027value\u0027] %"},{"line_number":1201,"context_line":"                        {each_sensitive[\u0027option\u0027]: each_sensitive[\u0027value\u0027]})"},{"line_number":1202,"context_line":"                except KeyError:"},{"line_number":1203,"context_line":"                    pass"},{"line_number":1204,"context_line":"        return self._list_to_config(whitelisted, sensitive)"}],"source_content_type":"text/x-python","patch_set":25,"id":"9a80dd14_6091ca99","line":1201,"updated":"2015-03-12 14:13:48.000000000","message":"build a dict with all the sensitive options then don\u0027t need a double loop.","commit_id":"5bec521a94ba5c08d1137c00a0b042931699cd85"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"65155796ff78cbaa79c04bbd97f2d68eeac6b4aa","unresolved":false,"context_lines":[{"line_number":1198,"context_line":"                try:"},{"line_number":1199,"context_line":"                    each_whitelisted[\u0027value\u0027] \u003d ("},{"line_number":1200,"context_line":"                        each_whitelisted[\u0027value\u0027] %"},{"line_number":1201,"context_line":"                        {each_sensitive[\u0027option\u0027]: each_sensitive[\u0027value\u0027]})"},{"line_number":1202,"context_line":"                except KeyError:"},{"line_number":1203,"context_line":"                    pass"},{"line_number":1204,"context_line":"        return self._list_to_config(whitelisted, sensitive)"}],"source_content_type":"text/x-python","patch_set":25,"id":"9a80dd14_f4c8bca9","line":1201,"in_reply_to":"9a80dd14_6091ca99","updated":"2015-03-16 08:57:18.000000000","message":"Done","commit_id":"5bec521a94ba5c08d1137c00a0b042931699cd85"},{"author":{"_account_id":11022,"name":"Rodrigo Duarte Sousa","email":"rodrigodsousa@gmail.com","username":"rodrigods"},"change_message_id":"5e0ad6a076b10f5c16419dbdc9f7ba1096c541ad","unresolved":false,"context_lines":[{"line_number":13,"context_line":"\"\"\"Main entry point into the resource service.\"\"\""},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"import abc"},{"line_number":16,"context_line":"import copy"},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"from oslo_config import cfg"},{"line_number":19,"context_line":"from oslo_log import log"}],"source_content_type":"text/x-python","patch_set":27,"id":"9a80dd14_f6cd005e","line":16,"updated":"2015-03-16 13:40:32.000000000","message":"unused (one of the issues with pep8 besides the trailing spaces below)","commit_id":"dcd57507a78a5fda972a42c9f41f5ea9565c6a46"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"be19cdc8eaccf31291cb09cb1f7cc0cc37909ed0","unresolved":false,"context_lines":[{"line_number":13,"context_line":"\"\"\"Main entry point into the resource service.\"\"\""},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"import abc"},{"line_number":16,"context_line":"import copy"},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"from oslo_config import cfg"},{"line_number":19,"context_line":"from oslo_log import log"}],"source_content_type":"text/x-python","patch_set":27,"id":"9a80dd14_e19ffc4d","line":16,"in_reply_to":"9a80dd14_f6cd005e","updated":"2015-03-16 14:04:31.000000000","message":"Done","commit_id":"dcd57507a78a5fda972a42c9f41f5ea9565c6a46"},{"author":{"_account_id":11022,"name":"Rodrigo Duarte Sousa","email":"rodrigodsousa@gmail.com","username":"rodrigods"},"change_message_id":"5e0ad6a076b10f5c16419dbdc9f7ba1096c541ad","unresolved":false,"context_lines":[{"line_number":1194,"context_line":"                                             sensitive\u003dTrue)"},{"line_number":1195,"context_line":""},{"line_number":1196,"context_line":"        # Check if there are any sensitive substitutions needed. We first try"},{"line_number":1197,"context_line":"        # and simply ensure any sensitive otpions that have valid substitution"},{"line_number":1198,"context_line":"        # references in the whitelisted otpions are substittuted. We then check"},{"line_number":1199,"context_line":"        # the resulting whitelitsed option and raise a warning if there"},{"line_number":1200,"context_line":"        # appears to be an unmatched or incorrectly constructed substitution"}],"source_content_type":"text/x-python","patch_set":27,"id":"9a80dd14_3665d8ae","line":1197,"updated":"2015-03-16 13:40:32.000000000","message":"s/otpions/options","commit_id":"dcd57507a78a5fda972a42c9f41f5ea9565c6a46"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"be19cdc8eaccf31291cb09cb1f7cc0cc37909ed0","unresolved":false,"context_lines":[{"line_number":1194,"context_line":"                                             sensitive\u003dTrue)"},{"line_number":1195,"context_line":""},{"line_number":1196,"context_line":"        # Check if there are any sensitive substitutions needed. We first try"},{"line_number":1197,"context_line":"        # and simply ensure any sensitive otpions that have valid substitution"},{"line_number":1198,"context_line":"        # references in the whitelisted otpions are substittuted. We then check"},{"line_number":1199,"context_line":"        # the resulting whitelitsed option and raise a warning if there"},{"line_number":1200,"context_line":"        # appears to be an unmatched or incorrectly constructed substitution"}],"source_content_type":"text/x-python","patch_set":27,"id":"9a80dd14_a19a645f","line":1197,"in_reply_to":"9a80dd14_3665d8ae","updated":"2015-03-16 14:04:31.000000000","message":"Done","commit_id":"dcd57507a78a5fda972a42c9f41f5ea9565c6a46"},{"author":{"_account_id":11022,"name":"Rodrigo Duarte Sousa","email":"rodrigodsousa@gmail.com","username":"rodrigods"},"change_message_id":"5e0ad6a076b10f5c16419dbdc9f7ba1096c541ad","unresolved":false,"context_lines":[{"line_number":1195,"context_line":""},{"line_number":1196,"context_line":"        # Check if there are any sensitive substitutions needed. We first try"},{"line_number":1197,"context_line":"        # and simply ensure any sensitive otpions that have valid substitution"},{"line_number":1198,"context_line":"        # references in the whitelisted otpions are substittuted. We then check"},{"line_number":1199,"context_line":"        # the resulting whitelitsed option and raise a warning if there"},{"line_number":1200,"context_line":"        # appears to be an unmatched or incorrectly constructed substitution"},{"line_number":1201,"context_line":"        # reference. To avoid the risk of logging any sensitive options that"}],"source_content_type":"text/x-python","patch_set":27,"id":"9a80dd14_1601b4ae","line":1198,"updated":"2015-03-16 13:40:32.000000000","message":"s/otpions/options","commit_id":"dcd57507a78a5fda972a42c9f41f5ea9565c6a46"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"be19cdc8eaccf31291cb09cb1f7cc0cc37909ed0","unresolved":false,"context_lines":[{"line_number":1195,"context_line":""},{"line_number":1196,"context_line":"        # Check if there are any sensitive substitutions needed. We first try"},{"line_number":1197,"context_line":"        # and simply ensure any sensitive otpions that have valid substitution"},{"line_number":1198,"context_line":"        # references in the whitelisted otpions are substittuted. We then check"},{"line_number":1199,"context_line":"        # the resulting whitelitsed option and raise a warning if there"},{"line_number":1200,"context_line":"        # appears to be an unmatched or incorrectly constructed substitution"},{"line_number":1201,"context_line":"        # reference. To avoid the risk of logging any sensitive options that"}],"source_content_type":"text/x-python","patch_set":27,"id":"9a80dd14_c1a4b8a7","line":1198,"in_reply_to":"9a80dd14_1601b4ae","updated":"2015-03-16 14:04:31.000000000","message":"Done","commit_id":"dcd57507a78a5fda972a42c9f41f5ea9565c6a46"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"c43bcebc022b5589e1ea4eb89c5c65f1dd4bf89c","unresolved":false,"context_lines":[{"line_number":1194,"context_line":""},{"line_number":1195,"context_line":"        # Check if there are any sensitive substitutions needed. We first try"},{"line_number":1196,"context_line":"        # and simply ensure any sensitive options that have valid substitution"},{"line_number":1197,"context_line":"        # references in the whitelisted options are substittuted. We then check"},{"line_number":1198,"context_line":"        # the resulting whitelitsed option and raise a warning if there"},{"line_number":1199,"context_line":"        # appears to be an unmatched or incorrectly constructed substitution"},{"line_number":1200,"context_line":"        # reference. To avoid the risk of logging any sensitive options that"}],"source_content_type":"text/x-python","patch_set":29,"id":"9a80dd14_012f9e89","line":1197,"updated":"2015-03-16 18:59:07.000000000","message":"change \"substittuted\" to \"substituted\"","commit_id":"bf000d193e48f499db9c5fc853ce974a87cf359a"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"a42ebd53cb0f4a6ddc05b20fbcafbe928c821ca3","unresolved":false,"context_lines":[{"line_number":1194,"context_line":""},{"line_number":1195,"context_line":"        # Check if there are any sensitive substitutions needed. We first try"},{"line_number":1196,"context_line":"        # and simply ensure any sensitive options that have valid substitution"},{"line_number":1197,"context_line":"        # references in the whitelisted options are substittuted. We then check"},{"line_number":1198,"context_line":"        # the resulting whitelitsed option and raise a warning if there"},{"line_number":1199,"context_line":"        # appears to be an unmatched or incorrectly constructed substitution"},{"line_number":1200,"context_line":"        # reference. To avoid the risk of logging any sensitive options that"}],"source_content_type":"text/x-python","patch_set":29,"id":"9a80dd14_96459f70","line":1197,"updated":"2015-03-16 18:53:53.000000000","message":"substituted*","commit_id":"bf000d193e48f499db9c5fc853ce974a87cf359a"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"efd366475e8eb872a3b6d07484c60a4f90526d29","unresolved":false,"context_lines":[{"line_number":1194,"context_line":""},{"line_number":1195,"context_line":"        # Check if there are any sensitive substitutions needed. We first try"},{"line_number":1196,"context_line":"        # and simply ensure any sensitive options that have valid substitution"},{"line_number":1197,"context_line":"        # references in the whitelisted options are substittuted. We then check"},{"line_number":1198,"context_line":"        # the resulting whitelitsed option and raise a warning if there"},{"line_number":1199,"context_line":"        # appears to be an unmatched or incorrectly constructed substitution"},{"line_number":1200,"context_line":"        # reference. To avoid the risk of logging any sensitive options that"}],"source_content_type":"text/x-python","patch_set":29,"id":"9a80dd14_4267cab7","line":1197,"in_reply_to":"9a80dd14_012f9e89","updated":"2015-03-17 09:17:18.000000000","message":"Done","commit_id":"bf000d193e48f499db9c5fc853ce974a87cf359a"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"a42ebd53cb0f4a6ddc05b20fbcafbe928c821ca3","unresolved":false,"context_lines":[{"line_number":1195,"context_line":"        # Check if there are any sensitive substitutions needed. We first try"},{"line_number":1196,"context_line":"        # and simply ensure any sensitive options that have valid substitution"},{"line_number":1197,"context_line":"        # references in the whitelisted options are substittuted. We then check"},{"line_number":1198,"context_line":"        # the resulting whitelitsed option and raise a warning if there"},{"line_number":1199,"context_line":"        # appears to be an unmatched or incorrectly constructed substitution"},{"line_number":1200,"context_line":"        # reference. To avoid the risk of logging any sensitive options that"},{"line_number":1201,"context_line":"        # have already been substituted, we first take a copy of the"}],"source_content_type":"text/x-python","patch_set":29,"id":"9a80dd14_f655fb1d","line":1198,"updated":"2015-03-16 18:53:53.000000000","message":"whitelisted*","commit_id":"bf000d193e48f499db9c5fc853ce974a87cf359a"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"efd366475e8eb872a3b6d07484c60a4f90526d29","unresolved":false,"context_lines":[{"line_number":1195,"context_line":"        # Check if there are any sensitive substitutions needed. We first try"},{"line_number":1196,"context_line":"        # and simply ensure any sensitive options that have valid substitution"},{"line_number":1197,"context_line":"        # references in the whitelisted options are substittuted. We then check"},{"line_number":1198,"context_line":"        # the resulting whitelitsed option and raise a warning if there"},{"line_number":1199,"context_line":"        # appears to be an unmatched or incorrectly constructed substitution"},{"line_number":1200,"context_line":"        # reference. To avoid the risk of logging any sensitive options that"},{"line_number":1201,"context_line":"        # have already been substituted, we first take a copy of the"}],"source_content_type":"text/x-python","patch_set":29,"id":"9a80dd14_6203eebe","line":1198,"in_reply_to":"9a80dd14_f655fb1d","updated":"2015-03-17 09:17:18.000000000","message":"Done","commit_id":"bf000d193e48f499db9c5fc853ce974a87cf359a"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"c43bcebc022b5589e1ea4eb89c5c65f1dd4bf89c","unresolved":false,"context_lines":[{"line_number":1204,"context_line":"        # Build a dict of the sensitive options ready to try substitution"},{"line_number":1205,"context_line":"        sensitive_dict \u003d {}"},{"line_number":1206,"context_line":"        for each_sensitive in sensitive:"},{"line_number":1207,"context_line":"            sensitive_dict[each_sensitive[\u0027option\u0027]] \u003d each_sensitive[\u0027value\u0027]"},{"line_number":1208,"context_line":""},{"line_number":1209,"context_line":"        for each_whitelisted in whitelisted:"},{"line_number":1210,"context_line":"            if not isinstance(each_whitelisted[\u0027value\u0027], six.string_types):"}],"source_content_type":"text/x-python","patch_set":29,"id":"9a80dd14_219902d1","line":1207,"updated":"2015-03-16 18:59:07.000000000","message":"simplify 1205-7:\n\n sensitive_dict \u003d dict((s[\u0027option\u0027], s[\u0027value\u0027]) for s in sensitive)","commit_id":"bf000d193e48f499db9c5fc853ce974a87cf359a"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"efd366475e8eb872a3b6d07484c60a4f90526d29","unresolved":false,"context_lines":[{"line_number":1204,"context_line":"        # Build a dict of the sensitive options ready to try substitution"},{"line_number":1205,"context_line":"        sensitive_dict \u003d {}"},{"line_number":1206,"context_line":"        for each_sensitive in sensitive:"},{"line_number":1207,"context_line":"            sensitive_dict[each_sensitive[\u0027option\u0027]] \u003d each_sensitive[\u0027value\u0027]"},{"line_number":1208,"context_line":""},{"line_number":1209,"context_line":"        for each_whitelisted in whitelisted:"},{"line_number":1210,"context_line":"            if not isinstance(each_whitelisted[\u0027value\u0027], six.string_types):"}],"source_content_type":"text/x-python","patch_set":29,"id":"9a80dd14_a2240661","line":1207,"in_reply_to":"9a80dd14_219902d1","updated":"2015-03-17 09:17:18.000000000","message":"So good idea...although that runs fowl of pep8....need to use list comprehension...so I think this is the equivalent:\n\nsensitive_dict \u003d {s[\u0027option\u0027]: s[\u0027value\u0027] for s in sensitive}","commit_id":"bf000d193e48f499db9c5fc853ce974a87cf359a"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"c43bcebc022b5589e1ea4eb89c5c65f1dd4bf89c","unresolved":false,"context_lines":[{"line_number":1208,"context_line":""},{"line_number":1209,"context_line":"        for each_whitelisted in whitelisted:"},{"line_number":1210,"context_line":"            if not isinstance(each_whitelisted[\u0027value\u0027], six.string_types):"},{"line_number":1211,"context_line":"                continue"},{"line_number":1212,"context_line":""},{"line_number":1213,"context_line":"            # Store away the original value incase we need to raise a warning"},{"line_number":1214,"context_line":"            # after substitution - since we know it\u0027s a string (and hence"}],"source_content_type":"text/x-python","patch_set":29,"id":"9a80dd14_8112ae07","line":1211,"updated":"2015-03-16 18:59:07.000000000","message":"add a comment why continue here... why wouldn\u0027t the value be a string type?","commit_id":"bf000d193e48f499db9c5fc853ce974a87cf359a"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"efd366475e8eb872a3b6d07484c60a4f90526d29","unresolved":false,"context_lines":[{"line_number":1208,"context_line":""},{"line_number":1209,"context_line":"        for each_whitelisted in whitelisted:"},{"line_number":1210,"context_line":"            if not isinstance(each_whitelisted[\u0027value\u0027], six.string_types):"},{"line_number":1211,"context_line":"                continue"},{"line_number":1212,"context_line":""},{"line_number":1213,"context_line":"            # Store away the original value incase we need to raise a warning"},{"line_number":1214,"context_line":"            # after substitution - since we know it\u0027s a string (and hence"}],"source_content_type":"text/x-python","patch_set":29,"id":"9a80dd14_e2cb5e71","line":1211,"in_reply_to":"9a80dd14_8112ae07","updated":"2015-03-17 09:17:18.000000000","message":"Done","commit_id":"bf000d193e48f499db9c5fc853ce974a87cf359a"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"c43bcebc022b5589e1ea4eb89c5c65f1dd4bf89c","unresolved":false,"context_lines":[{"line_number":1212,"context_line":""},{"line_number":1213,"context_line":"            # Store away the original value incase we need to raise a warning"},{"line_number":1214,"context_line":"            # after substitution - since we know it\u0027s a string (and hence"},{"line_number":1215,"context_line":"            # immutable), just doing an assignment will do the trick."},{"line_number":1216,"context_line":"            original_value \u003d each_whitelisted[\u0027value\u0027]"},{"line_number":1217,"context_line":"            try:"},{"line_number":1218,"context_line":"                each_whitelisted[\u0027value\u0027] \u003d ("}],"source_content_type":"text/x-python","patch_set":29,"id":"9a80dd14_41a436b9","line":1215,"updated":"2015-03-16 18:59:07.000000000","message":"this is a lot of comment for one line of code which is just an assignment...","commit_id":"bf000d193e48f499db9c5fc853ce974a87cf359a"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"efd366475e8eb872a3b6d07484c60a4f90526d29","unresolved":false,"context_lines":[{"line_number":1212,"context_line":""},{"line_number":1213,"context_line":"            # Store away the original value incase we need to raise a warning"},{"line_number":1214,"context_line":"            # after substitution - since we know it\u0027s a string (and hence"},{"line_number":1215,"context_line":"            # immutable), just doing an assignment will do the trick."},{"line_number":1216,"context_line":"            original_value \u003d each_whitelisted[\u0027value\u0027]"},{"line_number":1217,"context_line":"            try:"},{"line_number":1218,"context_line":"                each_whitelisted[\u0027value\u0027] \u003d ("}],"source_content_type":"text/x-python","patch_set":29,"id":"9a80dd14_22c65669","line":1215,"in_reply_to":"9a80dd14_41a436b9","updated":"2015-03-17 09:17:18.000000000","message":"Done","commit_id":"bf000d193e48f499db9c5fc853ce974a87cf359a"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"c43bcebc022b5589e1ea4eb89c5c65f1dd4bf89c","unresolved":false,"context_lines":[{"line_number":1218,"context_line":"                each_whitelisted[\u0027value\u0027] \u003d ("},{"line_number":1219,"context_line":"                    each_whitelisted[\u0027value\u0027] % sensitive_dict)"},{"line_number":1220,"context_line":"            except (KeyError, ValueError, TypeError):"},{"line_number":1221,"context_line":"                pass"},{"line_number":1222,"context_line":""},{"line_number":1223,"context_line":"            if each_whitelisted[\u0027value\u0027].find(\u0027%(\u0027) !\u003d -1:"},{"line_number":1224,"context_line":"                # We keep this at a warning in case perhaps not all the config"}],"source_content_type":"text/x-python","patch_set":29,"id":"9a80dd14_019a3e6e","line":1221,"updated":"2015-03-16 18:59:07.000000000","message":"add a comment why it\u0027s ok to ignore these errors.\n\nseems like should only go into logging a warning if get one of these exceptions?","commit_id":"bf000d193e48f499db9c5fc853ce974a87cf359a"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"efd366475e8eb872a3b6d07484c60a4f90526d29","unresolved":false,"context_lines":[{"line_number":1218,"context_line":"                each_whitelisted[\u0027value\u0027] \u003d ("},{"line_number":1219,"context_line":"                    each_whitelisted[\u0027value\u0027] % sensitive_dict)"},{"line_number":1220,"context_line":"            except (KeyError, ValueError, TypeError):"},{"line_number":1221,"context_line":"                pass"},{"line_number":1222,"context_line":""},{"line_number":1223,"context_line":"            if each_whitelisted[\u0027value\u0027].find(\u0027%(\u0027) !\u003d -1:"},{"line_number":1224,"context_line":"                # We keep this at a warning in case perhaps not all the config"}],"source_content_type":"text/x-python","patch_set":29,"id":"9a80dd14_828b821d","line":1221,"in_reply_to":"9a80dd14_019a3e6e","updated":"2015-03-17 09:17:18.000000000","message":"Done","commit_id":"bf000d193e48f499db9c5fc853ce974a87cf359a"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"c43bcebc022b5589e1ea4eb89c5c65f1dd4bf89c","unresolved":false,"context_lines":[{"line_number":1220,"context_line":"            except (KeyError, ValueError, TypeError):"},{"line_number":1221,"context_line":"                pass"},{"line_number":1222,"context_line":""},{"line_number":1223,"context_line":"            if each_whitelisted[\u0027value\u0027].find(\u0027%(\u0027) !\u003d -1:"},{"line_number":1224,"context_line":"                # We keep this at a warning in case perhaps not all the config"},{"line_number":1225,"context_line":"                # options have yet been defined."},{"line_number":1226,"context_line":"                LOG.warn(_LW("}],"source_content_type":"text/x-python","patch_set":29,"id":"9a80dd14_01ecfef2","line":1223,"updated":"2015-03-16 18:59:07.000000000","message":"use \u0027%(\u0027 in each_whitelisted[\u0027value\u0027]\n\nAlso, this doesn\u0027t handle escaped %s properly, e.g., %%(something)","commit_id":"bf000d193e48f499db9c5fc853ce974a87cf359a"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"efd366475e8eb872a3b6d07484c60a4f90526d29","unresolved":false,"context_lines":[{"line_number":1220,"context_line":"            except (KeyError, ValueError, TypeError):"},{"line_number":1221,"context_line":"                pass"},{"line_number":1222,"context_line":""},{"line_number":1223,"context_line":"            if each_whitelisted[\u0027value\u0027].find(\u0027%(\u0027) !\u003d -1:"},{"line_number":1224,"context_line":"                # We keep this at a warning in case perhaps not all the config"},{"line_number":1225,"context_line":"                # options have yet been defined."},{"line_number":1226,"context_line":"                LOG.warn(_LW("}],"source_content_type":"text/x-python","patch_set":29,"id":"9a80dd14_66abf475","line":1223,"in_reply_to":"9a80dd14_01ecfef2","updated":"2015-03-17 09:17:18.000000000","message":"have changed the logic here, so I don\u0027t think this test is needed any more","commit_id":"bf000d193e48f499db9c5fc853ce974a87cf359a"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"c43bcebc022b5589e1ea4eb89c5c65f1dd4bf89c","unresolved":false,"context_lines":[{"line_number":1222,"context_line":""},{"line_number":1223,"context_line":"            if each_whitelisted[\u0027value\u0027].find(\u0027%(\u0027) !\u003d -1:"},{"line_number":1224,"context_line":"                # We keep this at a warning in case perhaps not all the config"},{"line_number":1225,"context_line":"                # options have yet been defined."},{"line_number":1226,"context_line":"                LOG.warn(_LW("},{"line_number":1227,"context_line":"                    \u0027Found what looks like an unmatched or incorrectly \u0027"},{"line_number":1228,"context_line":"                    \u0027constructucted config option substitution reference - \u0027"}],"source_content_type":"text/x-python","patch_set":29,"id":"9a80dd14_01d6bef1","line":1225,"updated":"2015-03-16 18:59:07.000000000","message":"this info should be in the warning message that the admin can read, putting it here as a comment in the code isn\u0027t too useful to admins. e.g., \"this message may be because not all the config options have yet been defined\".","commit_id":"bf000d193e48f499db9c5fc853ce974a87cf359a"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"efd366475e8eb872a3b6d07484c60a4f90526d29","unresolved":false,"context_lines":[{"line_number":1222,"context_line":""},{"line_number":1223,"context_line":"            if each_whitelisted[\u0027value\u0027].find(\u0027%(\u0027) !\u003d -1:"},{"line_number":1224,"context_line":"                # We keep this at a warning in case perhaps not all the config"},{"line_number":1225,"context_line":"                # options have yet been defined."},{"line_number":1226,"context_line":"                LOG.warn(_LW("},{"line_number":1227,"context_line":"                    \u0027Found what looks like an unmatched or incorrectly \u0027"},{"line_number":1228,"context_line":"                    \u0027constructucted config option substitution reference - \u0027"}],"source_content_type":"text/x-python","patch_set":29,"id":"9a80dd14_e2c7de44","line":1225,"in_reply_to":"9a80dd14_01d6bef1","updated":"2015-03-17 09:17:18.000000000","message":"Done","commit_id":"bf000d193e48f499db9c5fc853ce974a87cf359a"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"c43bcebc022b5589e1ea4eb89c5c65f1dd4bf89c","unresolved":false,"context_lines":[{"line_number":1225,"context_line":"                # options have yet been defined."},{"line_number":1226,"context_line":"                LOG.warn(_LW("},{"line_number":1227,"context_line":"                    \u0027Found what looks like an unmatched or incorrectly \u0027"},{"line_number":1228,"context_line":"                    \u0027constructucted config option substitution reference - \u0027"},{"line_number":1229,"context_line":"                    \u0027domain: %(domain)s, group: %(group)s, option: \u0027"},{"line_number":1230,"context_line":"                    \u0027%(option)s, value: %(value)s\u0027) % {"},{"line_number":1231,"context_line":"                        \u0027domain\u0027: domain_id,"}],"source_content_type":"text/x-python","patch_set":29,"id":"9a80dd14_61e5badb","line":1228,"updated":"2015-03-16 18:59:07.000000000","message":"change \"constructucted\" to \"constructed\"","commit_id":"bf000d193e48f499db9c5fc853ce974a87cf359a"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"efd366475e8eb872a3b6d07484c60a4f90526d29","unresolved":false,"context_lines":[{"line_number":1225,"context_line":"                # options have yet been defined."},{"line_number":1226,"context_line":"                LOG.warn(_LW("},{"line_number":1227,"context_line":"                    \u0027Found what looks like an unmatched or incorrectly \u0027"},{"line_number":1228,"context_line":"                    \u0027constructucted config option substitution reference - \u0027"},{"line_number":1229,"context_line":"                    \u0027domain: %(domain)s, group: %(group)s, option: \u0027"},{"line_number":1230,"context_line":"                    \u0027%(option)s, value: %(value)s\u0027) % {"},{"line_number":1231,"context_line":"                        \u0027domain\u0027: domain_id,"}],"source_content_type":"text/x-python","patch_set":29,"id":"9a80dd14_c2b3bae7","line":1228,"in_reply_to":"9a80dd14_61e5badb","updated":"2015-03-17 09:17:18.000000000","message":"Done","commit_id":"bf000d193e48f499db9c5fc853ce974a87cf359a"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"659762ec79c4f56655f63492ebb878364da50cbc","unresolved":false,"context_lines":[{"line_number":1194,"context_line":"        # have already been substituted, we first take a copy of the"},{"line_number":1195,"context_line":"        # whitelisted option."},{"line_number":1196,"context_line":""},{"line_number":1197,"context_line":"        # Build a dict of the sensitive options ready to try substitution"},{"line_number":1198,"context_line":"        sensitive_dict \u003d {s[\u0027option\u0027]: s[\u0027value\u0027] for s in sensitive}"},{"line_number":1199,"context_line":""},{"line_number":1200,"context_line":"        for each_whitelisted in whitelisted:"}],"source_content_type":"text/x-python","patch_set":31,"id":"9a80dd14_030da635","line":1197,"updated":"2015-03-17 19:42:53.000000000","message":"could remove this comment since the next line is pretty obvious.","commit_id":"4ee933d691e84ac712e9b270fd615b7afed0fe62"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"659762ec79c4f56655f63492ebb878364da50cbc","unresolved":false,"context_lines":[{"line_number":1206,"context_line":"            # Store away the original value in case we need to raise a warning"},{"line_number":1207,"context_line":"            # after substitution."},{"line_number":1208,"context_line":"            original_value \u003d each_whitelisted[\u0027value\u0027]"},{"line_number":1209,"context_line":"            warning_msg \u003d \u0027\u0027"},{"line_number":1210,"context_line":"            try:"},{"line_number":1211,"context_line":"                each_whitelisted[\u0027value\u0027] \u003d ("},{"line_number":1212,"context_line":"                    each_whitelisted[\u0027value\u0027] % sensitive_dict)"}],"source_content_type":"text/x-python","patch_set":31,"id":"9a80dd14_234aaa55","line":1209,"updated":"2015-03-17 19:42:53.000000000","message":"suggest use None to indicate no warning message.","commit_id":"4ee933d691e84ac712e9b270fd615b7afed0fe62"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"659762ec79c4f56655f63492ebb878364da50cbc","unresolved":false,"context_lines":[{"line_number":1225,"context_line":"                    \u0027value: %(value)s.\u0027)"},{"line_number":1226,"context_line":""},{"line_number":1227,"context_line":"            if warning_msg:"},{"line_number":1228,"context_line":"                LOG.warn(warning_msg % {"},{"line_number":1229,"context_line":"                    \u0027domain\u0027: domain_id,"},{"line_number":1230,"context_line":"                    \u0027group\u0027: each_whitelisted[\u0027group\u0027],"},{"line_number":1231,"context_line":"                    \u0027option\u0027: each_whitelisted[\u0027option\u0027],"}],"source_content_type":"text/x-python","patch_set":31,"id":"9a80dd14_8376f6a1","line":1228,"updated":"2015-03-17 19:42:53.000000000","message":"use , rather than %.","commit_id":"4ee933d691e84ac712e9b270fd615b7afed0fe62"}],"keystone/tests/unit/backend/domain_config/core.py":[{"author":{"_account_id":1916,"name":"Guang Yee","email":"gyee@suse.com","username":"guang-yee"},"change_message_id":"287a286798c36b76412f89d4ed5192bd4f30bbd2","unresolved":false,"context_lines":[{"line_number":472,"context_line":"        self.assertEqual(expected_url, res[\u0027ldap\u0027][\u0027url\u0027])"},{"line_number":473,"context_line":""},{"line_number":474,"context_line":"        # Check that bad substitution is benign"},{"line_number":475,"context_line":"        config \u003d {\u0027ldap\u0027: {\u0027url\u0027: \u0027my_url/%(passssword)s\u0027,"},{"line_number":476,"context_line":"                           \u0027user_tree_dn\u0027: uuid.uuid4().hex,"},{"line_number":477,"context_line":"                           \u0027password\u0027: uuid.uuid4().hex},"},{"line_number":478,"context_line":"                  \u0027identity\u0027: {\u0027driver\u0027: uuid.uuid4().hex}}"}],"source_content_type":"text/x-python","patch_set":23,"id":"9a80dd14_73110b5d","line":475,"updated":"2015-03-10 16:44:14.000000000","message":"So there\u0027s no error thrown if \u0027passswords\u0027 option doesn\u0027t exist? If that\u0027s the case it would be tough to detect misconfiguration from supportability standpoint.","commit_id":"5b2a2606c552dd77d0979aa40d006d60fa509eba"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"0e44b87cf62069035f947b1093ae079dfd04d7a9","unresolved":false,"context_lines":[{"line_number":472,"context_line":"        self.assertEqual(expected_url, res[\u0027ldap\u0027][\u0027url\u0027])"},{"line_number":473,"context_line":""},{"line_number":474,"context_line":"        # Check that bad substitution is benign"},{"line_number":475,"context_line":"        config \u003d {\u0027ldap\u0027: {\u0027url\u0027: \u0027my_url/%(passssword)s\u0027,"},{"line_number":476,"context_line":"                           \u0027user_tree_dn\u0027: uuid.uuid4().hex,"},{"line_number":477,"context_line":"                           \u0027password\u0027: uuid.uuid4().hex},"},{"line_number":478,"context_line":"                  \u0027identity\u0027: {\u0027driver\u0027: uuid.uuid4().hex}}"}],"source_content_type":"text/x-python","patch_set":23,"id":"9a80dd14_70153448","line":475,"in_reply_to":"9a80dd14_15122ab4","updated":"2015-03-12 00:28:56.000000000","message":"If people feel we really do need this level of checking then I\u0027m ok to add it...although my gut feel is we may be over complicating it.  I also worried about having to do the reverse pattern match today of checkin whether %(*) exists in each whitelisted option - I guess that\u0027s safe, but wonder if it might accidentally match something innocuous.","commit_id":"5b2a2606c552dd77d0979aa40d006d60fa509eba"},{"author":{"_account_id":9142,"name":"Samuel de Medeiros Queiroz","email":"samueldmq@lsd.ufcg.edu.br","username":"samuel-z","inactive":true},"change_message_id":"cd356bcc862e8f048ca49482136ac1e43879d665","unresolved":false,"context_lines":[{"line_number":472,"context_line":"        self.assertEqual(expected_url, res[\u0027ldap\u0027][\u0027url\u0027])"},{"line_number":473,"context_line":""},{"line_number":474,"context_line":"        # Check that bad substitution is benign"},{"line_number":475,"context_line":"        config \u003d {\u0027ldap\u0027: {\u0027url\u0027: \u0027my_url/%(passssword)s\u0027,"},{"line_number":476,"context_line":"                           \u0027user_tree_dn\u0027: uuid.uuid4().hex,"},{"line_number":477,"context_line":"                           \u0027password\u0027: uuid.uuid4().hex},"},{"line_number":478,"context_line":"                  \u0027identity\u0027: {\u0027driver\u0027: uuid.uuid4().hex}}"}],"source_content_type":"text/x-python","patch_set":23,"id":"9a80dd14_a30cc33c","line":475,"in_reply_to":"9a80dd14_3629f489","updated":"2015-03-12 03:29:21.000000000","message":"For me it makes sense to be added as a followup.","commit_id":"5b2a2606c552dd77d0979aa40d006d60fa509eba"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"7931345e8dc989eb6b658f6e8149828a0dcd4e14","unresolved":false,"context_lines":[{"line_number":472,"context_line":"        self.assertEqual(expected_url, res[\u0027ldap\u0027][\u0027url\u0027])"},{"line_number":473,"context_line":""},{"line_number":474,"context_line":"        # Check that bad substitution is benign"},{"line_number":475,"context_line":"        config \u003d {\u0027ldap\u0027: {\u0027url\u0027: \u0027my_url/%(passssword)s\u0027,"},{"line_number":476,"context_line":"                           \u0027user_tree_dn\u0027: uuid.uuid4().hex,"},{"line_number":477,"context_line":"                           \u0027password\u0027: uuid.uuid4().hex},"},{"line_number":478,"context_line":"                  \u0027identity\u0027: {\u0027driver\u0027: uuid.uuid4().hex}}"}],"source_content_type":"text/x-python","patch_set":23,"id":"9a80dd14_743fda25","line":475,"in_reply_to":"9a80dd14_3629f489","updated":"2015-03-14 09:44:52.000000000","message":"Happy to add the checking as a follow up","commit_id":"5b2a2606c552dd77d0979aa40d006d60fa509eba"},{"author":{"_account_id":9142,"name":"Samuel de Medeiros Queiroz","email":"samueldmq@lsd.ufcg.edu.br","username":"samuel-z","inactive":true},"change_message_id":"8751a61d989a52310755d7bac6bb5bbaf318784b","unresolved":false,"context_lines":[{"line_number":472,"context_line":"        self.assertEqual(expected_url, res[\u0027ldap\u0027][\u0027url\u0027])"},{"line_number":473,"context_line":""},{"line_number":474,"context_line":"        # Check that bad substitution is benign"},{"line_number":475,"context_line":"        config \u003d {\u0027ldap\u0027: {\u0027url\u0027: \u0027my_url/%(passssword)s\u0027,"},{"line_number":476,"context_line":"                           \u0027user_tree_dn\u0027: uuid.uuid4().hex,"},{"line_number":477,"context_line":"                           \u0027password\u0027: uuid.uuid4().hex},"},{"line_number":478,"context_line":"                  \u0027identity\u0027: {\u0027driver\u0027: uuid.uuid4().hex}}"}],"source_content_type":"text/x-python","patch_set":23,"id":"9a80dd14_15122ab4","line":475,"in_reply_to":"9a80dd14_6109f02b","updated":"2015-03-11 23:49:00.000000000","message":"Guang, one could provide first the option URL and then after (in another option create API call) create the passssword option.\n\nIf we want to support it this way (as we are doing today), we cannot throw an exception, since we do not know if the missing option is about to be provided.\n\nI agree with your proposal (although it does not look to be in the spec), and  solution in this case could be to:\n\ni) avoid the creation of an option if its value needs a replace with another option that is not already known.\n\nii) avoid the deletion of an option (password, for example) that is needed by other option (\u0027url\u0027: \u0027my_url/%(password)s\u0027, for example).","commit_id":"5b2a2606c552dd77d0979aa40d006d60fa509eba"},{"author":{"_account_id":2903,"name":"Morgan Fainberg","email":"morgan.fainberg@gmail.com","username":"mdrnstm"},"change_message_id":"63c0bd7e01b5180bafda764a3ca9339be84f626a","unresolved":false,"context_lines":[{"line_number":472,"context_line":"        self.assertEqual(expected_url, res[\u0027ldap\u0027][\u0027url\u0027])"},{"line_number":473,"context_line":""},{"line_number":474,"context_line":"        # Check that bad substitution is benign"},{"line_number":475,"context_line":"        config \u003d {\u0027ldap\u0027: {\u0027url\u0027: \u0027my_url/%(passssword)s\u0027,"},{"line_number":476,"context_line":"                           \u0027user_tree_dn\u0027: uuid.uuid4().hex,"},{"line_number":477,"context_line":"                           \u0027password\u0027: uuid.uuid4().hex},"},{"line_number":478,"context_line":"                  \u0027identity\u0027: {\u0027driver\u0027: uuid.uuid4().hex}}"}],"source_content_type":"text/x-python","patch_set":23,"id":"9a80dd14_3629f489","line":475,"in_reply_to":"9a80dd14_70153448","updated":"2015-03-12 01:03:06.000000000","message":"I don\u0027t think % needs to exist in a white listed option... it just wont work correctly if it isn\u0027t. It might be a \"sensitive option\" that the deployer actually doesn\u0027t need to substitute things in for.\n\nI agree we shouldn\u0027t over complicate this.\n\nHowever, adding in the extra level of checking is probably pretty straight forward.  Could we do it as a followup?","commit_id":"5b2a2606c552dd77d0979aa40d006d60fa509eba"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"25f1c9f48cb52ff0118f6afbf72f7b43f58fad20","unresolved":false,"context_lines":[{"line_number":472,"context_line":"        self.assertEqual(expected_url, res[\u0027ldap\u0027][\u0027url\u0027])"},{"line_number":473,"context_line":""},{"line_number":474,"context_line":"        # Check that bad substitution is benign"},{"line_number":475,"context_line":"        config \u003d {\u0027ldap\u0027: {\u0027url\u0027: \u0027my_url/%(passssword)s\u0027,"},{"line_number":476,"context_line":"                           \u0027user_tree_dn\u0027: uuid.uuid4().hex,"},{"line_number":477,"context_line":"                           \u0027password\u0027: uuid.uuid4().hex},"},{"line_number":478,"context_line":"                  \u0027identity\u0027: {\u0027driver\u0027: uuid.uuid4().hex}}"}],"source_content_type":"text/x-python","patch_set":23,"id":"9a80dd14_6109f02b","line":475,"in_reply_to":"9a80dd14_73110b5d","updated":"2015-03-11 21:39:18.000000000","message":"++","commit_id":"5b2a2606c552dd77d0979aa40d006d60fa509eba"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"c081ac809062ffc0c643a38b7385d261d983da65","unresolved":false,"context_lines":[{"line_number":459,"context_line":"                          group\u003d\u0027ldap\u0027, option\u003d\u0027user_tree_dn\u0027)"},{"line_number":460,"context_line":""},{"line_number":461,"context_line":"    def test_sensitive_substitution_in_domain_config(self):"},{"line_number":462,"context_line":"        config \u003d {\u0027ldap\u0027: {\u0027url\u0027: \u0027my_url/%(password)s\u0027,"},{"line_number":463,"context_line":"                           \u0027user_tree_dn\u0027: uuid.uuid4().hex,"},{"line_number":464,"context_line":"                           \u0027password\u0027: uuid.uuid4().hex},"},{"line_number":465,"context_line":"                  \u0027identity\u0027: {\u0027driver\u0027: uuid.uuid4().hex}}"}],"source_content_type":"text/x-python","patch_set":25,"id":"9a80dd14_e0085adb","line":462,"updated":"2015-03-12 14:13:48.000000000","message":"add a comment that this is the replacement value.","commit_id":"5bec521a94ba5c08d1137c00a0b042931699cd85"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"65155796ff78cbaa79c04bbd97f2d68eeac6b4aa","unresolved":false,"context_lines":[{"line_number":459,"context_line":"                          group\u003d\u0027ldap\u0027, option\u003d\u0027user_tree_dn\u0027)"},{"line_number":460,"context_line":""},{"line_number":461,"context_line":"    def test_sensitive_substitution_in_domain_config(self):"},{"line_number":462,"context_line":"        config \u003d {\u0027ldap\u0027: {\u0027url\u0027: \u0027my_url/%(password)s\u0027,"},{"line_number":463,"context_line":"                           \u0027user_tree_dn\u0027: uuid.uuid4().hex,"},{"line_number":464,"context_line":"                           \u0027password\u0027: uuid.uuid4().hex},"},{"line_number":465,"context_line":"                  \u0027identity\u0027: {\u0027driver\u0027: uuid.uuid4().hex}}"}],"source_content_type":"text/x-python","patch_set":25,"id":"9a80dd14_b439e4a5","line":462,"in_reply_to":"9a80dd14_e0085adb","updated":"2015-03-16 08:57:18.000000000","message":"Done","commit_id":"5bec521a94ba5c08d1137c00a0b042931699cd85"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"c081ac809062ffc0c643a38b7385d261d983da65","unresolved":false,"context_lines":[{"line_number":471,"context_line":"            config[\u0027ldap\u0027][\u0027url\u0027] % {\u0027password\u0027: config[\u0027ldap\u0027][\u0027password\u0027]})"},{"line_number":472,"context_line":"        self.assertEqual(expected_url, res[\u0027ldap\u0027][\u0027url\u0027])"},{"line_number":473,"context_line":""},{"line_number":474,"context_line":"        # Check that bad substitution is benign"},{"line_number":475,"context_line":"        config \u003d {\u0027ldap\u0027: {\u0027url\u0027: \u0027my_url/%(passssword)s\u0027,"},{"line_number":476,"context_line":"                           \u0027user_tree_dn\u0027: uuid.uuid4().hex,"},{"line_number":477,"context_line":"                           \u0027password\u0027: uuid.uuid4().hex},"}],"source_content_type":"text/x-python","patch_set":25,"id":"9a80dd14_80f15ecf","line":474,"updated":"2015-03-12 14:13:48.000000000","message":"this should say what\u0027s expected to happen. What\u0027s benign about ignoring an invalid substitution value?","commit_id":"5bec521a94ba5c08d1137c00a0b042931699cd85"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"65155796ff78cbaa79c04bbd97f2d68eeac6b4aa","unresolved":false,"context_lines":[{"line_number":471,"context_line":"            config[\u0027ldap\u0027][\u0027url\u0027] % {\u0027password\u0027: config[\u0027ldap\u0027][\u0027password\u0027]})"},{"line_number":472,"context_line":"        self.assertEqual(expected_url, res[\u0027ldap\u0027][\u0027url\u0027])"},{"line_number":473,"context_line":""},{"line_number":474,"context_line":"        # Check that bad substitution is benign"},{"line_number":475,"context_line":"        config \u003d {\u0027ldap\u0027: {\u0027url\u0027: \u0027my_url/%(passssword)s\u0027,"},{"line_number":476,"context_line":"                           \u0027user_tree_dn\u0027: uuid.uuid4().hex,"},{"line_number":477,"context_line":"                           \u0027password\u0027: uuid.uuid4().hex},"}],"source_content_type":"text/x-python","patch_set":25,"id":"9a80dd14_107e2619","line":474,"in_reply_to":"9a80dd14_80f15ecf","updated":"2015-03-16 08:57:18.000000000","message":"Done","commit_id":"5bec521a94ba5c08d1137c00a0b042931699cd85"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"c081ac809062ffc0c643a38b7385d261d983da65","unresolved":false,"context_lines":[{"line_number":472,"context_line":"        self.assertEqual(expected_url, res[\u0027ldap\u0027][\u0027url\u0027])"},{"line_number":473,"context_line":""},{"line_number":474,"context_line":"        # Check that bad substitution is benign"},{"line_number":475,"context_line":"        config \u003d {\u0027ldap\u0027: {\u0027url\u0027: \u0027my_url/%(passssword)s\u0027,"},{"line_number":476,"context_line":"                           \u0027user_tree_dn\u0027: uuid.uuid4().hex,"},{"line_number":477,"context_line":"                           \u0027password\u0027: uuid.uuid4().hex},"},{"line_number":478,"context_line":"                  \u0027identity\u0027: {\u0027driver\u0027: uuid.uuid4().hex}}"}],"source_content_type":"text/x-python","patch_set":25,"id":"9a80dd14_00100e00","line":475,"updated":"2015-03-12 14:13:48.000000000","message":"add a comment that this is the bad replacement value.\n\nAlso, this should be a separate test function.","commit_id":"5bec521a94ba5c08d1137c00a0b042931699cd85"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"65155796ff78cbaa79c04bbd97f2d68eeac6b4aa","unresolved":false,"context_lines":[{"line_number":472,"context_line":"        self.assertEqual(expected_url, res[\u0027ldap\u0027][\u0027url\u0027])"},{"line_number":473,"context_line":""},{"line_number":474,"context_line":"        # Check that bad substitution is benign"},{"line_number":475,"context_line":"        config \u003d {\u0027ldap\u0027: {\u0027url\u0027: \u0027my_url/%(passssword)s\u0027,"},{"line_number":476,"context_line":"                           \u0027user_tree_dn\u0027: uuid.uuid4().hex,"},{"line_number":477,"context_line":"                           \u0027password\u0027: uuid.uuid4().hex},"},{"line_number":478,"context_line":"                  \u0027identity\u0027: {\u0027driver\u0027: uuid.uuid4().hex}}"}],"source_content_type":"text/x-python","patch_set":25,"id":"9a80dd14_50741e35","line":475,"in_reply_to":"9a80dd14_00100e00","updated":"2015-03-16 08:57:18.000000000","message":"Done","commit_id":"5bec521a94ba5c08d1137c00a0b042931699cd85"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"c081ac809062ffc0c643a38b7385d261d983da65","unresolved":false,"context_lines":[{"line_number":480,"context_line":""},{"line_number":481,"context_line":"        res \u003d self.domain_config_api.get_config_with_sensitive_info("},{"line_number":482,"context_line":"            self.domain[\u0027id\u0027])"},{"line_number":483,"context_line":"        self.assertEqual(config[\u0027ldap\u0027][\u0027url\u0027], res[\u0027ldap\u0027][\u0027url\u0027])"}],"source_content_type":"text/x-python","patch_set":25,"id":"9a80dd14_209d125a","line":483,"updated":"2015-03-12 14:13:48.000000000","message":"Also have a test for if the substitution string uses the wrong data type (e.g., %(password)d),\n\nAdd a test for if the substitution string is incorrectly formatted, e.g., missing the data type or close-paren\n\n %(password)\n %(password","commit_id":"5bec521a94ba5c08d1137c00a0b042931699cd85"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"65155796ff78cbaa79c04bbd97f2d68eeac6b4aa","unresolved":false,"context_lines":[{"line_number":480,"context_line":""},{"line_number":481,"context_line":"        res \u003d self.domain_config_api.get_config_with_sensitive_info("},{"line_number":482,"context_line":"            self.domain[\u0027id\u0027])"},{"line_number":483,"context_line":"        self.assertEqual(config[\u0027ldap\u0027][\u0027url\u0027], res[\u0027ldap\u0027][\u0027url\u0027])"}],"source_content_type":"text/x-python","patch_set":25,"id":"9a80dd14_d0972e38","line":483,"in_reply_to":"9a80dd14_209d125a","updated":"2015-03-16 08:57:18.000000000","message":"Will do this...","commit_id":"5bec521a94ba5c08d1137c00a0b042931699cd85"},{"author":{"_account_id":11022,"name":"Rodrigo Duarte Sousa","email":"rodrigodsousa@gmail.com","username":"rodrigods"},"change_message_id":"f9e6dee8d3c0442231c5aa39506ef49eff040ddf","unresolved":false,"context_lines":[{"line_number":519,"context_line":"            res \u003d self.domain_config_api.get_config_with_sensitive_info("},{"line_number":520,"context_line":"                self.domain[\u0027id\u0027])"},{"line_number":521,"context_line":"        self.assertFalse(mock_log.warn.called)"},{"line_number":522,"context_line":"        # The escaping \u0027%\u0027 should have been rmoved"},{"line_number":523,"context_line":"        self.assertEqual(\u0027my_url/%(password)s\u0027, res[\u0027ldap\u0027][\u0027url\u0027])"}],"source_content_type":"text/x-python","patch_set":30,"id":"9a80dd14_bd16d356","line":522,"updated":"2015-03-17 11:15:46.000000000","message":"s/rmoved/removed","commit_id":"fafeaa87f7f496a2722f57b1692db13ba96bc8b0"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"db4dacb6f25c95a47495ac7eeda79c5321c853ae","unresolved":false,"context_lines":[{"line_number":519,"context_line":"            res \u003d self.domain_config_api.get_config_with_sensitive_info("},{"line_number":520,"context_line":"                self.domain[\u0027id\u0027])"},{"line_number":521,"context_line":"        self.assertFalse(mock_log.warn.called)"},{"line_number":522,"context_line":"        # The escaping \u0027%\u0027 should have been rmoved"},{"line_number":523,"context_line":"        self.assertEqual(\u0027my_url/%(password)s\u0027, res[\u0027ldap\u0027][\u0027url\u0027])"}],"source_content_type":"text/x-python","patch_set":30,"id":"9a80dd14_62ecb7f4","line":522,"in_reply_to":"9a80dd14_bd16d356","updated":"2015-03-17 12:28:16.000000000","message":"Done","commit_id":"fafeaa87f7f496a2722f57b1692db13ba96bc8b0"}]}
