SPECS: sudo.spec - workaround for broken utimes on sparc. see at: ...
Jakub Bogusz
qboosh w pld-linux.org
Pon, 13 Cze 2005, 21:44:06 CEST
On Sat, Jun 11, 2005 at 11:50:46PM +0200, The Undefined wrote:
> On Sat, Jun 11, 2005 at 10:28:09AM +0200, Jakub Bogusz wrote:
> > > Author: undefine Date: Wed Jun 8 23:04:08 2005 GMT
> > > Module: SPECS Tag: HEAD
> > > ---- Log message:
> > > - workaround for broken utimes on sparc. see at: http://tinyurl.com/ckh4f
> >
> > Z którą wersją glibc był problem?
> chyba jest...
> [guest w ares guest]$ sudo echo
> Password:
>
> [guest w ares guest]$ sudo echo
> sudo: timestamp too far in the future: Jul 27 14:25:28 2029
>
> We trust you have received the usual lecture from the local System
> Administrator. It usually boils down to these three things:
>
> #1) Respect the privacy of others.
> #2) Think before you type.
> #3) With great power comes great responsibility.
>
> Password:
> (przed chwilką specjalnie zdowngradowałem sudo by się upewnić że problem
> wciąż występuje).
>
> [guest w ares guest]$ rpm -q sudo glibc; uname -a
> sudo-1.6.8p8-2
> glibc-2.3.5-1
> Linux ares 2.4.20 #4 wto gru 3 09:29:27 CET 2002 sparc64
> TI_UltraSparc_IIi unknown PLD Linux
>
> generalnie - całość jest niedeterministyczna. czasami działa, czasami
> nie...
> na sudo z "workaroundem" wszystko działa ok...
A możesz uruchomić (ew. kilka razy) na tej maszynie testowy program?
Dla przypomnienia:
$ cat utimes.c
#include <sys/types.h>
#include <utime.h>
#include <sys/time.h>
int main()
{
struct timeval tvp[2];
tvp[0].tv_sec = 1000000000;
tvp[0].tv_usec = 444444;
tvp[1].tv_sec = 1111111111;
tvp[1].tv_usec = 555555;
utimes("utimes", tvp);
}
$ cc -o utimes utimes.c
$ ./utimes
$ stat utimes
Sprawdziłem to jeszcze na 2.4.30/sparc64 z glibc 2.3.4-0.20041122.2 - też
działa poprawnie. sudo chwilowo nie mogę sprawdzić.
Albo z 2.4.20 coś było nie tak z utimes, albo błąd jest gdzie indziej
(np. w pochodzeniu wartości przekazywanych do utimes).
Te nieprawidłowe daty (2029-*) mają wartość 0x700xxxxx - wyglądają jak
adresy zinterpretowane jako time_t.
Albo - ale nie wiem, czy to może się ujawnić przy 32-bitowym userspace -
jest to wynik paskudnego błędu naprawionego dopiero w 2.4.21:
http://linux.bkbits.net:8080/linux-2.4/diffs/arch/sparc64/kernel/signal.c@1.10?nav=index.html|src/.|src/arch|src/arch/sparc64|src/arch/sparc64/kernel|hist/arch/sparc64/kernel/signal.c
--
Jakub Bogusz http://qboosh.cs.net.pl/
Więcej informacji o liście dyskusyjnej pld-devel-pl