)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":708,"name":"Yuriy Taraday","email":"yuriy@taraday.nl","username":"yorik-sar"},"change_message_id":"dce3f5b7e24aa078a7839972956f5ad98ee8a662","unresolved":false,"context_lines":[{"line_number":10,"context_line":"the final command with an additional `sudo -u $user`.  Apart from being"},{"line_number":11,"context_line":"heavyweight, using sudo here also resets permissions, etc preventing"},{"line_number":12,"context_line":"related efforts to use more advanced privilege mechanisms (like Linux"},{"line_number":13,"context_line":"capabilities or SELinux policies)"},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"This change simply calls os.setuid() in the child process instead."},{"line_number":16,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"9a80dd14_ef8efe77","line":13,"updated":"2015-03-10 12:26:54.000000000","message":"Don\u0027t we already assume rootwrap is started under sudo?","commit_id":"1ca92f0e2933b2b62030b8281eb34a9a51a219d2"},{"author":{"_account_id":11279,"name":"Angus Lees","email":"gus@inodes.org","username":"gus"},"change_message_id":"5af9fb5f1a1b6c7db394a2e3a6bffa56450053fd","unresolved":false,"context_lines":[{"line_number":10,"context_line":"the final command with an additional `sudo -u $user`.  Apart from being"},{"line_number":11,"context_line":"heavyweight, using sudo here also resets permissions, etc preventing"},{"line_number":12,"context_line":"related efforts to use more advanced privilege mechanisms (like Linux"},{"line_number":13,"context_line":"capabilities or SELinux policies)"},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"This change simply calls os.setuid() in the child process instead."},{"line_number":16,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"da9b358b_73f8084a","line":13,"in_reply_to":"9a80dd14_ef8efe77","updated":"2015-03-31 07:18:23.000000000","message":"Yes, but I\u0027m exploring other options (in Ie176358e3dcfd85cf5d9a4b6235dc41246ef8e5d).\n\nI\u0027m happy to remove the latter phrase and leave the motivation simply as \"an additional sudo invocation is unnecessary\" if you would prefer.","commit_id":"1ca92f0e2933b2b62030b8281eb34a9a51a219d2"}],"oslo_rootwrap/cmd.py":[{"author":{"_account_id":708,"name":"Yuriy Taraday","email":"yuriy@taraday.nl","username":"yorik-sar"},"change_message_id":"dce3f5b7e24aa078a7839972956f5ad98ee8a662","unresolved":false,"context_lines":[{"line_number":82,"context_line":"        _exit_error(execname, msg, RC_BADCONFIG, log\u003dFalse)"},{"line_number":83,"context_line":"    except moves.configparser.Error as exc:"},{"line_number":84,"context_line":"        _exit_error(execname, \"Incorrect configuration file %s: %s\" %"},{"line_number":85,"context_line":"                    (configfile, exc), RC_BADCONFIG, log\u003dFalse)"},{"line_number":86,"context_line":""},{"line_number":87,"context_line":"    if config.use_syslog:"},{"line_number":88,"context_line":"        wrapper.setup_syslog(execname,"}],"source_content_type":"text/x-python","patch_set":1,"id":"9a80dd14_6fa4ce07","line":85,"updated":"2015-03-10 12:26:54.000000000","message":"Unrelated change.","commit_id":"1ca92f0e2933b2b62030b8281eb34a9a51a219d2"},{"author":{"_account_id":11279,"name":"Angus Lees","email":"gus@inodes.org","username":"gus"},"change_message_id":"5af9fb5f1a1b6c7db394a2e3a6bffa56450053fd","unresolved":false,"context_lines":[{"line_number":82,"context_line":"        _exit_error(execname, msg, RC_BADCONFIG, log\u003dFalse)"},{"line_number":83,"context_line":"    except moves.configparser.Error as exc:"},{"line_number":84,"context_line":"        _exit_error(execname, \"Incorrect configuration file %s: %s\" %"},{"line_number":85,"context_line":"                    (configfile, exc), RC_BADCONFIG, log\u003dFalse)"},{"line_number":86,"context_line":""},{"line_number":87,"context_line":"    if config.use_syslog:"},{"line_number":88,"context_line":"        wrapper.setup_syslog(execname,"}],"source_content_type":"text/x-python","patch_set":1,"id":"da9b358b_9394ace2","line":85,"in_reply_to":"9a80dd14_6fa4ce07","updated":"2015-03-31 07:18:23.000000000","message":"Reverted.","commit_id":"1ca92f0e2933b2b62030b8281eb34a9a51a219d2"}],"oslo_rootwrap/tests/test_functional.py":[{"author":{"_account_id":708,"name":"Yuriy Taraday","email":"yuriy@taraday.nl","username":"yorik-sar"},"change_message_id":"dce3f5b7e24aa078a7839972956f5ad98ee8a662","unresolved":false,"context_lines":[{"line_number":164,"context_line":"        # Expect client to succesfully restart daemon and run simple request"},{"line_number":165,"context_line":"        self.test_run_once()"},{"line_number":166,"context_line":""},{"line_number":167,"context_line":"    def test_run_as(self):"},{"line_number":168,"context_line":"        if os.getuid() !\u003d 0:"},{"line_number":169,"context_line":"            self.skip(\u0027Test requires root (for setuid)\u0027)"},{"line_number":170,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"9a80dd14_6cb5bc7c","line":167,"updated":"2015-03-10 12:26:54.000000000","message":"This test should be in _FunctionalBase class.","commit_id":"1ca92f0e2933b2b62030b8281eb34a9a51a219d2"},{"author":{"_account_id":11279,"name":"Angus Lees","email":"gus@inodes.org","username":"gus"},"change_message_id":"5af9fb5f1a1b6c7db394a2e3a6bffa56450053fd","unresolved":false,"context_lines":[{"line_number":164,"context_line":"        # Expect client to succesfully restart daemon and run simple request"},{"line_number":165,"context_line":"        self.test_run_once()"},{"line_number":166,"context_line":""},{"line_number":167,"context_line":"    def test_run_as(self):"},{"line_number":168,"context_line":"        if os.getuid() !\u003d 0:"},{"line_number":169,"context_line":"            self.skip(\u0027Test requires root (for setuid)\u0027)"},{"line_number":170,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"da9b358b_c5ab85d5","line":167,"in_reply_to":"9a80dd14_6cb5bc7c","updated":"2015-03-31 07:18:23.000000000","message":"Done","commit_id":"1ca92f0e2933b2b62030b8281eb34a9a51a219d2"},{"author":{"_account_id":708,"name":"Yuriy Taraday","email":"yuriy@taraday.nl","username":"yorik-sar"},"change_message_id":"dce3f5b7e24aa078a7839972956f5ad98ee8a662","unresolved":false,"context_lines":[{"line_number":166,"context_line":""},{"line_number":167,"context_line":"    def test_run_as(self):"},{"line_number":168,"context_line":"        if os.getuid() !\u003d 0:"},{"line_number":169,"context_line":"            self.skip(\u0027Test requires root (for setuid)\u0027)"},{"line_number":170,"context_line":""},{"line_number":171,"context_line":"        # Should run as \u0027nobody\u0027"},{"line_number":172,"context_line":"        code, out, err \u003d self.execute([\u0027id\u0027, \u0027-u\u0027])"}],"source_content_type":"text/x-python","patch_set":1,"id":"9a80dd14_2c1bc481","line":169,"updated":"2015-03-10 12:26:54.000000000","message":"This means that this test will never be run: neither CI nor developers would run tests as root.","commit_id":"1ca92f0e2933b2b62030b8281eb34a9a51a219d2"},{"author":{"_account_id":11279,"name":"Angus Lees","email":"gus@inodes.org","username":"gus"},"change_message_id":"5af9fb5f1a1b6c7db394a2e3a6bffa56450053fd","unresolved":false,"context_lines":[{"line_number":166,"context_line":""},{"line_number":167,"context_line":"    def test_run_as(self):"},{"line_number":168,"context_line":"        if os.getuid() !\u003d 0:"},{"line_number":169,"context_line":"            self.skip(\u0027Test requires root (for setuid)\u0027)"},{"line_number":170,"context_line":""},{"line_number":171,"context_line":"        # Should run as \u0027nobody\u0027"},{"line_number":172,"context_line":"        code, out, err \u003d self.execute([\u0027id\u0027, \u0027-u\u0027])"}],"source_content_type":"text/x-python","patch_set":1,"id":"da9b358b_73548820","line":169,"in_reply_to":"9a80dd14_2c1bc481","updated":"2015-03-31 07:18:23.000000000","message":"Correct.  If you have any better suggestions, I\u0027m all ears.  A test that mocks out all the syscalls means I\u0027m not actually testing that the setuid behaviour works as we all expect (particularly wrt subprocess/fork) and I figure the code gets exercised in _some_ form during tempest runs anyway.\n\nI could also remove this unittest entirely if you\u0027d rather avoid the confusion of a test that may bitrot.  The run_as feature was previously untested, so it\u0027s \"no worse\" :/","commit_id":"1ca92f0e2933b2b62030b8281eb34a9a51a219d2"}],"oslo_rootwrap/tests/test_functional_eventlet.py":[{"author":{"_account_id":708,"name":"Yuriy Taraday","email":"yuriy@taraday.nl","username":"yorik-sar"},"change_message_id":"dce3f5b7e24aa078a7839972956f5ad98ee8a662","unresolved":false,"context_lines":[{"line_number":19,"context_line":"    import eventlet"},{"line_number":20,"context_line":"    eventlet.monkey_patch()"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"    from oslotests import test_functional"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"    class RootwrapDaemonTest(test_functional.RootwrapDaemonTest):"},{"line_number":25,"context_line":"        def assert_unpatched(self):"}],"source_content_type":"text/x-python","patch_set":1,"id":"9a80dd14_6ce77cac","line":22,"updated":"2015-03-10 12:26:54.000000000","message":"Unrelated change (and breaks CI run). This should be:\n\n  from oslo_rootwrap.tests import test_functional","commit_id":"1ca92f0e2933b2b62030b8281eb34a9a51a219d2"},{"author":{"_account_id":11279,"name":"Angus Lees","email":"gus@inodes.org","username":"gus"},"change_message_id":"5af9fb5f1a1b6c7db394a2e3a6bffa56450053fd","unresolved":false,"context_lines":[{"line_number":19,"context_line":"    import eventlet"},{"line_number":20,"context_line":"    eventlet.monkey_patch()"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"    from oslotests import test_functional"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"    class RootwrapDaemonTest(test_functional.RootwrapDaemonTest):"},{"line_number":25,"context_line":"        def assert_unpatched(self):"}],"source_content_type":"text/x-python","patch_set":1,"id":"da9b358b_22b7c787","line":22,"in_reply_to":"9a80dd14_6ce77cac","updated":"2015-03-31 07:18:23.000000000","message":"Reverted - not sure how this crept in :/","commit_id":"1ca92f0e2933b2b62030b8281eb34a9a51a219d2"}],"oslo_rootwrap/wrapper.py":[{"author":{"_account_id":708,"name":"Yuriy Taraday","email":"yuriy@taraday.nl","username":"yorik-sar"},"change_message_id":"dce3f5b7e24aa078a7839972956f5ad98ee8a662","unresolved":false,"context_lines":[{"line_number":200,"context_line":"            command, filtermatch.name))"},{"line_number":201,"context_line":""},{"line_number":202,"context_line":"    def preexec():"},{"line_number":203,"context_line":"        _subprocess_setup()"},{"line_number":204,"context_line":"        filtermatch.preexec()"},{"line_number":205,"context_line":""},{"line_number":206,"context_line":"    obj \u003d subprocess.Popen(command,"}],"source_content_type":"text/x-python","patch_set":1,"id":"9a80dd14_2f7736a1","line":203,"updated":"2015-03-10 12:26:54.000000000","message":"Is _subprocess_setup used anywhere else? If it\u0027s not, it should be inlined here.","commit_id":"1ca92f0e2933b2b62030b8281eb34a9a51a219d2"},{"author":{"_account_id":11279,"name":"Angus Lees","email":"gus@inodes.org","username":"gus"},"change_message_id":"5af9fb5f1a1b6c7db394a2e3a6bffa56450053fd","unresolved":false,"context_lines":[{"line_number":200,"context_line":"            command, filtermatch.name))"},{"line_number":201,"context_line":""},{"line_number":202,"context_line":"    def preexec():"},{"line_number":203,"context_line":"        _subprocess_setup()"},{"line_number":204,"context_line":"        filtermatch.preexec()"},{"line_number":205,"context_line":""},{"line_number":206,"context_line":"    obj \u003d subprocess.Popen(command,"}],"source_content_type":"text/x-python","patch_set":1,"id":"da9b358b_624b8f88","line":203,"in_reply_to":"9a80dd14_2f7736a1","updated":"2015-03-31 07:18:23.000000000","message":"Good suggestion - inlined.","commit_id":"1ca92f0e2933b2b62030b8281eb34a9a51a219d2"}]}
