)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     Nachi Ueno \u003cnachi@nttmcl.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2012-09-09 05:24:16 +0000"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"verify router,  subnet/port ownership for L3 router interface calls"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Fixes bug 1042037"},{"line_number":10,"context_line":"Added policy checks for add interface and remove interface"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":5,"id":"AAAALH%2F%2Fdi4%3D","line":7,"updated":"2012-09-09 06:11:59.000000000","message":"This commit message is not describing the change appropriately.\nIMO, moving L.10 to here is more suitable.","commit_id":"9445c67c969ed6634b7e204380185d18dd2806f8"}],"etc/policy.json":[{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"67679149a90dedb243103a3855acd8bb6fbb0f9f","unresolved":false,"context_lines":[{"line_number":8,"context_line":"    \"extension:provider_network:view\": [[\"rule:admin_only\"]],"},{"line_number":9,"context_line":"    \"extension:provider_network:set\": [[\"rule:admin_only\"]],"},{"line_number":10,"context_line":""},{"line_number":11,"context_line":"    \"extension:l3:add_interface\": [[\"rule:admin_or_owner\"]],"},{"line_number":12,"context_line":"    \"extension:l3:remove_interface\": [[\"rule:admin_or_owner\"]],"},{"line_number":13,"context_line":"    \"extension:l3:create_router\": [],"},{"line_number":14,"context_line":"    \"extension:l3:get_router\": [[\"rule:admin_or_owner\"]],"}],"source_content_type":"application/json","patch_set":1,"id":"AAAALH%2F%2FfoU%3D","line":11,"updated":"2012-09-06 07:47:55.000000000","message":"\"extension:l3:add_router_interface\" is referred in l3_db.py.","commit_id":"4b118e0236444cb1ed45fec9cb1a36eb3b3ba68d"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"67679149a90dedb243103a3855acd8bb6fbb0f9f","unresolved":false,"context_lines":[{"line_number":9,"context_line":"    \"extension:provider_network:set\": [[\"rule:admin_only\"]],"},{"line_number":10,"context_line":""},{"line_number":11,"context_line":"    \"extension:l3:add_interface\": [[\"rule:admin_or_owner\"]],"},{"line_number":12,"context_line":"    \"extension:l3:remove_interface\": [[\"rule:admin_or_owner\"]],"},{"line_number":13,"context_line":"    \"extension:l3:create_router\": [],"},{"line_number":14,"context_line":"    \"extension:l3:get_router\": [[\"rule:admin_or_owner\"]],"},{"line_number":15,"context_line":"    \"extension:l3:update_router\": [[\"rule:admin_or_owner\"]],"}],"source_content_type":"application/json","patch_set":1,"id":"AAAALH%2F%2FfoQ%3D","line":12,"updated":"2012-09-06 07:47:55.000000000","message":"Same as the above.","commit_id":"4b118e0236444cb1ed45fec9cb1a36eb3b3ba68d"}],"quantum/db/l3_db.py":[{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"67679149a90dedb243103a3855acd8bb6fbb0f9f","unresolved":false,"context_lines":[{"line_number":104,"context_line":"        r \u003d router[\u0027router\u0027]"},{"line_number":105,"context_line":"        policy.enforce(context,"},{"line_number":106,"context_line":"                       \"extension:l3:create_router\","},{"line_number":107,"context_line":"                       router)"},{"line_number":108,"context_line":"        has_gw_info \u003d False"},{"line_number":109,"context_line":"        if \u0027external_gateway_info\u0027 in r:"},{"line_number":110,"context_line":"            has_gw_info \u003d True"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAALH%2F%2Ffo8%3D","line":107,"updated":"2012-09-06 07:47:55.000000000","message":"I don\u0027t understand why we need to add policy.enforce to create/update/delete_router. They are already under policy-control without this patch.\nIMO, only policy enforcing for add/delete_router_interface() are required.","commit_id":"4b118e0236444cb1ed45fec9cb1a36eb3b3ba68d"},{"author":{"_account_id":2874,"name":"yong sheng gong","email":"gong.yongsheng@99cloud.net","username":"gongysh"},"change_message_id":"2cac6ee78b90e1af5fa559504c11603c78e54e08","unresolved":false,"context_lines":[{"line_number":104,"context_line":"        r \u003d router[\u0027router\u0027]"},{"line_number":105,"context_line":"        policy.enforce(context,"},{"line_number":106,"context_line":"                       \"extension:l3:create_router\","},{"line_number":107,"context_line":"                       router)"},{"line_number":108,"context_line":"        has_gw_info \u003d False"},{"line_number":109,"context_line":"        if \u0027external_gateway_info\u0027 in r:"},{"line_number":110,"context_line":"            has_gw_info \u003d True"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAALH%2F%2FerA%3D","line":107,"in_reply_to":"AAAALH%2F%2Ffo8%3D","updated":"2012-09-07 13:39:27.000000000","message":"Yes, it is enforced in base.py\u0027s create function: the rule should be \u0027create_router\u0027,  but since it is not defined in policy.json, so the brain will use default rule:    \"default\": [[\"rule:admin_or_owner\"]],\n\nThis default rule allow any tenant can create their own resource, but admin role one can create resources for others.\n\nThe same with all of other operation.","commit_id":"4b118e0236444cb1ed45fec9cb1a36eb3b3ba68d"},{"author":{"_account_id":2874,"name":"yong sheng gong","email":"gong.yongsheng@99cloud.net","username":"gongysh"},"change_message_id":"2cac6ee78b90e1af5fa559504c11603c78e54e08","unresolved":false,"context_lines":[{"line_number":302,"context_line":"        try:"},{"line_number":303,"context_line":"            policy.enforce(context,"},{"line_number":304,"context_line":"                           \"extension:router:add_router_interface\","},{"line_number":305,"context_line":"                           self._make_router_dict(router))"},{"line_number":306,"context_line":"        except q_exc.PolicyNotAuthorized:"},{"line_number":307,"context_line":"            raise l3.RouterNotFound(router_id\u003drouter_id)"},{"line_number":308,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAALH%2F%2FdmI%3D","line":305,"updated":"2012-09-09 04:55:34.000000000","message":"are you sure here is    self._make_router_dict(router)) again?","commit_id":"c675197f820142da9d063d8713f9af8ed1b68d23"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"unresolved":false,"context_lines":[{"line_number":218,"context_line":""},{"line_number":219,"context_line":"    def delete_router(self, context, id):"},{"line_number":220,"context_line":"        with context.session.begin(subtransactions\u003dTrue):"},{"line_number":221,"context_line":"            router \u003d self._get_router(context, id)"},{"line_number":222,"context_line":"            device_filter \u003d {\u0027device_id\u0027: [id],"},{"line_number":223,"context_line":"                             \u0027device_owner\u0027: [DEVICE_OWNER_ROUTER_INTF]}"},{"line_number":224,"context_line":"            ports \u003d self.get_ports(context, filters\u003ddevice_filter)"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAALH%2F%2FdjI%3D","line":221,"updated":"2012-09-09 06:11:59.000000000","message":"Is it needed to remove the empty line?","commit_id":"9445c67c969ed6634b7e204380185d18dd2806f8"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"unresolved":false,"context_lines":[{"line_number":292,"context_line":"                raise q_exc.BadRequest(resource\u003d\u0027router\u0027, msg\u003dmsg)"},{"line_number":293,"context_line":""},{"line_number":294,"context_line":"            port \u003d self._get_port(context, interface_info[\u0027port_id\u0027])"},{"line_number":295,"context_line":""},{"line_number":296,"context_line":"            if port[\u0027device_id\u0027]:"},{"line_number":297,"context_line":"                raise q_exc.PortInUse(net_id\u003dport[\u0027network_id\u0027],"},{"line_number":298,"context_line":"                                      port_id\u003dport[\u0027id\u0027],"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAALH%2F%2FdjM%3D","line":295,"updated":"2012-09-09 06:11:59.000000000","message":"Unnecessary empty line is added.","commit_id":"9445c67c969ed6634b7e204380185d18dd2806f8"}]}
