对于 Unix 用户通常的 ~/.subversion/servers,本次检查会列出所选的代理输入与主机组映射,而不打印任何已保存的密码:

from configparser import ConfigParser
from pathlib import Path

settings = ConfigParser(interpolation=None)
settings.read(Path.home() / '.subversion' / 'servers')
for key in ('http-proxy-host', 'http-proxy-port',
            'http-proxy-exceptions'):
    print(key, settings.get('global', key, fallback=''))

if settings.has_section('groups'):
    for group, patterns in settings.items('groups'):
        print('group', group, patterns)

请把仓库的主机名与这份输出放在一起。脚本报告的是文件内容,而不是 Subversion 最终选择的路径。

除 global 之外,还要检查匹配组的具名小节。groups 小节把名称映射到服务器模式;匹配组的主机和端口值可以覆盖默认值,而例外则可以绕过以其他方式配置的代理。

然后要考虑系统级与平台特定的来源、自定义配置目录以及命令行覆盖。应查询实际账户或调用所用的文件,而不是另一个用户的主目录。

查看器应当按来源和范围标注各个值。仅仅一条不加限定的系统代理字符串,既丢失了针对主机的判断,也丢失了用户文件输入与系统策略之间的区别。

相关文章