)]}'
{"etc/proxy-server.conf-sample":[{"author":{"_account_id":2622,"name":"Samuel Merritt","email":"spam+launchpad@andcheese.org","username":"torgomatic"},"change_message_id":"8f858b421637f671ee224f33655d89c8d438125e","unresolved":false,"context_lines":[{"line_number":33,"context_line":"# eventlet_debug \u003d false"},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"[pipeline:main]"},{"line_number":36,"context_line":"pipeline \u003d catch_errors healthcheck cache ratelimit container-quotas tempauth proxy-logging proxy-server"},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"[app:proxy-server]"},{"line_number":39,"context_line":"use \u003d egg:swift#proxy"}],"source_content_type":"application/octet-stream","patch_set":3,"id":"AAAAM3%2F%2Fblk%3D","line":36,"updated":"2013-01-22 20:07:22.000000000","message":"Should container-quotas be after tempauth here?\n\nSeems to me that if you have it unauthed, then someone else can probe your account and find containers with quotas simply by faking PUT requests with objects of size 9999999....9999 and looking for 413 responses.\n\nNot the biggest information leak in the world, but perhaps worth thinking about.","commit_id":"17c596ed8f6d0a40af8d4e46253d23bc41ea6f3a"},{"author":{"_account_id":2828,"name":"Michael Barton","email":"mike@weirdlooking.com","username":"redbo"},"change_message_id":"f9afc7bd751495749d712fd66b2f2986f72b0227","unresolved":false,"context_lines":[{"line_number":33,"context_line":"# eventlet_debug \u003d false"},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"[pipeline:main]"},{"line_number":36,"context_line":"pipeline \u003d catch_errors healthcheck cache ratelimit container-quotas tempauth proxy-logging proxy-server"},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"[app:proxy-server]"},{"line_number":39,"context_line":"use \u003d egg:swift#proxy"}],"source_content_type":"application/octet-stream","patch_set":3,"id":"AAAAM3%2F%2FZc8%3D","line":36,"in_reply_to":"AAAAM3%2F%2Fblk%3D","updated":"2013-01-24 02:12:09.000000000","message":"Hmm.. I\u0027m not sure even putting it below tempauth will fix this, since PUTs aren\u0027t really rejected until they get down into the proxy server app.  We may not really be able to preemptively reject requests in middleware at all without leaking the existence of the container?  I\u0027ll have to think about that.","commit_id":"17c596ed8f6d0a40af8d4e46253d23bc41ea6f3a"}],"swift/common/middleware/container_quotas.py":[{"author":{"_account_id":2622,"name":"Samuel Merritt","email":"spam+launchpad@andcheese.org","username":"torgomatic"},"change_message_id":"8f858b421637f671ee224f33655d89c8d438125e","unresolved":false,"context_lines":[{"line_number":55,"context_line":"    def __call__(self, env, start_response):"},{"line_number":56,"context_line":"        try:"},{"line_number":57,"context_line":"            (version, account, container, obj) \u003d \\"},{"line_number":58,"context_line":"                split_path(env[\u0027PATH_INFO\u0027], 2, 4, True)"},{"line_number":59,"context_line":"        except ValueError:"},{"line_number":60,"context_line":"            return self.app(env, start_response)"},{"line_number":61,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAM3%2F%2FblQ%3D","line":58,"updated":"2013-01-22 20:07:22.000000000","message":"Do these need to be run through urllib.unquote?","commit_id":"17c596ed8f6d0a40af8d4e46253d23bc41ea6f3a"},{"author":{"_account_id":2828,"name":"Michael Barton","email":"mike@weirdlooking.com","username":"redbo"},"change_message_id":"f9afc7bd751495749d712fd66b2f2986f72b0227","unresolved":false,"context_lines":[{"line_number":55,"context_line":"    def __call__(self, env, start_response):"},{"line_number":56,"context_line":"        try:"},{"line_number":57,"context_line":"            (version, account, container, obj) \u003d \\"},{"line_number":58,"context_line":"                split_path(env[\u0027PATH_INFO\u0027], 2, 4, True)"},{"line_number":59,"context_line":"        except ValueError:"},{"line_number":60,"context_line":"            return self.app(env, start_response)"},{"line_number":61,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAM3%2F%2FZdM%3D","line":58,"in_reply_to":"AAAAM3%2F%2FblQ%3D","updated":"2013-01-24 02:12:09.000000000","message":"No, req.path needs to be unquoted if you use it, but env[\u0027PATH_INFO\u0027] isn\u0027t quoted.","commit_id":"17c596ed8f6d0a40af8d4e46253d23bc41ea6f3a"},{"author":{"_account_id":866,"name":"Chmouel Boudjnah","email":"chmouel@chmouel.com","username":"chmouel"},"change_message_id":"32beb10afa0c363a90e9ffa2649a6118ac5c1386","unresolved":false,"context_lines":[{"line_number":56,"context_line":"        # 401 if the user couldn\u0027t have PUT this object in the first place."},{"line_number":57,"context_line":"        # This prevents leaking the container\u0027s existence to unauthed users."},{"line_number":58,"context_line":"        if \u0027swift.authorize\u0027 in req.environ:"},{"line_number":59,"context_line":"            req.acl \u003d container_info[\u0027write_acl\u0027]"},{"line_number":60,"context_line":"            aresp \u003d req.environ[\u0027swift.authorize\u0027](req)"},{"line_number":61,"context_line":"            if aresp:"},{"line_number":62,"context_line":"                return aresp"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAM3%2F%2FKLI%3D","line":59,"updated":"2013-02-05 08:53:36.000000000","message":"There don\u0027t seem to be any test for this.","commit_id":"5494d4ee1d8aec0d287d7083d391a4695cac1d23"}],"swift/proxy/controllers/base.py":[{"author":{"_account_id":2622,"name":"Samuel Merritt","email":"spam+launchpad@andcheese.org","username":"torgomatic"},"change_message_id":"8f858b421637f671ee224f33655d89c8d438125e","unresolved":false,"context_lines":[{"line_number":132,"context_line":"    if not cache:"},{"line_number":133,"context_line":"        return None"},{"line_number":134,"context_line":"    (version, account, container, obj) \u003d \\"},{"line_number":135,"context_line":"        split_path(env[\u0027PATH_INFO\u0027], 2, 4, True)"},{"line_number":136,"context_line":"    cache_key \u003d get_container_memcache_key(account, container)"},{"line_number":137,"context_line":"    # Use a unique environment cache key per container.  If you copy this env"},{"line_number":138,"context_line":"    # to make a new request, it won\u0027t accidnetally reuse the old container info"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAM3%2F%2Fbk4%3D","line":135,"updated":"2013-01-22 20:07:22.000000000","message":"Same question as earlier: do these need to be unquoted?","commit_id":"17c596ed8f6d0a40af8d4e46253d23bc41ea6f3a"},{"author":{"_account_id":2622,"name":"Samuel Merritt","email":"spam+launchpad@andcheese.org","username":"torgomatic"},"change_message_id":"8f858b421637f671ee224f33655d89c8d438125e","unresolved":false,"context_lines":[{"line_number":135,"context_line":"        split_path(env[\u0027PATH_INFO\u0027], 2, 4, True)"},{"line_number":136,"context_line":"    cache_key \u003d get_container_memcache_key(account, container)"},{"line_number":137,"context_line":"    # Use a unique environment cache key per container.  If you copy this env"},{"line_number":138,"context_line":"    # to make a new request, it won\u0027t accidnetally reuse the old container info"},{"line_number":139,"context_line":"    env_key \u003d \u0027swift.%s\u0027 % cache_key"},{"line_number":140,"context_line":"    if env_key not in env:"},{"line_number":141,"context_line":"        container_info \u003d cache.get(cache_key)"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAM3%2F%2FblE%3D","line":138,"updated":"2013-01-22 20:07:22.000000000","message":"*accidentally","commit_id":"17c596ed8f6d0a40af8d4e46253d23bc41ea6f3a"},{"author":{"_account_id":2828,"name":"Michael Barton","email":"mike@weirdlooking.com","username":"redbo"},"change_message_id":"f9afc7bd751495749d712fd66b2f2986f72b0227","unresolved":false,"context_lines":[{"line_number":135,"context_line":"        split_path(env[\u0027PATH_INFO\u0027], 2, 4, True)"},{"line_number":136,"context_line":"    cache_key \u003d get_container_memcache_key(account, container)"},{"line_number":137,"context_line":"    # Use a unique environment cache key per container.  If you copy this env"},{"line_number":138,"context_line":"    # to make a new request, it won\u0027t accidnetally reuse the old container info"},{"line_number":139,"context_line":"    env_key \u003d \u0027swift.%s\u0027 % cache_key"},{"line_number":140,"context_line":"    if env_key not in env:"},{"line_number":141,"context_line":"        container_info \u003d cache.get(cache_key)"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAM3%2F%2FZdI%3D","line":138,"in_reply_to":"AAAAM3%2F%2FblE%3D","updated":"2013-01-24 02:12:09.000000000","message":"I\u0027ll fix that.","commit_id":"17c596ed8f6d0a40af8d4e46253d23bc41ea6f3a"},{"author":{"_account_id":866,"name":"Chmouel Boudjnah","email":"chmouel@chmouel.com","username":"chmouel"},"change_message_id":"62f8226dc42261fcd800cacb10b35e1b5340aa60","unresolved":false,"context_lines":[{"line_number":145,"context_line":"                                 environ\u003dnew_env).get_response(app)"},{"line_number":146,"context_line":"            container_info \u003d headers_to_container_info("},{"line_number":147,"context_line":"                resp.headers, resp.status_int)"},{"line_number":148,"context_line":"        env[env_key] \u003d container_info"},{"line_number":149,"context_line":"    return env[env_key]"},{"line_number":150,"context_line":""},{"line_number":151,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAM3%2F%2FeIw%3D","line":148,"updated":"2013-01-21 09:00:37.000000000","message":"is there a cache.set() missing?","commit_id":"17c596ed8f6d0a40af8d4e46253d23bc41ea6f3a"},{"author":{"_account_id":2828,"name":"Michael Barton","email":"mike@weirdlooking.com","username":"redbo"},"change_message_id":"f9afc7bd751495749d712fd66b2f2986f72b0227","unresolved":false,"context_lines":[{"line_number":145,"context_line":"                                 environ\u003dnew_env).get_response(app)"},{"line_number":146,"context_line":"            container_info \u003d headers_to_container_info("},{"line_number":147,"context_line":"                resp.headers, resp.status_int)"},{"line_number":148,"context_line":"        env[env_key] \u003d container_info"},{"line_number":149,"context_line":"    return env[env_key]"},{"line_number":150,"context_line":""},{"line_number":151,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAM3%2F%2FZdY%3D","line":148,"in_reply_to":"AAAAM3%2F%2FeIw%3D","updated":"2013-01-24 02:12:09.000000000","message":"I\u0027m relying on the fact that the HEAD request in the proxy will do a cache set.","commit_id":"17c596ed8f6d0a40af8d4e46253d23bc41ea6f3a"},{"author":{"_account_id":866,"name":"Chmouel Boudjnah","email":"chmouel@chmouel.com","username":"chmouel"},"change_message_id":"bfaade9804f1b8c889084d23c35914d0fe5eadd7","unresolved":false,"context_lines":[{"line_number":189,"context_line":"    return wrapped"},{"line_number":190,"context_line":""},{"line_number":191,"context_line":""},{"line_number":192,"context_line":"def get_container_info(env, app):"},{"line_number":193,"context_line":"    \"\"\""},{"line_number":194,"context_line":"    Get the info structure for a container, based on env and app."},{"line_number":195,"context_line":"    This is useful to middlewares."}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAM3%2F%2FKL0%3D","line":192,"updated":"2013-02-05 08:42:46.000000000","message":"We probably want staticweb use this as well.","commit_id":"5494d4ee1d8aec0d287d7083d391a4695cac1d23"},{"author":{"_account_id":866,"name":"Chmouel Boudjnah","email":"chmouel@chmouel.com","username":"chmouel"},"change_message_id":"bfaade9804f1b8c889084d23c35914d0fe5eadd7","unresolved":false,"context_lines":[{"line_number":207,"context_line":"        container_info \u003d cache.get(cache_key)"},{"line_number":208,"context_line":"        if not container_info:"},{"line_number":209,"context_line":"            new_env \u003d dict(env, REQUEST_METHOD\u003d\u0027HEAD\u0027)"},{"line_number":210,"context_line":"            resp \u003d Request.blank(\u0027/%s/%s/%s\u0027 % (version, account, container),"},{"line_number":211,"context_line":"                                 environ\u003dnew_env).get_response(app)"},{"line_number":212,"context_line":"            container_info \u003d headers_to_container_info("},{"line_number":213,"context_line":"                resp.headers, resp.status_int)"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAM3%2F%2FKLw%3D","line":210,"updated":"2013-02-05 08:42:46.000000000","message":"Why not use make_pre_authed_request ?","commit_id":"5494d4ee1d8aec0d287d7083d391a4695cac1d23"},{"author":{"_account_id":4108,"name":"David Hadas","email":"davidh@il.ibm.com","username":"david-hadas"},"change_message_id":"f104ada511475ffaae0270bf4794a2986c671354","unresolved":false,"context_lines":[{"line_number":189,"context_line":""},{"line_number":190,"context_line":"    return wrapped"},{"line_number":191,"context_line":""},{"line_number":192,"context_line":""},{"line_number":193,"context_line":"def get_container_info(env, app):"},{"line_number":194,"context_line":"    \"\"\""},{"line_number":195,"context_line":"    Get the info structure for a container, based on env and app."}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAM3%2F%2FJSY%3D","line":192,"updated":"2013-02-05 18:08:59.000000000","message":"Is this the right place for such a function? It has nothing to do with the controllers or the \"abstract\" base controller.","commit_id":"24ef12027c7b6e1e2f55275bed18ceac725e27a5"},{"author":{"_account_id":866,"name":"Chmouel Boudjnah","email":"chmouel@chmouel.com","username":"chmouel"},"change_message_id":"65c8ade70cd2b4cd3b99b7b9742d87359b4aafe1","unresolved":false,"context_lines":[{"line_number":189,"context_line":""},{"line_number":190,"context_line":"    return wrapped"},{"line_number":191,"context_line":""},{"line_number":192,"context_line":""},{"line_number":193,"context_line":"def get_container_info(env, app):"},{"line_number":194,"context_line":"    \"\"\""},{"line_number":195,"context_line":"    Get the info structure for a container, based on env and app."}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAM3%2F%2FJQI%3D","line":192,"in_reply_to":"AAAAM3%2F%2FJSY%3D","updated":"2013-02-05 18:27:49.000000000","message":"this request actually goes by the proxy so I\u0027d say pretty much so.","commit_id":"24ef12027c7b6e1e2f55275bed18ceac725e27a5"}]}
