)]}'
{"manila/api/v2/share_instance_export_locations.py":[{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"e65243a171ebbf3e36ef25bee24bc05d4dc3c084","unresolved":false,"context_lines":[{"line_number":34,"context_line":""},{"line_number":35,"context_line":"    def _verify_share_instance(self, context, share_instance_id):"},{"line_number":36,"context_line":"        try:"},{"line_number":37,"context_line":"            share_instance \u003d db_api.share_instance_get(context,"},{"line_number":38,"context_line":"                                                       share_instance_id)"},{"line_number":39,"context_line":"            share \u003d db_api.share_get(context, share_instance[\u0027share_id\u0027])"},{"line_number":40,"context_line":"            if not share[\u0027is_public\u0027]:"},{"line_number":41,"context_line":"                policy.check_policy(context, \u0027share\u0027, \u0027get\u0027, share)"},{"line_number":42,"context_line":"        except exception.NotFound:"},{"line_number":43,"context_line":"            msg \u003d _(\"Share instance \u0027%s\u0027 not found.\") % share_instance_id"},{"line_number":44,"context_line":"            raise exc.HTTPNotFound(explanation\u003dmsg)"}],"source_content_type":"text/x-python","patch_set":4,"id":"1fa4df85_072f768e","line":41,"range":{"start_line":37,"start_character":12,"end_line":41,"end_character":67},"updated":"2020-03-03 07:41:33.000000000","message":"While this works, can we use the share instance policy here, instead of that of the share? \n\nSince the resource pertains to the export locations of a share instance... \n\n share_instance \u003d db_api.share_instance_get(context, \n                   share_instance_id, \n                   with_share_data\u003dTrue)\n if not share_instance[\u0027is_public\u0027]:\n     policy.check_policy(context, \u0027share_instance\u0027, \u0027show\u0027, share_instance)","commit_id":"0c5e66700493d6c65de3b50deaca3d00bd8113c4"},{"author":{"_account_id":9003,"name":"Tom Barron","email":"tpb@dyncloud.net","username":"tbarron"},"change_message_id":"a5714e05c50229f4d3cb8cd39c7ec20cccb7f910","unresolved":false,"context_lines":[{"line_number":34,"context_line":""},{"line_number":35,"context_line":"    def _verify_share_instance(self, context, share_instance_id):"},{"line_number":36,"context_line":"        try:"},{"line_number":37,"context_line":"            share_instance \u003d db_api.share_instance_get(context,"},{"line_number":38,"context_line":"                                                       share_instance_id)"},{"line_number":39,"context_line":"            share \u003d db_api.share_get(context, share_instance[\u0027share_id\u0027])"},{"line_number":40,"context_line":"            if not share[\u0027is_public\u0027]:"},{"line_number":41,"context_line":"                policy.check_policy(context, \u0027share\u0027, \u0027get\u0027, share)"},{"line_number":42,"context_line":"        except exception.NotFound:"},{"line_number":43,"context_line":"            msg \u003d _(\"Share instance \u0027%s\u0027 not found.\") % share_instance_id"},{"line_number":44,"context_line":"            raise exc.HTTPNotFound(explanation\u003dmsg)"}],"source_content_type":"text/x-python","patch_set":4,"id":"1fa4df85_07a8d68a","line":41,"range":{"start_line":37,"start_character":12,"end_line":41,"end_character":67},"in_reply_to":"1fa4df85_072f768e","updated":"2020-03-03 08:27:32.000000000","message":"Makes sense, not sure why I did that ...","commit_id":"0c5e66700493d6c65de3b50deaca3d00bd8113c4"},{"author":{"_account_id":9003,"name":"Tom Barron","email":"tpb@dyncloud.net","username":"tbarron"},"change_message_id":"c1a50c3863b595a295af21856b8f323fa531e84a","unresolved":false,"context_lines":[{"line_number":34,"context_line":""},{"line_number":35,"context_line":"    def _verify_share_instance(self, context, share_instance_id):"},{"line_number":36,"context_line":"        try:"},{"line_number":37,"context_line":"            share_instance \u003d db_api.share_instance_get(context,"},{"line_number":38,"context_line":"                                                       share_instance_id)"},{"line_number":39,"context_line":"            share \u003d db_api.share_get(context, share_instance[\u0027share_id\u0027])"},{"line_number":40,"context_line":"            if not share[\u0027is_public\u0027]:"},{"line_number":41,"context_line":"                policy.check_policy(context, \u0027share\u0027, \u0027get\u0027, share)"},{"line_number":42,"context_line":"        except exception.NotFound:"},{"line_number":43,"context_line":"            msg \u003d _(\"Share instance \u0027%s\u0027 not found.\") % share_instance_id"},{"line_number":44,"context_line":"            raise exc.HTTPNotFound(explanation\u003dmsg)"}],"source_content_type":"text/x-python","patch_set":4,"id":"1fa4df85_873da62c","line":41,"range":{"start_line":37,"start_character":12,"end_line":41,"end_character":67},"in_reply_to":"1fa4df85_07a8d68a","updated":"2020-03-03 10:16:26.000000000","message":"Ah, share_instance doesn\u0027t have \u0027is_public\u0027.  I could try checking that in the share, but doing the policy check on the share_instance.nce.\nBut probably it makes sense just to check the policy on the share_instance independently of the share and its attributes.","commit_id":"0c5e66700493d6c65de3b50deaca3d00bd8113c4"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"838ee9a3e6f8c1cfd55eeda453965a74254c1cc1","unresolved":false,"context_lines":[{"line_number":37,"context_line":"            share_instance \u003d db_api.share_instance_get(context,"},{"line_number":38,"context_line":"                                                       share_instance_id)"},{"line_number":39,"context_line":"            policy.check_policy(context, \u0027share_instance\u0027, \u0027show\u0027,"},{"line_number":40,"context_line":"                                share_instance)"},{"line_number":41,"context_line":"        except exception.NotFound:"},{"line_number":42,"context_line":"            msg \u003d _(\"Share instance \u0027%s\u0027 not found.\") % share_instance_id"},{"line_number":43,"context_line":"            raise exc.HTTPNotFound(explanation\u003dmsg)"}],"source_content_type":"text/x-python","patch_set":5,"id":"1fa4df85_a6753bcd","line":40,"range":{"start_line":40,"start_character":44,"end_line":40,"end_character":47},"updated":"2020-03-03 17:52:28.000000000","message":"Thinking out loud about the \"is_public\" attribute check:\n\nIn a cloud where share instances can be listed/viewed by their owners, if there are any \"public\" shares, would we allow those share instances to be retrieved? We currently do not perform *any* ownership check [1], so it\u0027s potentially harmful to open up the API policy to allow listing share instances. However, it may be okay for someone to alter the policy to \"show\" a share instance - Users can get the UUIDs of a share instance off of the export location of a share (whether it\u0027s their own or is a public share). \n\nSo, i wonder if we need to restrict getting share instance export locations if the share instance belongs to a public share?\n\nWhat do you think?","commit_id":"6db1850e7f9a6f9fcf760e89f49372ff57d0eb10"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"838ee9a3e6f8c1cfd55eeda453965a74254c1cc1","unresolved":false,"context_lines":[{"line_number":36,"context_line":"        try:"},{"line_number":37,"context_line":"            share_instance \u003d db_api.share_instance_get(context,"},{"line_number":38,"context_line":"                                                       share_instance_id)"},{"line_number":39,"context_line":"            policy.check_policy(context, \u0027share_instance\u0027, \u0027show\u0027,"},{"line_number":40,"context_line":"                                share_instance)"},{"line_number":41,"context_line":"        except exception.NotFound:"},{"line_number":42,"context_line":"            msg \u003d _(\"Share instance \u0027%s\u0027 not found.\") % share_instance_id"},{"line_number":43,"context_line":"            raise exc.HTTPNotFound(explanation\u003dmsg)"}],"source_content_type":"text/x-python","patch_set":5,"id":"1fa4df85_069d2fbb","line":40,"range":{"start_line":39,"start_character":12,"end_line":40,"end_character":47},"updated":"2020-03-03 17:52:28.000000000","message":"This won\u0027t work because a share instance object by itself doesn\u0027t have \"project_id\". \n\nYou\u0027ll need:\n\n  share_instance \u003d db_api.share_instance_get(context, \n                             share_instance_id, \n                             with_share_data\u003dTrue)","commit_id":"6db1850e7f9a6f9fcf760e89f49372ff57d0eb10"},{"author":{"_account_id":9003,"name":"Tom Barron","email":"tpb@dyncloud.net","username":"tbarron"},"change_message_id":"a1aac033cb6fd25b8c241189badd7535afbbba7e","unresolved":false,"context_lines":[{"line_number":36,"context_line":"        try:"},{"line_number":37,"context_line":"            share_instance \u003d db_api.share_instance_get(context,"},{"line_number":38,"context_line":"                                                       share_instance_id)"},{"line_number":39,"context_line":"            policy.check_policy(context, \u0027share_instance\u0027, \u0027show\u0027,"},{"line_number":40,"context_line":"                                share_instance)"},{"line_number":41,"context_line":"        except exception.NotFound:"},{"line_number":42,"context_line":"            msg \u003d _(\"Share instance \u0027%s\u0027 not found.\") % share_instance_id"},{"line_number":43,"context_line":"            raise exc.HTTPNotFound(explanation\u003dmsg)"}],"source_content_type":"text/x-python","patch_set":5,"id":"1fa4df85_2e303d9f","line":40,"range":{"start_line":39,"start_character":12,"end_line":40,"end_character":47},"in_reply_to":"1fa4df85_069d2fbb","updated":"2020-03-03 22:11:29.000000000","message":"Alright, let\u0027s try it that way.","commit_id":"6db1850e7f9a6f9fcf760e89f49372ff57d0eb10"},{"author":{"_account_id":9003,"name":"Tom Barron","email":"tpb@dyncloud.net","username":"tbarron"},"change_message_id":"a1aac033cb6fd25b8c241189badd7535afbbba7e","unresolved":false,"context_lines":[{"line_number":37,"context_line":"            share_instance \u003d db_api.share_instance_get(context,"},{"line_number":38,"context_line":"                                                       share_instance_id)"},{"line_number":39,"context_line":"            policy.check_policy(context, \u0027share_instance\u0027, \u0027show\u0027,"},{"line_number":40,"context_line":"                                share_instance)"},{"line_number":41,"context_line":"        except exception.NotFound:"},{"line_number":42,"context_line":"            msg \u003d _(\"Share instance \u0027%s\u0027 not found.\") % share_instance_id"},{"line_number":43,"context_line":"            raise exc.HTTPNotFound(explanation\u003dmsg)"}],"source_content_type":"text/x-python","patch_set":5,"id":"1fa4df85_4e35798e","line":40,"range":{"start_line":40,"start_character":44,"end_line":40,"end_character":47},"in_reply_to":"1fa4df85_a6753bcd","updated":"2020-03-03 22:11:29.000000000","message":"I don\u0027t have a strong intuition either way.\n\nDo you think we should only do the policy check on the instance if the corresponding share is not public?  That\u0027s the way I was going to write it but then I was trying to just make policy on instances stand on its own ...","commit_id":"6db1850e7f9a6f9fcf760e89f49372ff57d0eb10"},{"author":{"_account_id":9003,"name":"Tom Barron","email":"tpb@dyncloud.net","username":"tbarron"},"change_message_id":"a1aac033cb6fd25b8c241189badd7535afbbba7e","unresolved":false,"context_lines":[{"line_number":37,"context_line":"            share_instance \u003d db_api.share_instance_get(context,"},{"line_number":38,"context_line":"                                                       share_instance_id)"},{"line_number":39,"context_line":"            policy.check_policy(context, \u0027share_instance\u0027, \u0027show\u0027,"},{"line_number":40,"context_line":"                                share_instance)"},{"line_number":41,"context_line":"        except exception.NotFound:"},{"line_number":42,"context_line":"            msg \u003d _(\"Share instance \u0027%s\u0027 not found.\") % share_instance_id"},{"line_number":43,"context_line":"            raise exc.HTTPNotFound(explanation\u003dmsg)"}],"source_content_type":"text/x-python","patch_set":5,"id":"1fa4df85_cef729d3","line":40,"range":{"start_line":40,"start_character":44,"end_line":40,"end_character":47},"in_reply_to":"1fa4df85_a6753bcd","updated":"2020-03-03 22:11:29.000000000","message":"I don\u0027t have a strong intuition either way.\n\nDo you think we should only do the policy check on the instance if the corresponding share is not public?  That\u0027s the way I was going to write it but then I was trying to just make policy on instances stand on its own ...","commit_id":"6db1850e7f9a6f9fcf760e89f49372ff57d0eb10"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"720b7d264b56bc341917d04696f005c088cbefc6","unresolved":false,"context_lines":[{"line_number":37,"context_line":"            share_instance \u003d db_api.share_instance_get(context,"},{"line_number":38,"context_line":"                                                       share_instance_id)"},{"line_number":39,"context_line":"            policy.check_policy(context, \u0027share_instance\u0027, \u0027show\u0027,"},{"line_number":40,"context_line":"                                share_instance)"},{"line_number":41,"context_line":"        except exception.NotFound:"},{"line_number":42,"context_line":"            msg \u003d _(\"Share instance \u0027%s\u0027 not found.\") % share_instance_id"},{"line_number":43,"context_line":"            raise exc.HTTPNotFound(explanation\u003dmsg)"}],"source_content_type":"text/x-python","patch_set":5,"id":"1fa4df85_d98051c2","line":40,"range":{"start_line":40,"start_character":44,"end_line":40,"end_character":47},"in_reply_to":"1fa4df85_cef729d3","updated":"2020-03-03 23:59:23.000000000","message":"The share instance and share are either public or not... Share instances of a non-public share cannot be public themselves. This fix is appropriate for this issue imo \n\nBecause we enforce policy on non-public share export locations, I was wondering if we should do the same for share instances - a check you were doing until patchset 4... If you think that\u0027s still useful, we can include it in this fix or I\u0027ll open a separate bug....","commit_id":"6db1850e7f9a6f9fcf760e89f49372ff57d0eb10"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"a4056501210da1b6fcc30e03776174287fe94d4f","unresolved":false,"context_lines":[{"line_number":37,"context_line":"            share_instance \u003d db_api.share_instance_get(context,"},{"line_number":38,"context_line":"                                                       share_instance_id,"},{"line_number":39,"context_line":"                                                       with_share_data\u003dTrue)"},{"line_number":40,"context_line":"            share \u003d db_api.share_get(context, share_instance[\u0027share_id\u0027])"},{"line_number":41,"context_line":"            if not share[\u0027is_public\u0027]:"},{"line_number":42,"context_line":"                policy.check_policy(context, \u0027share_instance\u0027, \u0027show\u0027,"},{"line_number":43,"context_line":"                                    share_instance)"},{"line_number":44,"context_line":"        except exception.NotFound:"},{"line_number":45,"context_line":"            msg \u003d _(\"Share instance \u0027%s\u0027 not found.\") % share_instance_id"},{"line_number":46,"context_line":"            raise exc.HTTPNotFound(explanation\u003dmsg)"}],"source_content_type":"text/x-python","patch_set":7,"id":"1fa4df85_ddf7cf58","line":43,"range":{"start_line":40,"start_character":12,"end_line":43,"end_character":51},"updated":"2020-03-04 16:41:28.000000000","message":"The share lookup isn\u0027t necessary... Will follow up with a fix.","commit_id":"c424ca53e0a9efe7e5b2ef10264404d69d0b3fb5"},{"author":{"_account_id":9003,"name":"Tom Barron","email":"tpb@dyncloud.net","username":"tbarron"},"change_message_id":"3ce7569293e2e40217d687e37013d84e754cdef5","unresolved":false,"context_lines":[{"line_number":37,"context_line":"            share_instance \u003d db_api.share_instance_get(context,"},{"line_number":38,"context_line":"                                                       share_instance_id,"},{"line_number":39,"context_line":"                                                       with_share_data\u003dTrue)"},{"line_number":40,"context_line":"            share \u003d db_api.share_get(context, share_instance[\u0027share_id\u0027])"},{"line_number":41,"context_line":"            if not share[\u0027is_public\u0027]:"},{"line_number":42,"context_line":"                policy.check_policy(context, \u0027share_instance\u0027, \u0027show\u0027,"},{"line_number":43,"context_line":"                                    share_instance)"},{"line_number":44,"context_line":"        except exception.NotFound:"},{"line_number":45,"context_line":"            msg \u003d _(\"Share instance \u0027%s\u0027 not found.\") % share_instance_id"},{"line_number":46,"context_line":"            raise exc.HTTPNotFound(explanation\u003dmsg)"}],"source_content_type":"text/x-python","patch_set":7,"id":"1fa4df85_cc8e3f78","line":43,"range":{"start_line":40,"start_character":12,"end_line":43,"end_character":51},"in_reply_to":"1fa4df85_bd7d33b3","updated":"2020-03-04 20:21:54.000000000","message":"#TIL, thanks","commit_id":"c424ca53e0a9efe7e5b2ef10264404d69d0b3fb5"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"6cbd7894ef09abecb59955f010769a081c7b94f9","unresolved":false,"context_lines":[{"line_number":37,"context_line":"            share_instance \u003d db_api.share_instance_get(context,"},{"line_number":38,"context_line":"                                                       share_instance_id,"},{"line_number":39,"context_line":"                                                       with_share_data\u003dTrue)"},{"line_number":40,"context_line":"            share \u003d db_api.share_get(context, share_instance[\u0027share_id\u0027])"},{"line_number":41,"context_line":"            if not share[\u0027is_public\u0027]:"},{"line_number":42,"context_line":"                policy.check_policy(context, \u0027share_instance\u0027, \u0027show\u0027,"},{"line_number":43,"context_line":"                                    share_instance)"},{"line_number":44,"context_line":"        except exception.NotFound:"},{"line_number":45,"context_line":"            msg \u003d _(\"Share instance \u0027%s\u0027 not found.\") % share_instance_id"},{"line_number":46,"context_line":"            raise exc.HTTPNotFound(explanation\u003dmsg)"}],"source_content_type":"text/x-python","patch_set":7,"id":"1fa4df85_bd7d33b3","line":43,"range":{"start_line":40,"start_character":12,"end_line":43,"end_character":51},"in_reply_to":"1fa4df85_ddf7cf58","updated":"2020-03-04 16:43:44.000000000","message":"When passing \"with_share_data\", the share record is fetched and share properties are set directly onto the share instance - a design consideration to allow shares and share instances to be interoperable for the majority of cases.","commit_id":"c424ca53e0a9efe7e5b2ef10264404d69d0b3fb5"}]}
