Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[pull] master from NLnetLabs:master #40

Open
wants to merge 136 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
136 commits
Select commit Hold shift + click to select a range
8f29ee1
Test package for bad xfr with addzone in one tasklist
wtoorop May 25, 2024
22addb5
Process non xfrs tasks before the fork
wtoorop May 25, 2024
6bc8ae0
--with-cookiesecretsfile=path for configure
wtoorop Aug 21, 2024
7a34e20
Configurable staing cookie
wtoorop Aug 26, 2024
65a5d64
Allow cookie settings to be reconfigurable
wtoorop Aug 27, 2024
efe4cf6
Automatic migration of cookie secrets
wtoorop Aug 28, 2024
a8f5b46
Updated documentation on cookie server secrets
wtoorop Aug 28, 2024
6534967
Tell were cookies came from
wtoorop Aug 29, 2024
83fbb4e
Merge branch 'master' into bugfix/bad-xfr-with-other-tasks
wtoorop Aug 29, 2024
14d0a43
Apply suggestions from code review
wtoorop Sep 4, 2024
f1023a0
Merge branch 'master' into bugfix/bad-xfr-with-other-tasks2
wtoorop Oct 14, 2024
8a9660d
socket10kxfr test fixes
wtoorop Oct 17, 2024
aeac0b7
Pass notifies from serve processes to xfrd
wtoorop Oct 18, 2024
c1f64f5
Merge branch 'master' into bugfix/bad-xfr-with-other-tasks2
wtoorop Oct 18, 2024
0f74c19
Also log dnstap-collector name, ...
wtoorop Oct 18, 2024
6de168c
Merge branch 'devel/stream_notify2xfrd' into bugfix/bad-xfr-with-othe…
wtoorop Oct 18, 2024
62c40f0
Update tpkg/bad_xfr_with_other_tasks.tpkg/bad_xfr_with_other_tasks.test
wtoorop Oct 22, 2024
5674228
Update util.c
wtoorop Oct 22, 2024
ec858b9
Merge branch 'master' into bugfix/cookiesecretsfile
wtoorop Oct 22, 2024
b090af7
Remove order dependent comparisons with the cookie_secrets_source enum
wtoorop Oct 22, 2024
761db1a
Update copyright lines (in version output)
melroy89 Oct 23, 2024
9d2860c
Merge pull request #391 from melroy89/patch-1
wcawijngaards Oct 23, 2024
ed5d957
Changelog note for #391
wcawijngaards Oct 23, 2024
79a58e7
Skip over non-NSEC3 zones when looking for dstree
Oct 17, 2024
c743742
Pro-actively set cookie_secret_file value
wtoorop Oct 23, 2024
40c23b1
Merge branch 'bugfix/cookiesecretsfile'
wtoorop Oct 23, 2024
c75cab0
ChangeLog entry for Updated cookie secrets management
wtoorop Oct 23, 2024
fb13c69
Track $INCLUDE dependencies
Aug 23, 2024
1f2a015
Merge branch 'bugfix/bad-xfr-with-other-tasks2'
wtoorop Oct 23, 2024
980788b
Merge of PR #390 in ChangeLog
wtoorop Oct 23, 2024
a922e4b
Merge branch 'master' of github.com:NLnetLabs/nsd
wtoorop Oct 23, 2024
657beaf
- Fix #392: Inconsistent documentation about control-interface.
wcawijngaards Oct 24, 2024
b1dfc0d
Fix #393 setthe correct doc/manual/ path
melroy89 Oct 24, 2024
2fd46b6
Explain the zonefile example better
melroy89 Oct 24, 2024
b6dffa4
Typo
melroy89 Oct 24, 2024
f958b2c
Merge pull request #395 from melroy89/patch-2
wcawijngaards Oct 24, 2024
b29b8a6
Changelog note for #395.
wcawijngaards Oct 24, 2024
559b2fe
Merge pull request #394 from melroy89/patch-1
wcawijngaards Oct 24, 2024
1b60e17
Changelog note for #394
wcawijngaards Oct 24, 2024
31c0fa0
- Fix analyzer issue in do_print_cookie_secrets to check for failure.
wcawijngaards Oct 24, 2024
d85ccfe
RFC 9660 The DNS Zone Version (ZONEVERSION) Option
wtoorop Oct 26, 2024
68467ec
Defines for ZONEVERSION TYPE values
wtoorop Oct 27, 2024
d03662f
Fix language typo
melroy89 Oct 27, 2024
0d64814
Do not load the tabs CSS (you are not using tabs)
melroy89 Oct 28, 2024
33a01fa
Add sphinx_substitution_extensions add-on for version
melroy89 Oct 28, 2024
70a4add
Use version substitution in documentation
melroy89 Oct 28, 2024
354317a
Remove whitespaces
melroy89 Oct 28, 2024
805f5c9
Use more threads in the make process
melroy89 Oct 28, 2024
7d85c59
Add Sphinx-Substitution-Extensions to requirements
melroy89 Oct 28, 2024
daef4cc
Fix pip names
melroy89 Oct 28, 2024
89aeb68
Update to Sphinx 7.2
Oct 28, 2024
705f808
Remove unsupported options
melroy89 Oct 28, 2024
1eaed65
Remove unsupported theme option
melroy89 Oct 28, 2024
6a91ee2
Add version to substitutio
melroy89 Oct 28, 2024
b7b9ab2
Dump versions
melroy89 Oct 28, 2024
b4a2c1a
It was trying to install 2022 instead of 2024 version
melroy89 Oct 28, 2024
903bb0e
fix indent
melroy89 Oct 28, 2024
ba55294
Add rst_prolog!
melroy89 Oct 28, 2024
d1edfcb
Use @version@
melroy89 Oct 28, 2024
62faece
Extend ChangeLog
melroy89 Oct 28, 2024
0149ef3
Extend RELNOTES
melroy89 Oct 28, 2024
a0edaad
Correct ChangeLog
Oct 29, 2024
7bd6cbf
Correct changelog
melroy89 Oct 29, 2024
2bcbce6
Change back to jeroen
melroy89 Oct 29, 2024
5201c48
Update doc/ChangeLog
melroy89 Oct 29, 2024
c2f82f4
- Fix Makefile for parallel build failure around bison rule.
wcawijngaards Nov 4, 2024
77f7f12
Merge pull request #398 from NLnetLabs/features/zoneversion
wtoorop Nov 7, 2024
8c1f32c
Log merge of PR #398
wtoorop Nov 7, 2024
779ec7e
ohttp and tls-supported-groups SvcParam support
wtoorop Nov 8, 2024
9a17b83
Fix to fail for not multiples of uint16_t rdata.c
wtoorop Nov 8, 2024
749f33f
Some tweaking w.r.t. logging verbosity levels
wtoorop Nov 11, 2024
4ca668e
tls-supported-group support in ChangeLog
wtoorop Nov 12, 2024
8b6e54d
Merge pull request #406 from NLnetLabs/features/svcparam-tls-supporte…
wtoorop Nov 12, 2024
a1bdfb0
Update simdzone submodule with new RR types
wtoorop Nov 15, 2024
a8994c4
NINFO, RKEY, RESINFO, WALLET, CLA and TA RR types
wtoorop Nov 15, 2024
775341c
ChangeLog entry for PR #408 (additional RR types)
wtoorop Nov 16, 2024
b9da224
Merge pull request #408 from NLnetLabs/features/ninfo-rkey-resinfo-wa…
wtoorop Nov 16, 2024
c580a5f
Printing of NSAP-PTR, GPOS and HIP
wtoorop Nov 18, 2024
dca1da9
Fix NSAP-PTR test
wtoorop Nov 19, 2024
2ba9db6
ChangeLog entry for merge
wtoorop Nov 19, 2024
6359234
Merge pull request #409 from NLnetLabs/devel/parsing-but-no-printing
wtoorop Nov 19, 2024
59b106c
Fix typo in documentation.
Nov 26, 2024
3ea803f
Treat a mismatch in RRset TTLs as a warning
Oct 28, 2024
ea9ac2c
Replace PTR with NSAP-PTR in RR test package
wtoorop Dec 2, 2024
1532a60
Merge branch 'master' into fix-405
wtoorop Dec 2, 2024
8235913
Merge pull request #412 from k0ekk0ek/fix-405
wtoorop Dec 4, 2024
15367dd
Merge pull request #407 from NLnetLabs/devel/tweak-verbosity-levels
wtoorop Dec 4, 2024
103b1e3
Update ChangeLog and RELNOTES
wtoorop Dec 4, 2024
118c0ab
Bump minor version
wtoorop Dec 4, 2024
57f9589
Include version 0.1.2-rc1 of simdzone
wtoorop Dec 4, 2024
9aab672
Nits that came out of clang analysis
wtoorop Dec 4, 2024
32734a8
Fix catzones.tdir
wtoorop Dec 4, 2024
8a95b98
GNU and BSD sed interoperability for catzones.tdir
wtoorop Dec 5, 2024
f804e15
Redirect ldns-testns output from test scripts
wtoorop Dec 5, 2024
7e67007
Missed one ldns-testns output redirection
wtoorop Dec 5, 2024
019fe9c
Bump version to 4.11.0
wtoorop Dec 5, 2024
c628f66
NSD 4.11.0 release
wtoorop Dec 12, 2024
4c82450
Bump version to 4.11.1 for development
wtoorop Dec 12, 2024
8450213
Rename a few xot.tdir files
wtoorop Dec 18, 2024
e6a1024
RFC9103 the ALPN token "dot" MUST be selected
wtoorop Dec 18, 2024
138b584
Knot closes XoT connections immediately after transfer
wtoorop Dec 19, 2024
149049c
set persist-credentials: false per zizmor suggestion
maertsen Dec 13, 2024
7ced54b
Fix #415: NSD no longer builds out of tree
wtoorop Dec 23, 2024
c6f02f5
Parse DSYNC
wtoorop Jan 3, 2025
2ab2ab6
RR types implementation administration
wtoorop Jan 3, 2025
efb8b94
Printing of DSYNC RR type
wtoorop Jan 3, 2025
bff21c8
Merge pull request #416 from NLnetLabs/bugfix/out-of-tree-build
wtoorop Jan 3, 2025
f5f79c0
Merge branch 'master' into bugfix/xot-interoperability
wtoorop Jan 3, 2025
18f304e
Update ChangeLog for XoT interoperability fix
wtoorop Jan 3, 2025
2109449
Merge pull request #414 from NLnetLabs/bugfix/xot-interoperability
wtoorop Jan 3, 2025
af007bb
Support for EID and NIMLOC RR types
wtoorop Jan 5, 2025
df63fac
Support for the SINK, TALINK and DOA RR types
wtoorop Jan 6, 2025
31cc7eb
old-main can quit before informing main
wtoorop Jan 7, 2025
4fc0af0
Document change
wtoorop Jan 7, 2025
cfdd443
Merge pull request #421 from NLnetLabs/bugfix/old-main-quit-before-ma…
wtoorop Jan 7, 2025
efda9cb
- Fix whitespace in comment.
wcawijngaards Jan 15, 2025
7f70aa5
Unlink tasklist udb_ptr's after failed fork or xfr
wtoorop Jan 17, 2025
efe05f3
Document the stalled updates fix
wtoorop Jan 17, 2025
2b66832
Merge pull request #424 from NLnetLabs/bugfix/tasklist-udb_ptr-consis…
wtoorop Jan 17, 2025
9df0883
Include simdzone-0.2.1
wtoorop Jan 17, 2025
8750b2d
Update and fix makefile dependencies
wtoorop Jan 17, 2025
2f62877
warnings with --disable-checking and -Wall
wtoorop Jan 18, 2025
a2691cb
Bump version to 4.11.2 for development
wtoorop Jan 20, 2025
9061b2d
Re-enable configuring cookies from config file
wtoorop Jan 20, 2025
6ba9428
Support for ATMA
wtoorop Jan 21, 2025
9ff74cb
Merge branch 'master' into features/additional-rrtypes
wtoorop Jan 21, 2025
c789096
- Fix #426: nsd crashes with patterns in config_apply_pattern.
wcawijngaards Jan 22, 2025
30800f6
Support for AMTRELAY
wtoorop Jan 22, 2025
459e602
Support for IPN RR type
wtoorop Jan 22, 2025
3cd0cd3
Latest simdzone with additional RR types
wtoorop Jan 22, 2025
4c456af
Correct ipseckey gateway type testing
wtoorop Jan 23, 2025
21287cd
Update ChangeLog for new RR types
wtoorop Jan 23, 2025
95053cf
Merge branch 'master' into features/additional-rrtypes
wtoorop Jan 23, 2025
cb0ba44
Merge pull request #418 from NLnetLabs/features/additional-rrtypes
wtoorop Jan 23, 2025
dbe90d6
Mention PR #418 in ChangeLog and RELNOTES
wtoorop Jan 23, 2025
638c542
Update simdzone
wtoorop Jan 23, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .github/workflows/analysis_ports.yml
Original file line number Diff line number Diff line change
Expand Up @@ -51,6 +51,7 @@ jobs:
- uses: actions/checkout@v4
with:
submodules: recursive
persist-credentials: false
- name: cross-platform-action on ${{ matrix.cross_platform_os }} ${{ matrix.cross_platform_version }}
if: ${{ matrix.with_cross_platform_action == 'yes' }}
uses: cross-platform-actions/[email protected]
Expand Down
1 change: 1 addition & 0 deletions .github/workflows/build-test.yml
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@ jobs:
- uses: actions/checkout@v4
with:
submodules: recursive
persist-credentials: false
- name: 'Workaround for actions/runner-images#9491'
if: runner.os == 'Linux'
run: sudo sysctl vm.mmap_rnd_bits=28
Expand Down
1 change: 1 addition & 0 deletions .github/workflows/coverity-scan.yml
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@ jobs:
- uses: actions/checkout@v4
with:
submodules: recursive
persist-credentials: false
- id: install_packages
shell: bash
run: |
Expand Down
66 changes: 41 additions & 25 deletions Makefile.in

