)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":6968,"name":"Christian Schwede","email":"cschwede@nvidia.com","username":"cschwede"},"change_message_id":"654a46d7448f477ba2418559a5cdb63eb8c8dbce","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"a0d66ed7_04419d3a","updated":"2026-07-13 07:56:35.000000000","message":"I like the idea, but please have a look at my inline comment","commit_id":"d51a77310229cb845162e3fba4e006e6a01711f8"},{"author":{"_account_id":7233,"name":"Matthew Oliver","email":"matt@oliver.net.au","username":"mattoliverau"},"change_message_id":"967098f16be65fbf11c505dd5172ab85ce4eaa49","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"b6a8841e_e02cfd05","updated":"2026-07-10 06:40:13.000000000","message":"I love the idea. Do we need to worry about exposing infomation here? ie if the symlink is initially from another account? Or am I being to cautious/","commit_id":"d51a77310229cb845162e3fba4e006e6a01711f8"},{"author":{"_account_id":6968,"name":"Christian Schwede","email":"cschwede@nvidia.com","username":"cschwede"},"change_message_id":"654a46d7448f477ba2418559a5cdb63eb8c8dbce","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"039ae364_c9f17d64","in_reply_to":"b6a8841e_e02cfd05","updated":"2026-07-13 07:56:35.000000000","message":"I was wondering the same - look at this:\n\n```\n#!/bin/bash\nresetswift\nswift-init start main\ntouch obj\n\nAUTH\u003d\"-A http://localhost:8080/auth/v1.0 -U test2:tester2 -K testing2\"\nswift $AUTH post versiontest -H \"X-Versions-Enabled: true\"\nswift $AUTH upload versiontest obj\nswift $AUTH post versiontest --read-acl \"test:tester\"\nswift $AUTH upload symtest obj --object-name symlink -H \"X-Symlink-Target: versiontest/obj\"\nswift $AUTH post symtest --read-acl \"test:tester\"\n\nswift upload symtest obj --object-name symlink -H \"X-Symlink-Target: symtest/symlink\" -H \"X-Symlink-Target-Account: AUTH_test2\"\n\nswift download --debug symtest symlink```\n\nThe output shows something like this - revealing the internal container names of the test2:tester2 account, as well as the reserved internal paths that we rewrite in object_versioning.py (see my other comment):\n```\nINFO:swiftclient:RESP BODY: b\u0027Too many levels of symbolic links, maximum allowed is 2\\n\\n/v1/AUTH_test/symtest/symlink -\u003e /v1/AUTH_test2/symtest/symlink -\u003e /v1/AUTH_test2/versiontest/obj -\u003e /v1/AUTH_test2/%00versions%00versiontest/%00obj%008216071191.71372\u0027\n```","commit_id":"d51a77310229cb845162e3fba4e006e6a01711f8"}],"swift/common/middleware/versioned_writes/object_versioning.py":[{"author":{"_account_id":6968,"name":"Christian Schwede","email":"cschwede@nvidia.com","username":"cschwede"},"change_message_id":"654a46d7448f477ba2418559a5cdb63eb8c8dbce","unresolved":true,"context_lines":[{"line_number":842,"context_line":"        # GET/HEAD/OPTIONS"},{"line_number":843,"context_line":"        resp \u003d req.get_response(self.app)"},{"line_number":844,"context_line":""},{"line_number":845,"context_line":"        resp.headers[\u0027X-Object-Version-Id\u0027] \u003d \u0027null\u0027"},{"line_number":846,"context_line":"        # Check for a \"real\" version"},{"line_number":847,"context_line":"        loc \u003d wsgi_unquote(resp.headers.get(\u0027Content-Location\u0027, \u0027\u0027))"},{"line_number":848,"context_line":"        if loc:"}],"source_content_type":"text/x-python","patch_set":2,"id":"b9fddc07_082c8575","line":845,"updated":"2026-07-13 07:56:35.000000000","message":"Does a similar rewrite like this maybe help?","commit_id":"d51a77310229cb845162e3fba4e006e6a01711f8"}]}
