vim i pliki w /tmp (było Re: vixie-cron - /etc/cron.d)

Jakub Bogusz qboosh w pld.org.pl
Śro, 13 Mar 2002, 11:13:34 CET


On Tue, Mar 12, 2002 at 05:01:24PM +0100, Jakub Bogusz wrote:
> On Tue, Mar 12, 2002 at 04:40:56PM +0100, Jakub Bogusz wrote:
> > Podobno #82 miało być "fixed"?
> > /etc/cron.d to katalog na crontaby, miejsce na cron.{allow,deny} jest
> > w /etc/cron (bez ".d"), jak w pakiecie hc-cron.
> 
> A... co do #93 - rozwiązaniem jest nałożenie patcha
> hc-cron-closefile.patch (powinien się nałożyć - fragmenty kodu są

Sprawdziłem, nakłada się bez żadnych zmian.

> identyczne w hc i vixie), ale zastanowił mnie komentarz:
> 
> | /* we still have the file open.  editors will generally rewrite the
> |  * original file rather than renaming/unlinking it and starting a
> |  * new one; even backup files are supposed to be made by copying
> |  * rather than by renaming.  if some editor does not support this,
> |  * then don't use it.  the security problems are more severe if we
> |  * close and reopen the file around the edit.
> |  */

No i w przypadku standardowej konfiguracji vima to wygląda kiepsko - podczas
zapisu pliku:

| 32461 stat("tstvi", {st_mode=S_IFREG|0600, st_size=32, ...}) = 0
| 32461 access("tstvi", W_OK)             = 0
| 32461 lstat("tstvi", {st_mode=S_IFREG|0600, st_size=32, ...}) = 0
| 32461 stat("4913", 0xbffff58c)          = -1 ENOENT (No such file or directory)
| 32461 open("4913", O_WRONLY|O_CREAT|O_EXCL, 0100600) = 3

co to jest???
[po zerknięciu do źródeł: już wiem, sprawdza czy może pisać do katalogu;
 ale dziwnie to wygląda]

| 32461 close(3)                          = 0
| 32461 chown("4913", 550, 1000)          = 0
| 32461 stat("4913", {st_mode=S_IFREG|0600, st_size=0, ...}) = 0
| 32461 unlink("4913")                    = 0
| 32461 stat("tstvi~", 0xbffff50c)        = -1 ENOENT (No such file or directory)
| 32461 unlink("tstvi~")                  = -1 ENOENT (No such file or directory)
| 32461 rename("tstvi", "tstvi~")         = 0

przy open() nie ma O_EXCL - w tym miejscu robimy sobie
ln -s /etc/cośtam /tmp/cośtam...

| 32461 open("tstvi", O_WRONLY|O_CREAT|O_TRUNC, 0666) = 3
| 32461 write(3, "eifnwengienre\nrngeni\nirengeirn\na"..., 41) = 41
| 32461 close(3)                          = 0
| 32461 chmod("tstvi", 0100600)           = 0
| 32461 chown("tstvi", 550, 1000)         = 0
| 32461 stat("tstvi", {st_mode=S_IFREG|0600, st_size=41, ...}) = 0
| 32461 write(1, " 4L, 41C written", 16)  = 16

W połączeniu ze sposobem robienia plików tymczasowych przez vixie- i hc-crona
(/tmp/crontab.PID) wygląda to źle.

Po ":set nobackup nowritebackup" (albo kiedy nie może pisać do katalogu)
vim nie robi tego rename (i wtedy crontab -e działa bez łatania).
Ale to nie jest standardowa konfiguracja vima.

Coś tu jest do poprawienia... tylko co?


-- 
Jakub Bogusz



Więcej informacji o liście dyskusyjnej pld-devel-pl