Russian Qt Forum

Qt => Общие вопросы => Тема начата: Zmeishe от Июль 02, 2008, 12:32



Название: Установка времени файла
Отправлено: Zmeishe от Июль 02, 2008, 12:32
Qt 4.3.3
Если менять время так, у файла оно получается на несколько секунд меньше
Код:
#include <sys/utime.h>

...
QDateTime dt;
...

#ifdef Q_OS_WIN
    filePath.replace("/", "\\");
#endif   

struct utimbuf times;
times.actime = times.modtime = dt.toTime_t();     
utime(filePath.toLatin1().data(), &times);


Если иcпользовать WinAPI, то устанавливается точь в точь как надо.
Код:
#ifdef Q_OS_WIN
#include <qt_windows.h>
#endif

...
 QDateTime dt;
 SYSTEMTIME systemTime;
 FILETIME fileTime, localFileTime;
 HANDLE hFile;
...

#ifdef Q_OS_WIN
    systemTime.wYear = dt.date().year();
    systemTime.wMonth = dt.date().month();
    systemTime.wDayOfWeek = dt.date().dayOfWeek();
    systemTime.wDay = dt.date().day();
    systemTime.wHour = dt.time().hour();
    systemTime.wMinute = dt.time().minute();
    systemTime.wSecond = dt.time().second();
    systemTime.wMilliseconds = dt.time().msec();
    SystemTimeToFileTime(&systemTime, &localFileTime);
    LocalFileTimeToFileTime(&localFileTime, &fileTime);
    filePath.replace("/", "\\");
    hFile = CreateFile(filePath.utf16(), GENERIC_WRITE, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);   
    SetFileTime(hFile, &fileTime, &fileTime, &fileTime);
    CloseHandle(hFile);
#endif     
Выходит врёт функция QDateTime::toTime_t() ?

Или я чего-то не догоняю ?



Название: Re: Установка времени файла
Отправлено: Zmeishe от Июль 02, 2008, 13:55
А вот в Linux первый вариант работает безупречно.
Код:
#include <utime.h>

...
QDateTime dt;
...

#ifdef Q_OS_WIN
    filePath.replace("/", "\\");
#endif   

struct utimbuf times;
times.actime = times.modtime = dt.toTime_t();     
utime(filePath.toLatin1().data(), &times);

Похоже дело не в QDateTime::toTime_t() - или не только в ней, а чём-то ещё


Название: Re: Установка времени файла
Отправлено: Sergeich от Июль 03, 2008, 00:45
А какая вообще задача? установить время модификации файла? Зачем это нужно? Просто любопытно :)


Название: Re: Установка времени файла
Отправлено: Zmeishe от Июль 03, 2008, 07:59
Это нужно для автоматического обновления программных модулей.
Я в БД, в BLOB поле, закачиваю свежие бинарники и их зависимости от моих же библиотек. В другое поле таблицы записываю дату и время последней модификации QFileInfo::lastModified() этого бинарника.
Когда на удалённой машине стартует клиентский модуль, он проверяет своё lastModified() и сравнивает с эталонным из БД, а заодно и все зависимости.
В случае необходимости, подменяет сам себя и свои зависимости.(или почти сам себя  ;))
Последний штрих - это установка lastModified() равным эталонному.



Название: Re: Установка времени файла
Отправлено: Tonal от Июль 03, 2008, 10:25
По моему проше хешик считать CRC или MD5 - вполне надёжно и быстро для этих объёмов. :)


Название: Re: Установка времени файла
Отправлено: ритт от Июль 03, 2008, 10:58
Согласен с Тонал'ом

а вообще, хранение бинарников блобом (и, подозреваю, обновление вместе с репликацией бд) - не самый удачный вариант!
однажды попался мне на глаза продукт конкурентов, в котором система обновлений работала по схожему принципу. всё, что было нужно: 1) добраться на мастер-сервере до этой таблицы с привилегиями на запись; 2) налокальной площадке заразить трояном самый свежий бинарь из этой таблицы; 3) записать его поверх оригинального + обновить дату модификации...
...что было дальше представляешь?

в общем, зашей хотя бы механизм проверки целостности, если будешь двигаться в этом направлении :)


Название: Re: Установка времени файла
Отправлено: Zmeishe от Июль 03, 2008, 11:13
Замечания интересные, честно говоря, сам не подумал о таком заражении.
Но если получить права SYSDBA на эту таблицу или root`а на машине, где база лежит, то, по моему, уже ни CRC ни MD5 не спасёт, т.к. абсолютно ВСЁ станет доступным и ключи шифрования тоже.

PS:
"Если возможного изнасилования избежать не удалось - расслабьтесь и получите удовольствие"
из инструкции агентесс британских спецслужб.


Название: Re: Установка времени файла
Отправлено: ритт от Июль 03, 2008, 11:42
а я и не говорил про рута...
подсказываю: софтина была написана на мфц...догадываешься какие люди писали защиту? :)

а механизм проверки целостности спасёт! если это не тупо црц'шка, зашитая прямо в код, то банальным заражением нарушится целостность и автоматом модуль не обновится - клиенты не получат и гемор и не уйдут к конкурентам...а ты неспешно залатаешь дыры на сервере :)

но это всё оффтоп, а тема, похоже, исчерпана...давайте её трэшанём?