8

WRT эту тему Что мне делать с com.apple.quarantine? Я хочу знать, как OS X может узнать и сохранить эту информацию в поле @. Я не ищу способ отключить эту функцию, но для кода (или псевдокод, идея, что угодно) относительно реализации этой вещи. Заранее спасибо.

4 ответа4

6

Как упоминал Даниэль, браузер может хранить исходный URL (а также источник ссылки) загруженного файла в расширенном атрибуте com.apple.metadata:kMDItemWhereFroms .

Сначала Apple добавила это в Safari для Mac OS X 10.4, затем оно было добавлено в Chrome/Chromium [выпуск 22289], и существует невыполненный запрос на улучшение, чтобы добавить его в Firefox [ошибка 337051].

Что касается фактического кода для реализации этого, посмотрите исправление Chromium.

5

После загрузки любого файла запуск xattr file покажет вам, что браузер сохранил в расширенных атрибутах:

xattr mydownload.gz
com.apple.metadata:kMDItemWhereFroms
com.apple.quarantine

Далее более подробная информация:

xattr -p com.apple.quarantine mydownload.gz 
0000;4cee9d4b;Safari;24064D6B-9854-46BC-AF73-5DE5F8042D0B|com.apple.Safari

xattr -p com.apple.metadata:kMDItemWhereFroms mydownload.gz 
62 70 6C 69 73 74 30 30 A1 01 5F 10 24 68 74 74
70 3A 2F 2F 73 75 [and so on]

... или в читаемом формате:

mdls -name kMDItemWhereFroms mydownload.gz
kMDItemWhereFroms = (
    "http://some-url"
)

Вы также можете установить их (или любой другой атрибут):

xattr -w some-name some-value mydownload.gz

Следующее также работает, хотя и имеет разные результаты при повторном запуске вышеуказанных команд:

xattr -w com.apple.metadata:kMDItemWhereFroms http://example.com mydownload.gz

А для атрибута com.apple.quarantine , согласно понимаю:

Обычно данные карантина состоят из набора из 4 значений, разделенных точкой с запятой (набора десятичных цифр неизвестного назначения - обычно 0000, непрозрачного идентификатора из 8 символов, имени приложения, создавшего файл на карантине, и UTI приложения. (Унифицированный идентификатор типа) с префиксом символа трубы)

Например, для двух разных файлов, загруженных с помощью Mozilla FireFox, это выглядит так:

com.apple.quarantine: 0000;4b392bb2;Firefox;|org.mozilla.firefox
com.apple.quarantine: 0000;4b38d820;Firefox;|org.mozilla.firefox

Используя Действия с папками Automator, вы можете запускать такие команды для новых файлов в определенной папке, если это то, что вам нужно.

4

Эта информация хранится в так называемых "расширенных атрибутах". У Джона Сиракузы есть отличная статья, в которой обсуждаются расширенные атрибуты, когда они впервые были представлены, в OS X 10.4: http://arstechnica.com/apple/reviews/2005/04/macosx-10-4.ars/7.

Похоже, что больше нет справочной страницы для инструмента командной строки 'xattr', но 'xattr -h' должна показать базовую справку.

API уровня POSIX/BSD доступен в /usr/include/sys/xattr.h, который определяет функции C, такие как getxattr(), setxattr(), removexattr(), listxattr() и их двоюродные братья на основе FILE. (Эти команды, в отличие от xattr (1), имеют справочные страницы).

3

Это устанавливается приложением, загружающим файл. Никакого волшебного обнаружения загрузки, только атрибут, установленный в загруженном файле приложением загрузки.

Я только что загрузил zip-файл, используя wget , Google Chrome, Firefox и Safari, и, как и ожидалось, загрузка wget не имеет расширенных атрибутов, как и загрузки браузера, поскольку они знают об этой функции. Интересно, что Firefox установил карантин для загрузки, но забыл установить com.apple.metadata:kMDItemWhereFroms , информацию о том, где изначально находился загруженный файл (его URL). Safari и Chrome устанавливают оба, wget ни один.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .