Кратко

  • Третья редакция проекта Personal Data Portability Archive выбирает контейнер POSIX pax, допускает сжатие gzip или Zstandard и описывает разделение одного логического экспорта на части.
  • Импортёр обязан до записи отвергать абсолютные пути, сегменты .. и специальные типы элементов. Файлы он создаёт по собственным правилам, не применяя права, владельца, расширенные атрибуты или ACL из архива.

Переезд не передаёт ключи от нового дома

Рабочая группа Mail Maintenance разрабатывает общий формат для переноса писем, контактов, календарей и иных личных данных. Редакция 02 уделяла внимание содержимому. Вышедшая 28 октября редакция определяет упаковку: pax из семейства tar с расширенными заголовками для путей и размеров. Экспортёр должен использовать именно её и помещать внутрь только обычные файлы или каталоги. В Datatracker это по-прежнему проект рабочей группы, а не утверждённый RFC и не описание состоявшейся миграции.

Имя элемента архива указывает, куда принимающая машина попробует его записать. Проект требует относительные имена в UTF-8, без сегментов . и .., уникальные в пределах файла архива. Перед записью импортёр должен отвергнуть абсолютный путь, выход в родительский каталог и всё, что не является обычным файлом или каталогом. Следующее правило касается власти над новым хранилищем: нельзя переносить биты режима, владельца, расширенные атрибуты и списки контроля доступа из посылки. Новый сервис создаёт файлы со своими настройками. Возможность забрать данные не даёт отправителю полномочия назначить владельца на чужом сервере.

Тихая потеря может случиться и без злонамеренного пути. В архиве Inbox и INBOX — разные названия; на диске без различия регистра они могут стать одним каталогом. Разные формы записи Unicode после нормализации тоже сходятся. Проект велит экспортёру стараться сохранять различие имён и советует импортёру отказывать при дубликатах, а не молча затереть один из элементов. Пользователь должен получить свои папки, а не красивый отчёт о неполной передаче.

Большую коллекцию можно распределить между несколькими файлами. Каждый читается отдельно и содержит свой archive.json; общие сведения совпадают, кроме part и final. Разделённый каталог сохраняет UID и согласованные метаданные, список удалённых элементов removed повторяется в каждой части. Импортёр обязан собрать части в один каталог. Метка UID здесь выполняет роль записи о происхождении; похожие надписи на коробках её не заменяют.

Архив может быть несжатым, в gzip или Zstandard. Первые два варианта импортёр должен принимать, третий — желательно. Раздел безопасности предлагает учитывать общий объём после распаковки, число элементов и размер каждого, но не задаёт универсальной цифры. Там же указано, что роли и сведения о доступе в загруженном архиве могут быть изменены. Прочитать файл — ещё не значит признать содержимое его заявлением о полномочиях.

Следующие проверяемые события — решение рабочей группы и испытания разных реализаций на одном наборе частей, путей и прав. Текущая версия задаёт правила приёма, по которым их можно будет судить.

Источники: редакция 03; редакция 02; статус IETF; RFC 1952; RFC 8878.