PavelVinogradov / sams2

Automatically exported from code.google.com/p/sams2
GNU General Public License v2.0
21 stars 20 forks source link

(Trac:454) samsdaemon удаляет посторонние файлы!!! #447

Closed GoogleCodeExporter closed 9 years ago

GoogleCodeExporter commented 9 years ago
(Trac:454) Originaly reported by Stas Degteff <g_nospam@grumbler.org> on 
2010-04-01 13:05:35

Слежу за работой samsdaemon с помощью strace и вижу, 
как он удалил из каталога /etc/squid файл, к его 
конфигурации никак не относящийся, просто 
имеющий похожее имя.
Инциндент произошёл во время обработки 
события конца месяца.

Это серьёзный баг. Хорошо ещё, что у меня 
осталась резервная копия этого файла, но 
утром пришлось поднимать упавший squid.

samsdaemon-strace.12640:00:00:04 unlink("/etc/squid/ncsa.sams.oldd")            

Workaround:
указать в sams.conf SQUIDROOTDIR, отличный от 
каталога конфигов squid:
SQUIDROOTDIR=/etc/squid/sams
и включить файл $SQUIDROOTDIR/squid.conf в /etc/squid/squid.conf 
директивой include.

Original issue reported on code.google.com by bl...@nixdev.net on 5 Jun 2011 at 8:08

GoogleCodeExporter commented 9 years ago
Commented by blaze@nixdev.net on 2010-04-01 13:18:10:

Вот ещё неверная работа с файлом:

samsdaemon-strace.12640:00:00:04 open("/etc/squid/squid.conf.bak", O_RDONLY)    
                        = 6
samsdaemon-strace.12640:00:00:04 open("/etc/squid/squid.conf", 
O_WRONLY|O_CREAT|O_TRUNC, 0666)          = 7

Сначала удалить конфиг сквида, и затем 
копировать - кривое решение. Если samsdaemon 
вылетит до завершения копирования, конфиг 
будет потерян.

Правильноая операция - 
rename("/etc/squid/squid.conf.bak","/etc/squid/squid.conf") :

КРАТКАЯ СВОДКА
       #include <unistd.h>

       int rename(const char *oldpath, const char *newpath);

ОПИСАНИЕ
       rename переименовывает файл, перемещая его между каталогами, если требуется.

       Все прочие жесткие ссылки на файл (созданные с помощью link(2)) не изменяются.

       Если  newpath  уже существует, то он будет атомарно перезаписан (при определенных условиях - смотри
       ОШИБКИ ниже), так что нет ни одной точки, когда другой процесс, пытающийся обратиться к newpath, не
       обнаружит его.

       Если  newpath  существует, но операция завершается неуспешно или система аварийно завершает работу,
       rename гарантируется, что newpath останется нетронутым.

Original comment by bl...@nixdev.net on 5 Jun 2011 at 8:08

GoogleCodeExporter commented 9 years ago
Commented by chemerik@mail.ru on 2010-04-01 21:26:56:

>> файл, к его конфигурации никак не 
относящийся
какое название у этого файла?

samsdaemon должен удалять только файлы с 
расширением *.sams

Original comment by bl...@nixdev.net on 5 Jun 2011 at 8:08

GoogleCodeExporter commented 9 years ago
Commented by blaze@nixdev.net on 2010-04-01 22:36:35:

rename и потом open(O_WRONLY|O_CREAT|O_TRUNK) имеет свои 
недостатки. Например, новый созданный файл 
будет иметь другие права доступа и 
владельца (отличные от исходного).

Original comment by bl...@nixdev.net on 5 Jun 2011 at 8:08

GoogleCodeExporter commented 9 years ago
Commented by blaze@nixdev.net on 2010-09-06 10:45:49:

Milestone sams-1.1.0 deleted

Original comment by bl...@nixdev.net on 5 Jun 2011 at 8:08

GoogleCodeExporter commented 9 years ago
Close all deprecated bugs from 1.0.x tree.

Original comment by bl...@nixdev.net on 10 Jun 2011 at 10:07