Fix files utility not to set timestamps
Commitf33b96b1
(v4.3.12) made files again set timestamps. That was intentionally suppressed in commit990eb46b
(v4.3.10), because it facilitates attacks against the PRNG. Commit8f98e53a
(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().
This commit is contained in:
parent
2a125c5463
commit
967122ae0b
3 changed files with 7 additions and 4 deletions
|
@ -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'
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue