diff --git a/meson_options.txt b/meson_options.txt index 65530a06..b175ad0f 100644 --- a/meson_options.txt +++ b/meson_options.txt @@ -75,3 +75,8 @@ option('with-upd', type: 'boolean', option('with-perl-legacy-api', type: 'boolean', value: false, description: 'Enables the legacy IRC perl module for compatibility with old scripts' ) + +# Build inputs +option('public-suffix-list', type: 'string', value: '', + description: 'Path to a local public_suffix_list.dat to generate the URL detection rules from instead of downloading it' +) diff --git a/src/common/gen-public-suffix.py b/src/common/gen-public-suffix.py index cd3a96e6..1a392fc8 100644 --- a/src/common/gen-public-suffix.py +++ b/src/common/gen-public-suffix.py @@ -38,16 +38,16 @@ def main(): if len(sys.argv) not in (2, 3): raise SystemExit("usage: gen-public-suffix.py [source]") output = Path(sys.argv[1]) - sources = [] if len(sys.argv) == 3: - sources.append(Path(sys.argv[2])) - sources.extend( - [ - Path(__file__).with_name("public_suffix_list.dat"), - Path("/usr/share/publicsuffix/public_suffix_list.dat"), - Path("/app/share/publicsuffix/public_suffix_list.dat"), - ] - ) + # An explicit source is authoritative, don't go online behind its back. + rules = parse_rules(Path(sys.argv[2]).read_text(encoding="utf-8")) + emit_header(str(output), rules) + return + sources = [ + Path(__file__).with_name("public_suffix_list.dat"), + Path("/usr/share/publicsuffix/public_suffix_list.dat"), + Path("/app/share/publicsuffix/public_suffix_list.dat"), + ] data = None for url in URLS: try: diff --git a/src/common/meson.build b/src/common/meson.build index b7ca6afe..13c269b7 100644 --- a/src/common/meson.build +++ b/src/common/meson.build @@ -110,9 +110,15 @@ make_te = find_program('make-te.py') python3 = find_program('python3', required: true) +public_suffix_cmd = [python3, files('gen-public-suffix.py'), '@OUTPUT@'] +public_suffix_list = get_option('public-suffix-list') +if public_suffix_list != '' + public_suffix_cmd += public_suffix_list +endif + public_suffix_data = custom_target('public_suffix_data_h', output: 'public_suffix_data.h', - command: [python3, files('gen-public-suffix.py'), '@OUTPUT@'] + command: public_suffix_cmd ) emoji_data_table = custom_target('emoji_data_table_h', diff --git a/src/common/network.c b/src/common/network.c index 8892b3e5..54ef749d 100644 --- a/src/common/network.c +++ b/src/common/network.c @@ -166,7 +166,7 @@ net_resolve (netstore * ns, char *hostname, int port, char **real_host) sprintf (portstring, "%d", port); memset (&hints, 0, sizeof (struct addrinfo)); - hints.ai_family = PF_UNSPEC; /* support ipv6 and ipv4 */ + hints.ai_family = AF_UNSPEC; /* support ipv6 and ipv4 */ hints.ai_flags = AI_CANONNAME | AI_ADDRCONFIG; hints.ai_socktype = SOCK_STREAM;