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

8

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

    
por Raffaele Di Fazio 25.11.2010 / 10:01

4 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 foi adicionado ao Chrome / Chromium [Problema 22289] , e há uma solicitação de aprimoramento excepcional para adicioná-lo ao Firefox [Bug 337051] .

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

    
por 25.11.2010 / 21:49
5

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

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

Em seguida, 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 [and so on]

... ou, em formato legível:

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

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

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

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

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

E para o atributo com.apple.quarantine , de acordo com entender :

Typically, the Quarantine data consists of a set of 4 semicolon-delimited values (a set of decimal digits of an unknown purpose - typically 0000, an 8 character opaque ID, the name of the application that created the Quarantined file, and the application's UTI (Uniform Type Identifier) prefixed with a pipe symbol)

For example, for two different files downloaded using Mozilla FireFox, this looks like:

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 tais comandos para novos arquivos em uma pasta específica, se é isso que você deseja depois.

    
por 25.11.2010 / 18:55
4

Essa informação é armazenada nos chamados "atributos estendidos". John Siracusa tem um excelente artigo discutindo os atributos estendidos quando eles foram introduzidos pela primeira vez, no OS X 10.4: link .

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

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

    
por 25.11.2010 / 17:56
3

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

Acabei de fazer o download de um arquivo zip usando wget , Google Chrome, Firefox e Safari, e, como esperado, o wget download não possui atributos estendidos, os downloads do navegador, já que eles estão cientes desse recurso. Curiosamente, o download do Firefox definir quarentena, mas esqueci de definir com.apple.metadata:kMDItemWhereFroms , as informações onde o arquivo baixado foi originalmente localizado (sua URL). O Safari e o Chrome definem ambos, wget nem.

    
por 25.11.2010 / 13:19