)]}'
{"/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"}],"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"}]}
