From: Markus Armbruster Date: Sat, 17 May 2008 17:35:22 +0000 (+0200) Subject: Fix files utility not to set timestamps X-Git-Tag: v4.3.15~8 X-Git-Url: http://git.pond.sub.org/?p=empserver;a=commitdiff_plain;h=967122ae0be5ad1f474660ad7d9c3f4fe1ffb131 Fix files utility not to set timestamps Commit f33b96b1 (v4.3.12) made files again set timestamps. That was intentionally suppressed in commit 990eb46b (v4.3.10), because it facilitates attacks against the PRNG. Commit 8f98e53a (v4.3.0) had added it as a feature. Fix by making files's main() pass new flag EFF_NOTIME to ef_open(). Implement the flag in do_write(). --- diff --git a/include/file.h b/include/file.h index b14d0bc6b..c086fe22d 100644 --- a/include/file.h +++ b/include/file.h @@ -98,9 +98,11 @@ struct emptypedstr { #define EFF_PRIVATE bit(9) /* Table is customized (configuration tables only) */ #define EFF_CUSTOM bit(10) +/* Don't update timestamps */ +#define EFF_NOTIME bit(11) /* Transient flags, only occur in argument of ef_open() */ /* Create table file, clobbering any existing file */ -#define EFF_CREATE bit(11) +#define EFF_CREATE bit(16) /* * Empire `file types' diff --git a/src/lib/common/file.c b/src/lib/common/file.c index b1ebfb13d..d20f7e02f 100644 --- a/src/lib/common/file.c +++ b/src/lib/common/file.c @@ -369,7 +369,7 @@ do_write(struct empfile *ep, void *buf, int id, int count) return -1; if (ep->flags & EFF_TYPED) { - now = time(NULL); + now = ep->flags & EFF_NOTIME ? (time_t)-1 : time(NULL); for (i = 0; i < count; i++) { /* * TODO Oopses here could be due to bad data corruption. @@ -380,7 +380,8 @@ do_write(struct empfile *ep, void *buf, int id, int count) elt->ef_type = ep->uid; if (CANT_HAPPEN(elt->uid != id + i)) elt->uid = id + i; - elt->timestamp = now; + if (now != (time_t)-1) + elt->timestamp = now; } } diff --git a/src/util/files.c b/src/util/files.c index 4151e20d3..5ef616182 100644 --- a/src/util/files.c +++ b/src/util/files.c @@ -131,7 +131,7 @@ main(int argc, char *argv[]) for (i = 0; i < EF_MAX; i++) { if (!EF_IS_GAME_STATE(i)) continue; - if (!ef_open(i, EFF_CREATE, -1)) { + if (!ef_open(i, EFF_CREATE | EFF_NOTIME, -1)) { perror("ef_open"); exit(1); }