Large diffs are not rendered by default.

1 change: 1 addition & 0 deletions configlexer.lex
Original file line number Diff line number Diff line change
Expand Up @@ -313,6 +313,7 @@ proxy-protocol-port{COLON} { LEXOUT(("v(%s) ", yytext)); return VAR_PROXY_PROTOC
answer-cookie{COLON} { LEXOUT(("v(%s) ", yytext)); return VAR_ANSWER_COOKIE;}
cookie-secret{COLON} { LEXOUT(("v(%s) ", yytext)); return VAR_COOKIE_SECRET;}
cookie-secret-file{COLON} { LEXOUT(("v(%s) ", yytext)); return VAR_COOKIE_SECRET_FILE;}
cookie-staging-secret{COLON} { LEXOUT(("v(%s) ", yytext)); return VAR_COOKIE_STAGING_SECRET;}
xfrd-tcp-max{COLON} { LEXOUT(("v(%s) ", yytext)); return VAR_XFRD_TCP_MAX;}
xfrd-tcp-pipeline{COLON} { LEXOUT(("v(%s) ", yytext)); return VAR_XFRD_TCP_PIPELINE;}
verify{COLON} { LEXOUT(("v(%s) ", yytext)); return VAR_VERIFY; }
Expand Down
35 changes: 33 additions & 2 deletions configparser.y
Original file line number Diff line number Diff line change
Expand Up @@ -196,6 +196,7 @@ struct component {
%token VAR_ANSWER_COOKIE
%token VAR_COOKIE_SECRET
%token VAR_COOKIE_SECRET_FILE
%token VAR_COOKIE_STAGING_SECRET
%token VAR_MAX_REFRESH_TIME
%token VAR_MIN_REFRESH_TIME
%token VAR_MAX_RETRY_TIME
Expand Down Expand Up @@ -518,9 +519,39 @@ server_option:
| VAR_ANSWER_COOKIE boolean
{ cfg_parser->opt->answer_cookie = $2; }
| VAR_COOKIE_SECRET STRING
{ cfg_parser->opt->cookie_secret = region_strdup(cfg_parser->opt->region, $2); }
{
uint8_t secret[32];
ssize_t len = hex_pton($2, secret, NSD_COOKIE_SECRET_SIZE);

if(len != NSD_COOKIE_SECRET_SIZE) {
yyerror("expected a 128 bit hex string");
} else {
cfg_parser->opt->cookie_secret = region_strdup(cfg_parser->opt->region, $2);
}
}
| VAR_COOKIE_STAGING_SECRET STRING
{
uint8_t secret[32];
ssize_t len = hex_pton($2, secret, NSD_COOKIE_SECRET_SIZE);

if(len != NSD_COOKIE_SECRET_SIZE) {
yyerror("expected a 128 bit hex string");
} else {
cfg_parser->opt->cookie_staging_secret = region_strdup(cfg_parser->opt->region, $2);
}
}
| VAR_COOKIE_SECRET_FILE STRING
{ cfg_parser->opt->cookie_secret_file = region_strdup(cfg_parser->opt->region, $2); }
{
/* Empty filename means explicitly disabled cookies from file, internally
* represented as NULL.
* Note that after parsing, if no value was configured, then
* cookie_secret_file_is_default is still 1, then the default cookie
* secret file value will be assigned to cookie_secret_file.
*/
if(*$2) cfg_parser->opt->cookie_secret_file = region_strdup(cfg_parser->opt->region, $2);
cfg_parser->opt->cookie_secret_file_is_default = 0;
}

| VAR_XFRD_TCP_MAX number
{ cfg_parser->opt->xfrd_tcp_max = (int)$2; }
| VAR_XFRD_TCP_PIPELINE number
Expand Down
8 changes: 7 additions & 1 deletion configure.ac
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ sinclude(dnstap/dnstap.m4)

# autoconf-2.70 is needed for @runstatedir@
AC_PREREQ([2.70])
AC_INIT([NSD],[4.10.1],[https://github.com/NLnetLabs/nsd/issues or [email protected]])
AC_INIT([NSD],[4.11.2],[https://github.com/NLnetLabs/nsd/issues or [email protected]])
AC_CONFIG_HEADERS([config.h])

#
Expand Down Expand Up @@ -126,6 +126,12 @@ AC_ARG_WITH([zonelistfile], AS_HELP_STRING([--with-zonelistfile=path],[Pathname
AC_DEFINE_UNQUOTED(ZONELISTFILE, ["`eval echo $zonelistfile`"], [Pathname to the NSD zone list file.])
AC_SUBST(zonelistfile)

# default cookiesecrets file location.
cookiesecretsfile=${dbdir}/cookiesecrets.txt
AC_ARG_WITH([cookiesecretsfile], AS_HELP_STRING([--with-cookiesecretsfile=path],[Pathname to the NSD cookie secrets file]), [cookiesecretsfile=$withval])
AC_DEFINE_UNQUOTED(COOKIESECRETSFILE, ["`eval echo $cookiesecretsfile`"], [Pathname to the NSD cookies secrets file.])
AC_SUBST(cookiesecretsfile)

# default xfr dir location.
xfrdir="/tmp"
AC_ARG_WITH([xfrdir], AS_HELP_STRING([--with-xfrdir=path],[Pathname to where the NSD transfer dir is created]), [xfrdir=$withval])
Expand Down
69 changes: 54 additions & 15 deletions dbaccess.c
Original file line number Diff line number Diff line change
Expand Up @@ -75,6 +75,8 @@ namedb_zone_create(namedb_type* db, const dname_type* dname,
zone->opts = zo;
zone->ixfr = NULL;
zone->filename = NULL;
zone->includes.count = 0;
zone->includes.paths = NULL;
zone->logstr = NULL;
zone->mtime.tv_sec = 0;
zone->mtime.tv_nsec = 0;
Expand All @@ -89,6 +91,34 @@ namedb_zone_create(namedb_type* db, const dname_type* dname,
return zone;
}

void
namedb_zone_free_filenames(namedb_type *db, zone_type* zone)
{
assert(!zone->includes.paths == !zone->includes.count);

if (zone->filename) {
region_recycle(
db->region, zone->filename, strlen(zone->filename) + 1);
zone->filename = NULL;
}

if (zone->includes.count) {
for (size_t i=0; i < zone->includes.count; i++) {
region_recycle(
db->region,
zone->includes.paths[i],
strlen(zone->includes.paths[i]) + 1);
}

region_recycle(
db->region,
zone->includes.paths,
zone->includes.count * sizeof(*zone->includes.paths));
zone->includes.count = 0;
zone->includes.paths = NULL;
}
}

void
namedb_zone_delete(namedb_type* db, zone_type* zone)
{
Expand Down Expand Up @@ -119,9 +149,7 @@ namedb_zone_delete(namedb_type* db, zone_type* zone)
hash_tree_delete(db->region, zone->dshashtree);
#endif
zone_ixfr_free(zone->ixfr);
if(zone->filename)
region_recycle(db->region, zone->filename,
strlen(zone->filename)+1);
namedb_zone_free_filenames(db, zone);
if(zone->logstr)
region_recycle(db->region, zone->logstr,
strlen(zone->logstr)+1);
Expand Down Expand Up @@ -236,12 +264,27 @@ namedb_read_zonefile(struct nsd* nsd, struct zone* zone, udb_base* taskudb,
/* if zone_fname, then the file was acquired from reading it,
* and see if filename changed or mtime newer to read it */
} else if(zone_fname && strcmp(zone_fname, fname) == 0 &&
timespec_compare(&zone_mtime, &mtime) == 0) {
VERBOSITY(3, (LOG_INFO, "zonefile %s is not modified",
fname));
return;
timespec_compare(&zone_mtime, &mtime) == 0) {
int changed = 0;
struct timespec include_mtime;
/* one of the includes may have been deleted, changed, etc */
for (size_t i=0; i < zone->includes.count; i++) {
if (!file_get_mtime(zone->includes.paths[i], &include_mtime, &nonexist)) {
changed = 1;
} else if (timespec_compare(&zone_mtime, &include_mtime) < 0) {
mtime = include_mtime;
changed = 1;
}
}

if (!changed) {
VERBOSITY(3, (LOG_INFO, "zonefile %s is not modified",
fname));
return;
}
}
}

if(ixfr_create_from_difference(zone, fname,
&ixfr_create_already_done)) {
ixfrcr = ixfr_create_start(zone, fname,
Expand All @@ -252,6 +295,9 @@ namedb_read_zonefile(struct nsd* nsd, struct zone* zone, udb_base* taskudb,
}
}

namedb_zone_free_filenames(nsd->db, zone);
zone->filename = region_strdup(nsd->db->region, fname);

/* wipe zone from memory */
#ifdef NSEC3
nsec3_clear_precompile(nsd->db, zone);
Expand All @@ -271,10 +317,7 @@ namedb_read_zonefile(struct nsd* nsd, struct zone* zone, udb_base* taskudb,
zone->nsec3_param = NULL;
#endif
delete_zone_rrs(nsd->db, zone);
if(zone->filename)
region_recycle(nsd->db->region, zone->filename,
strlen(zone->filename)+1);
zone->filename = NULL;
namedb_zone_free_filenames(nsd->db, zone);
if(zone->logstr)
region_recycle(nsd->db->region, zone->logstr,
strlen(zone->logstr)+1);
Expand All @@ -286,10 +329,6 @@ namedb_read_zonefile(struct nsd* nsd, struct zone* zone, udb_base* taskudb,
zone->is_changed = 0;
/* store zone into udb */
zone->mtime = mtime;
if(zone->filename)
region_recycle(nsd->db->region, zone->filename,
strlen(zone->filename)+1);
zone->filename = region_strdup(nsd->db->region, fname);
if(zone->logstr)
region_recycle(nsd->db->region, zone->logstr,
strlen(zone->logstr)+1);
Expand Down
2 changes: 2 additions & 0 deletions dbcreate.c
Original file line number Diff line number Diff line change
Expand Up @@ -256,6 +256,8 @@ namedb_write_zonefile(struct nsd* nsd, struct zone_options* zopt)
return;
}
zone->is_changed = 0;
VERBOSITY(3, (LOG_INFO, "zone %s written to file %s",
zone->opts->name, zfile));
/* fetch the mtime of the just created zonefile so we
* do not waste effort reading it back in */
if(!file_get_mtime(zfile, &mtime, &notexist)) {
Expand Down
Loading