Тема: TOCTOU
Показать сообщение отдельно
  #9  
Старый 02.06.2023, 20:51
Alexey Khromov
Guest
 
Сообщений: n/a
По умолчанию TOCTOU

Alexey Khromov написал(а) к Nil A в Jun 23 19:18:10 по местному времени:

Здраствуйте, Nil!

02 июн 23 18:15, Nil A -> Semen Panevin:

NA> Пуржилка хватает лок на базу при своей работе, т.е. если в этот момент
NA> голдед бы держал лок, то пуржилка бы ждала. Но не комельфо всю дорогу
NA> держать лок на базу, поэтому голдед делает всё правильно, он открыл
NA> файлы баз, читает из них, а когда надо записать, он коротко берёт лок.

Редактор и тоссер не должны быть взаимозависимы - представь вместо голдеда штатный (для husky) msged.

NA> Сейчас проблема в юниксовом голдеде (линукс, фрибсд, макось, ..) в
NA> том, что он берёт лок на базу удачно, записывает сообщение, но потом
NA> оказывается, что это уже было на удалённом файле.

K.I.S.S.
База сообщений - это территория редактора. А возможно, еще и BBS. В любом случае, ЧМИ (для чтения хомосапиенсами).
Тоссер должен быть адаптирован (и он адаптирован, флагами), к наименее конфликтной работе.
Пуржилка относится к инструментам обслуживания. А обслуживаение - это зона повышенного внимания сисопа/админа/босса качалки. Так что сисопу и городить проверку на занятость базы оконечным сапиенсом.

NA> Моё предложение - голдед хватает лок, далее делает fstat() на этот
NA> открытый файл, проверяет поле st_nlink, и если там ноль, значит этот
NA> файл уже стёрли, значит надо переоткрыть файл. При этом тут TOCTOU не
NA> проиходит, потому что сначала успешно схвачен лок, а потом уже
NA> спокойно проверяется, не стёрт ли файл.

Голдеду достаточно в данном случае поставить лок - никто их husky базы не тронет. Но тут другая проблема - пока у тебя открыт голдед, тоссер (и пуржилка, и весь комплект) будет отваливаться "до лучших времен". А сейчас ты можешь заресканить измененную тоссером базу. Пр

Alexey Khromov
--- GoldED+/LNX 1.1.5-b20230304
Ответить с цитированием