Como o Mac OS X salva detalhes sobre o URL do qual um arquivo foi baixado?

8

WRT este tópico O que devo fazer sobre o com.apple.quarantine? , Quero saber como o OS X pode aprender e salvar essas informações no campo @. Não estou procurando uma maneira de desativar esse recurso, mas sim um código (ou pseudocódigo, idéia, o que seja) referente à implementação dessa coisa. Agradeço antecipadamente.

Raffaele Di Fazio
fonte

Respostas:

6

Como Daniel mencionou, o navegador pode armazenar o URL de origem (e também o referenciador) de um arquivo baixado no atributo estendido com.apple.metadata:kMDItemWhereFroms.

Primeiro, a Apple adicionou isso ao Safari para Mac OS X 10.4, depois ao Chrome / Chromium [Edição 22289] , e há uma excelente solicitação de aprimoramento para adicioná-lo ao Firefox [Bug 337051] .

Quanto ao código real para implementar isso, confira o patch do Chromium .

mark4o
fonte
Boa história :-) No entanto, ao usar o Safari, não vejo o referenciador (ou pelo menos não nos novos downloads, tentei ver se perdi alguma coisa). Talvez as coisas sejam diferentes quando você clica com o botão direito e faz o download ou quando um download é iniciado automaticamente? (Por exemplo, alguns navegadores não enviar a referência ao abrir links em novas janelas também.)
Arjan
Ah, você está certo, mdlsmostra isso para downloads iniciados automaticamente. E o Get Info do Finder mostra isso como uma lista separada por vírgulas, que eu não percebi!
Arjan #
6

Após o download de qualquer arquivo, a execução xattr filemostrará o que o navegador armazenou nos atributos estendidos:

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

A seguir, mais detalhes:

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 [e assim por diante]

... ou, em formato legível:

mdls -name kMDItemWhereFroms mydownload.gz
kMDItemWhereFroms = (
    "http: // algum URL"
)

Você também pode definir esses (ou qualquer atributo que desejar):

xattr -w algum nome algum valor mydownload.gz

O seguinte também funciona, embora tenha resultados diferentes ao executar os comandos acima novamente:

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

E para o com.apple.quarantineatributo, de acordo com o entendimento :

Normalmente, os dados da quarentena consistem em um conjunto de 4 valores delimitados por ponto-e-vírgula (um conjunto de dígitos decimais de uma finalidade desconhecida - geralmente 0000, um ID opaco de 8 caracteres , o nome do aplicativo que criou o arquivo em quarentena e a UTI do aplicativo (Identificador de tipo uniforme) prefixado com um símbolo de barra vertical)

Por exemplo, para dois arquivos diferentes baixados usando o Mozilla FireFox, é semelhante a:

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

Usando as Ações de pasta do Automator, você pode executar esses comandos para novos arquivos em uma pasta específica, se é isso que você procura.

Arjan
fonte
4

Essa informação é armazenada nos chamados "atributos estendidos". John Siracusa tem um excelente artigo discutindo atributos estendidos quando eles foram introduzidos pela primeira vez, no OS X 10.4: http://arstechnica.com/apple/reviews/2005/04/macosx-10-4.ars/7 .

Parece que não há mais uma página de manual para a ferramenta de linha de comando 'xattr', mas 'xattr -h' deve mostrar ajuda básica.

Uma API no nível POSIX / BSD está disponível em /usr/include/sys/xattr.h, que define funções C como getxattr (), setxattr (), removexattr (), listxattr () e seus primos baseados em FILE. (Esses comandos, ao contrário de 'xattr (1)', possuem páginas de manual).

NSGod
fonte
3

É definido pelo aplicativo que está baixando o arquivo. Nenhuma detecção mágica de download, apenas um atributo definido no arquivo baixado pelo aplicativo de download.

Acabei de baixar um arquivo zip usando o wgetGoogle Chrome, Firefox e Safari e, como esperado, o wgetdownload não possui atributos estendidos, os downloads do navegador possuem, pois eles conhecem esse recurso. Curiosamente, o download do Firefox definiu a quarentena, mas esqueceu de definir com.apple.metadata:kMDItemWhereFromsas informações em que o arquivo baixado estava originalmente localizado (seu URL). O Safari e o Chrome definem os wgetdois.

Daniel Beck
fonte