¿Cómo puede Mac OS X guardar detalles sobre la URL desde la que se descargó un archivo?

8

WRT este tema ¿Qué debo hacer con com.apple.quarantine? , Quiero saber cómo OS X puede aprender y guardar esa información en el campo @. No estoy buscando una forma de deshabilitar esta función, sino un código (o pseudocódigo, idea, lo que sea) con respecto a la implementación de esta cosa. Gracias de antemano.

Raffaele Di Fazio
fuente

Respuestas:

6

Como mencionó Daniel, el navegador puede almacenar la URL de origen (y también el referente) de un archivo descargado en el atributo extendido com.apple.metadata:kMDItemWhereFroms.

Primero Apple agregó esto a Safari para Mac OS X 10.4, luego se agregó a Chrome / Chromium [Problema 22289] , y hay una solicitud de mejora pendiente para agregarlo a Firefox [Error 337051] .

En cuanto al código real para implementar esto, revisa el parche Chromium .

mark4o
fuente
Buena historia :-) Sin embargo, cuando uso Safari no veo el referente (o al menos no en las nuevas descargas que intenté ver si me perdí algo). ¿Quizás las cosas son diferentes al hacer clic derecho y descargar, o cuando las descargas comienzan automáticamente? (Por ejemplo, algunos navegadores tampoco envían el referente al abrir enlaces en ventanas nuevas.)
Arjan
Ah, tienes razón, mdlslo muestra para descargas que comienzan automáticamente. ¡Y Obtener información del buscador muestra eso como una lista separada por comas, que no pude notar!
Arjan
6

Después de descargar cualquier archivo, la ejecución xattr filele mostrará lo que el navegador ha almacenado en los atributos extendidos:

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

A continuación, más detalles:

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 [y así sucesivamente]

... o, en formato legible:

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

También puede configurarlos (o cualquier atributo que desee):

xattr -w algún nombre algún valor mydownload.gz

Lo siguiente también funciona, aunque tiene resultados diferentes al ejecutar los comandos anteriores nuevamente:

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

Y para el com.apple.quarantineatributo, de acuerdo a entender :

Por lo general, los datos de cuarentena consisten en un conjunto de 4 valores delimitados por punto y coma (un conjunto de dígitos decimales de un propósito desconocido, generalmente 0000, una identificación opaca de 8 caracteres , el nombre de la aplicación que creó el archivo en cuarentena y la UTI de la aplicación (Identificador de tipo uniforme) prefijado con un símbolo de tubería)

Por ejemplo, para dos archivos diferentes descargados usando Mozilla FireFox, esto se ve así:

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

Con las acciones de carpeta de Automator, puede ejecutar dichos comandos para archivos nuevos en una carpeta específica, si eso es lo que busca.

Arjan
fuente
4

Esa información se almacena en lo que se llama "atributos extendidos". John Siracusa tiene un excelente artículo sobre los atributos extendidos cuando se introdujeron por primera vez, en OS X 10.4: http://arstechnica.com/apple/reviews/2005/04/macosx-10-4.ars/7 .

Parece que ya no hay una página de manual para la herramienta de línea de comando 'xattr', pero 'xattr -h' debería mostrar ayuda básica.

Una API de nivel POSIX / BSD está disponible en /usr/include/sys/xattr.h que define funciones C como getxattr (), setxattr (), removexattr (), listxattr () y sus primos basados ​​en ARCHIVO. (Estos comandos, a diferencia de 'xattr (1)', tienen páginas de manual).

NSGod
fuente
3

Lo establece la aplicación que descarga el archivo. Sin detección de descarga mágica, solo un atributo establecido en el archivo descargado por la aplicación de descarga.

Acabo de descargar un archivo zip usando wgetGoogle Chrome, Firefox y Safari, y, como se esperaba, la wgetdescarga no tiene atributos extendidos, las descargas del navegador tienen, ya que conocen esa característica. Curiosamente, la descarga de Firefox estableció la cuarentena, pero olvidó establecer com.apple.metadata:kMDItemWhereFromsla información donde se encontraba originalmente el archivo descargado (su URL). Safari y Chrome establecen ambos, wgetninguno.

Daniel Beck
fuente