)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":29632,"name":"Carlos Eduardo","email":"ces.eduardo98@gmail.com","username":"silvacarlos"},"change_message_id":"ea17c1b2d394da2a7eb7958a7835d66f420609f4","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"da162fcc_6bd8878a","updated":"2022-03-21 13:49:42.000000000","message":"recheck","commit_id":"22efe4462ee5c4c9eaa054828a6bac6ff1adb851"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"67324e24e073e137e356884024db5222db31934a","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":12,"id":"744a59b2_d52bd99f","updated":"2022-09-13 15:00:05.000000000","message":"recheck\n\nI\u0027m a bit nervous about the logic here: https://github.com/openstack/manila/blob/9df750fd19c6c11562b7bf86464185cd63568310/manila/share/drivers/ganesha/utils.py#L57 -- looks like we always set run_as_root\u003dTrue with the executor; we need to also perhaps test this with the remote executor to be sure we didn\u0027t break anything; ","commit_id":"3064d94959acc97dd15baca8efd42067de5a3f03"},{"author":{"_account_id":29632,"name":"Carlos Eduardo","email":"ces.eduardo98@gmail.com","username":"silvacarlos"},"change_message_id":"7314186ae43f39131d1959ba388bf4a174d824c1","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":12,"id":"cf2ff14b_e2390e8d","updated":"2024-04-26 14:40:16.000000000","message":"recheck\nLogs are gone, resuming the work","commit_id":"3064d94959acc97dd15baca8efd42067de5a3f03"},{"author":{"_account_id":29632,"name":"Carlos Eduardo","email":"ces.eduardo98@gmail.com","username":"silvacarlos"},"change_message_id":"7ccefc4898ee9c29cf4daf830f0631580f580345","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":12,"id":"25c85e19_615d19ac","in_reply_to":"744a59b2_d52bd99f","updated":"2022-09-14 13:45:33.000000000","message":"ack - I\u0027ll take a look","commit_id":"3064d94959acc97dd15baca8efd42067de5a3f03"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"6030a823dfa7e85cc678a720135b66240431e1df","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":13,"id":"271ebc26_3dbc04c0","updated":"2024-06-03 18:01:11.000000000","message":"Hey Carlos; \n\nThanks for your patience with the reviews here.. \n\nI forgot if we wanted to write a single reno for all the privsep changes; or do a reno for each module we\u0027re changing?  I\u0027ve some comments online","commit_id":"a15cbbbd5fa4342f529b836de3d8b46565b17478"},{"author":{"_account_id":29632,"name":"Carlos Eduardo","email":"ces.eduardo98@gmail.com","username":"silvacarlos"},"change_message_id":"cdf28d8e488d5f325d03783999abd2b7c996bf98","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":15,"id":"639b7df5_503301fd","updated":"2026-05-15 20:09:55.000000000","message":"Thanks for the reviews - I have been working on this but I have a feeling we might not need to. The changes I made were all related to entries I found in the filters, but after I analyzed it further, we are never actually sending any of these requests with run_as_root - so maybe we should just attempt the removals and see if the driver complains, as a way of testing this. I\u0027ll work on it and let you know","commit_id":"b023f35985248f6f748bba537c9353581984326e"},{"author":{"_account_id":29632,"name":"Carlos Eduardo","email":"ces.eduardo98@gmail.com","username":"silvacarlos"},"change_message_id":"d6893f508d43e9985e913fe1b8870abfd536162c","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":15,"id":"b389d23e_09f870e4","in_reply_to":"639b7df5_503301fd","updated":"2026-06-12 20:45:37.000000000","message":"We actually do need to. This was being used as a default: https://github.com/openstack/manila/blob/master/manila/share/drivers/ganesha/utils.py#L58 - so we were always doing sudo. We needed to migrate away from that and this change does it. Now we are getting to the other part which is the security enhancements we\u0027re looking as part of this change.","commit_id":"b023f35985248f6f748bba537c9353581984326e"}],"manila/privsep/dbus.py":[{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"6030a823dfa7e85cc678a720135b66240431e1df","unresolved":true,"context_lines":[{"line_number":1,"context_line":"# Copyright 2022 Red Hat, Inc"},{"line_number":2,"context_line":"#"},{"line_number":3,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":4,"context_line":"#    not use this file except in compliance with the License. You may obtain"}],"source_content_type":"text/x-python","patch_set":13,"id":"e2ec2f6c_33c1b258","line":1,"updated":"2024-06-03 18:01:11.000000000","message":"don\u0027t need this","commit_id":"a15cbbbd5fa4342f529b836de3d8b46565b17478"},{"author":{"_account_id":29632,"name":"Carlos Eduardo","email":"ces.eduardo98@gmail.com","username":"silvacarlos"},"change_message_id":"cacabe59e55001e6b7115b4f060e0ad94e6d2395","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright 2022 Red Hat, Inc"},{"line_number":2,"context_line":"#"},{"line_number":3,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":4,"context_line":"#    not use this file except in compliance with the License. You may obtain"}],"source_content_type":"text/x-python","patch_set":13,"id":"db70f1b1_2a00897d","line":1,"in_reply_to":"e2ec2f6c_33c1b258","updated":"2024-12-27 18:06:16.000000000","message":"Done","commit_id":"a15cbbbd5fa4342f529b836de3d8b46565b17478"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"6030a823dfa7e85cc678a720135b66240431e1df","unresolved":true,"context_lines":[{"line_number":13,"context_line":"#    under the License."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"\"\"\""},{"line_number":16,"context_line":"Helpers for os basic commands"},{"line_number":17,"context_line":"\"\"\""},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"from oslo_concurrency import processutils"}],"source_content_type":"text/x-python","patch_set":13,"id":"aff8585d_6013a8f7","line":16,"range":{"start_line":16,"start_character":12,"end_line":16,"end_character":20},"updated":"2024-06-03 18:01:11.000000000","message":"```suggestion\nHelpers for DBUS commands\n```","commit_id":"a15cbbbd5fa4342f529b836de3d8b46565b17478"},{"author":{"_account_id":29632,"name":"Carlos Eduardo","email":"ces.eduardo98@gmail.com","username":"silvacarlos"},"change_message_id":"cacabe59e55001e6b7115b4f060e0ad94e6d2395","unresolved":false,"context_lines":[{"line_number":13,"context_line":"#    under the License."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"\"\"\""},{"line_number":16,"context_line":"Helpers for os basic commands"},{"line_number":17,"context_line":"\"\"\""},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"from oslo_concurrency import processutils"}],"source_content_type":"text/x-python","patch_set":13,"id":"d3a3be2d_e0641f0e","line":16,"range":{"start_line":16,"start_character":12,"end_line":16,"end_character":20},"in_reply_to":"aff8585d_6013a8f7","updated":"2024-12-27 18:06:16.000000000","message":"Done","commit_id":"a15cbbbd5fa4342f529b836de3d8b46565b17478"}],"manila/privsep/os.py":[{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"6dfe796f51ee80c1368ce496e06c21d7014441c0","unresolved":true,"context_lines":[{"line_number":36,"context_line":""},{"line_number":37,"context_line":"@manila.privsep.sys_admin_pctxt.entrypoint"},{"line_number":38,"context_line":"def mkdir(dir_path):"},{"line_number":39,"context_line":"    processutils.execute(\u0027mkdir\u0027, \u0027-p\u0027, dir_path)"},{"line_number":40,"context_line":""},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"@manila.privsep.sys_admin_pctxt.entrypoint"}],"source_content_type":"text/x-python","patch_set":15,"id":"0de456a1_9ea78af0","line":39,"range":{"start_line":39,"start_character":25,"end_line":39,"end_character":38},"updated":"2026-05-04 21:50:21.000000000","message":"a bit paranoid, but, \"-p\" can be optional? Our existing callers dn\u0027t need it..","commit_id":"b023f35985248f6f748bba537c9353581984326e"},{"author":{"_account_id":29632,"name":"Carlos Eduardo","email":"ces.eduardo98@gmail.com","username":"silvacarlos"},"change_message_id":"cdf28d8e488d5f325d03783999abd2b7c996bf98","unresolved":false,"context_lines":[{"line_number":36,"context_line":""},{"line_number":37,"context_line":"@manila.privsep.sys_admin_pctxt.entrypoint"},{"line_number":38,"context_line":"def mkdir(dir_path):"},{"line_number":39,"context_line":"    processutils.execute(\u0027mkdir\u0027, \u0027-p\u0027, dir_path)"},{"line_number":40,"context_line":""},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"@manila.privsep.sys_admin_pctxt.entrypoint"}],"source_content_type":"text/x-python","patch_set":15,"id":"f5aca641_2c6e6808","line":39,"range":{"start_line":39,"start_character":25,"end_line":39,"end_character":38},"in_reply_to":"0de456a1_9ea78af0","updated":"2026-05-15 20:09:55.000000000","message":"yeah, that makes sense... In one of the other patches that I forgot already, I am already making it optional. WIll change it here though","commit_id":"b023f35985248f6f748bba537c9353581984326e"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"6dfe796f51ee80c1368ce496e06c21d7014441c0","unresolved":true,"context_lines":[{"line_number":111,"context_line":""},{"line_number":112,"context_line":""},{"line_number":113,"context_line":"@manila.privsep.sys_admin_pctxt.entrypoint"},{"line_number":114,"context_line":"def write_data_to_file(data, file_path):"},{"line_number":115,"context_line":"    \"\"\"Write data to a file."},{"line_number":116,"context_line":""},{"line_number":117,"context_line":"    :param data: String data to write"},{"line_number":118,"context_line":"    :param file_path: Absolute path to the file"},{"line_number":119,"context_line":"    \"\"\""},{"line_number":120,"context_line":"    with open(file_path, \u0027w\u0027) as f:"},{"line_number":121,"context_line":"        f.write(data)"},{"line_number":122,"context_line":""},{"line_number":123,"context_line":""},{"line_number":124,"context_line":"@manila.privsep.sys_admin_pctxt.entrypoint"}],"source_content_type":"text/x-python","patch_set":15,"id":"0525eed0_9e7b834d","line":121,"range":{"start_line":114,"start_character":0,"end_line":121,"end_character":21},"updated":"2026-05-04 21:50:21.000000000","message":"This seems a bit too loose, and can open up an escalation risk. For example, what\u0027s to stop someone adding a share driver hook that executes a write into /etc/shadow?\n\nlet\u0027s edit the driver code to be super specific on where the write occurs.","commit_id":"b023f35985248f6f748bba537c9353581984326e"},{"author":{"_account_id":29632,"name":"Carlos Eduardo","email":"ces.eduardo98@gmail.com","username":"silvacarlos"},"change_message_id":"cdf28d8e488d5f325d03783999abd2b7c996bf98","unresolved":false,"context_lines":[{"line_number":111,"context_line":""},{"line_number":112,"context_line":""},{"line_number":113,"context_line":"@manila.privsep.sys_admin_pctxt.entrypoint"},{"line_number":114,"context_line":"def write_data_to_file(data, file_path):"},{"line_number":115,"context_line":"    \"\"\"Write data to a file."},{"line_number":116,"context_line":""},{"line_number":117,"context_line":"    :param data: String data to write"},{"line_number":118,"context_line":"    :param file_path: Absolute path to the file"},{"line_number":119,"context_line":"    \"\"\""},{"line_number":120,"context_line":"    with open(file_path, \u0027w\u0027) as f:"},{"line_number":121,"context_line":"        f.write(data)"},{"line_number":122,"context_line":""},{"line_number":123,"context_line":""},{"line_number":124,"context_line":"@manila.privsep.sys_admin_pctxt.entrypoint"}],"source_content_type":"text/x-python","patch_set":15,"id":"9a56aabc_8b77b40f","line":121,"range":{"start_line":114,"start_character":0,"end_line":121,"end_character":21},"in_reply_to":"0525eed0_9e7b834d","updated":"2026-05-15 20:09:55.000000000","message":"The writing happens in ganesha_export_dir, which has a config option and defaults to ``$ganesha_config_dir/export.d``. If we are to harden the security, then we should also update the documentation and tell people what is the place this should be located.","commit_id":"b023f35985248f6f748bba537c9353581984326e"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"6dfe796f51ee80c1368ce496e06c21d7014441c0","unresolved":true,"context_lines":[{"line_number":140,"context_line":"            # Ignore errors, similar to rm -f behavior"},{"line_number":141,"context_line":"            pass"},{"line_number":142,"context_line":""},{"line_number":143,"context_line":""},{"line_number":144,"context_line":"@manila.privsep.sys_admin_pctxt.entrypoint"},{"line_number":145,"context_line":"def cat(file_path):"},{"line_number":146,"context_line":"    return processutils.execute(\"cat\", file_path)"},{"line_number":147,"context_line":""},{"line_number":148,"context_line":""},{"line_number":149,"context_line":"@manila.privsep.sys_admin_pctxt.entrypoint"}],"source_content_type":"text/x-python","patch_set":15,"id":"e2821c4a_9834829d","line":146,"range":{"start_line":143,"start_character":0,"end_line":146,"end_character":49},"updated":"2026-05-04 21:50:21.000000000","message":"same concern. We only need a specific file, maybe build it this along these lines:\n\n`read_ganesha_export(export_dir, name)`","commit_id":"b023f35985248f6f748bba537c9353581984326e"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"6dfe796f51ee80c1368ce496e06c21d7014441c0","unresolved":true,"context_lines":[{"line_number":147,"context_line":""},{"line_number":148,"context_line":""},{"line_number":149,"context_line":"@manila.privsep.sys_admin_pctxt.entrypoint"},{"line_number":150,"context_line":"def service_restart(service_name):"},{"line_number":151,"context_line":"    processutils.execute(\"service\", service_name, \"restart\")"}],"source_content_type":"text/x-python","patch_set":15,"id":"5a957ff7_38272d8b","line":151,"range":{"start_line":150,"start_character":0,"end_line":151,"end_character":60},"updated":"2026-05-04 21:50:21.000000000","message":"this one is too generic. I\u0027d suggest the opposite, scope one down exactly to restart ganesha.nfsd","commit_id":"b023f35985248f6f748bba537c9353581984326e"},{"author":{"_account_id":29632,"name":"Carlos Eduardo","email":"ces.eduardo98@gmail.com","username":"silvacarlos"},"change_message_id":"9f0d37a26a4b726fb4831066e0130573194df471","unresolved":true,"context_lines":[{"line_number":147,"context_line":""},{"line_number":148,"context_line":""},{"line_number":149,"context_line":"@manila.privsep.sys_admin_pctxt.entrypoint"},{"line_number":150,"context_line":"def service_restart(service_name):"},{"line_number":151,"context_line":"    processutils.execute(\"service\", service_name, \"restart\")"}],"source_content_type":"text/x-python","patch_set":15,"id":"d19eec17_9769749e","line":151,"range":{"start_line":150,"start_character":0,"end_line":151,"end_character":60},"in_reply_to":"3d5e4297_58b42dc5","updated":"2026-05-15 20:10:33.000000000","message":"actually not done, didn\u0027t push new PS yet","commit_id":"b023f35985248f6f748bba537c9353581984326e"},{"author":{"_account_id":29632,"name":"Carlos Eduardo","email":"ces.eduardo98@gmail.com","username":"silvacarlos"},"change_message_id":"cdf28d8e488d5f325d03783999abd2b7c996bf98","unresolved":false,"context_lines":[{"line_number":147,"context_line":""},{"line_number":148,"context_line":""},{"line_number":149,"context_line":"@manila.privsep.sys_admin_pctxt.entrypoint"},{"line_number":150,"context_line":"def service_restart(service_name):"},{"line_number":151,"context_line":"    processutils.execute(\"service\", service_name, \"restart\")"}],"source_content_type":"text/x-python","patch_set":15,"id":"3d5e4297_58b42dc5","line":151,"range":{"start_line":150,"start_character":0,"end_line":151,"end_character":60},"in_reply_to":"5a957ff7_38272d8b","updated":"2026-05-15 20:09:55.000000000","message":"Done","commit_id":"b023f35985248f6f748bba537c9353581984326e"}],"manila/share/drivers/ganesha/manager.py":[{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"67324e24e073e137e356884024db5222db31934a","unresolved":true,"context_lines":[{"line_number":407,"context_line":"    def _dbus_send_ganesha(self, method, *args, **kwargs):"},{"line_number":408,"context_line":"        \"\"\"Send a message to Ganesha via dbus.\"\"\""},{"line_number":409,"context_line":"        service \u003d kwargs.pop(\"service\", \"exportmgr\")"},{"line_number":410,"context_line":"        LOG.debug(f\u0027Dbus call {service}.{method}\u0027)"},{"line_number":411,"context_line":"        privsep_dbus.dbus_send_ganesha(service, method, *args, **kwargs)"},{"line_number":412,"context_line":""},{"line_number":413,"context_line":"    def _remove_export_dbus(self, xid):"}],"source_content_type":"text/x-python","patch_set":12,"id":"3fb65106_12def158","line":410,"range":{"start_line":410,"start_character":7,"end_line":410,"end_character":50},"updated":"2022-09-13 15:00:05.000000000","message":"This should be okay, but it is potentially unsafe when feeding params to the logger: https://discuss.python.org/t/safer-logging-methods-for-f-strings-and-new-style-formatting/13802","commit_id":"3064d94959acc97dd15baca8efd42067de5a3f03"},{"author":{"_account_id":29632,"name":"Carlos Eduardo","email":"ces.eduardo98@gmail.com","username":"silvacarlos"},"change_message_id":"cacabe59e55001e6b7115b4f060e0ad94e6d2395","unresolved":false,"context_lines":[{"line_number":407,"context_line":"    def _dbus_send_ganesha(self, method, *args, **kwargs):"},{"line_number":408,"context_line":"        \"\"\"Send a message to Ganesha via dbus.\"\"\""},{"line_number":409,"context_line":"        service \u003d kwargs.pop(\"service\", \"exportmgr\")"},{"line_number":410,"context_line":"        LOG.debug(f\u0027Dbus call {service}.{method}\u0027)"},{"line_number":411,"context_line":"        privsep_dbus.dbus_send_ganesha(service, method, *args, **kwargs)"},{"line_number":412,"context_line":""},{"line_number":413,"context_line":"    def _remove_export_dbus(self, xid):"}],"source_content_type":"text/x-python","patch_set":12,"id":"88a3977f_3412c402","line":410,"range":{"start_line":410,"start_character":7,"end_line":410,"end_character":50},"in_reply_to":"3fb65106_12def158","updated":"2024-12-27 18:06:16.000000000","message":"Done","commit_id":"3064d94959acc97dd15baca8efd42067de5a3f03"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"6030a823dfa7e85cc678a720135b66240431e1df","unresolved":true,"context_lines":[{"line_number":295,"context_line":"        tmpf \u003d privsep_os.mktemp("},{"line_number":296,"context_line":"            dirpath, fname + \".XXXXXX\")[0][:-1]"},{"line_number":297,"context_line":"        LOG.debug(f\u0027Writing to file {tmpf}\u0027)"},{"line_number":298,"context_line":"        privsep_os.write_data_to_file(pipes.quote(data), pipes.quote(tmpf))"},{"line_number":299,"context_line":"        return tmpf"},{"line_number":300,"context_line":""},{"line_number":301,"context_line":"    def _write_conf_file(self, name, data):"}],"source_content_type":"text/x-python","patch_set":13,"id":"75f976a4_6d23b0de","line":298,"range":{"start_line":298,"start_character":38,"end_line":298,"end_character":49},"updated":"2024-06-03 18:01:11.000000000","message":"I went down a rabbit hole looking at pipes.quote; apparently this was deprecated between python 2.7 and python 3.3 and we somehow didn\u0027t catch this. Weird;\n\nFirstly: quoting strings seems like something that can be handled inside the privsep methods themselves.. because we\u0027re always going to need it when dumping strings into commands\n\nSecond: shlex.quote replaces pipes.quote in newer versions of python.. so, we should switch to using it; it is a 1-1 replacement: \n\nhttps://stackless.readthedocs.io/en/2.7-slp/library/pipes.html\nhttps://docs.python.org/3/library/shlex.html#shlex.quote","commit_id":"a15cbbbd5fa4342f529b836de3d8b46565b17478"},{"author":{"_account_id":29632,"name":"Carlos Eduardo","email":"ces.eduardo98@gmail.com","username":"silvacarlos"},"change_message_id":"cacabe59e55001e6b7115b4f060e0ad94e6d2395","unresolved":false,"context_lines":[{"line_number":295,"context_line":"        tmpf \u003d privsep_os.mktemp("},{"line_number":296,"context_line":"            dirpath, fname + \".XXXXXX\")[0][:-1]"},{"line_number":297,"context_line":"        LOG.debug(f\u0027Writing to file {tmpf}\u0027)"},{"line_number":298,"context_line":"        privsep_os.write_data_to_file(pipes.quote(data), pipes.quote(tmpf))"},{"line_number":299,"context_line":"        return tmpf"},{"line_number":300,"context_line":""},{"line_number":301,"context_line":"    def _write_conf_file(self, name, data):"}],"source_content_type":"text/x-python","patch_set":13,"id":"c990715e_c2ba0b99","line":298,"range":{"start_line":298,"start_character":38,"end_line":298,"end_character":49},"in_reply_to":"75f976a4_6d23b0de","updated":"2024-12-27 18:06:16.000000000","message":"Done","commit_id":"a15cbbbd5fa4342f529b836de3d8b46565b17478"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"6030a823dfa7e85cc678a720135b66240431e1df","unresolved":true,"context_lines":[{"line_number":637,"context_line":"    def reset_exports(self):"},{"line_number":638,"context_line":"        \"\"\"Delete all export files.\"\"\""},{"line_number":639,"context_line":"        privsep_os.remove_file("},{"line_number":640,"context_line":"            f\u0027{pipes.quote(self.ganesha_export_dir)}/*.conf\u0027)"},{"line_number":641,"context_line":"        self._mkindex()"}],"source_content_type":"text/x-python","patch_set":13,"id":"9d66b1f4_ce4761c2","line":640,"range":{"start_line":640,"start_character":15,"end_line":640,"end_character":26},"updated":"2024-06-03 18:01:11.000000000","message":"same comment as above about the \"quote\" method","commit_id":"a15cbbbd5fa4342f529b836de3d8b46565b17478"},{"author":{"_account_id":29632,"name":"Carlos Eduardo","email":"ces.eduardo98@gmail.com","username":"silvacarlos"},"change_message_id":"cacabe59e55001e6b7115b4f060e0ad94e6d2395","unresolved":false,"context_lines":[{"line_number":637,"context_line":"    def reset_exports(self):"},{"line_number":638,"context_line":"        \"\"\"Delete all export files.\"\"\""},{"line_number":639,"context_line":"        privsep_os.remove_file("},{"line_number":640,"context_line":"            f\u0027{pipes.quote(self.ganesha_export_dir)}/*.conf\u0027)"},{"line_number":641,"context_line":"        self._mkindex()"}],"source_content_type":"text/x-python","patch_set":13,"id":"72fb1912_933bab55","line":640,"range":{"start_line":640,"start_character":15,"end_line":640,"end_character":26},"in_reply_to":"9d66b1f4_ce4761c2","updated":"2024-12-27 18:06:16.000000000","message":"Done","commit_id":"a15cbbbd5fa4342f529b836de3d8b46565b17478"}]}
