W jaki sposób Mac OS X może zapisać szczegóły dotyczące adresu URL, z którego plik został pobrany?

8

WRT ten temat Co należy zrobić z com.apple.quarantine? , Chcę wiedzieć, w jaki sposób OS X może uczyć się i zapisywać te informacje w polu @. Nie szukam sposobu na wyłączenie tej funkcji, ale kod (lub pseudokod, pomysł, cokolwiek) dotyczący implementacji tej rzeczy. Z góry dziękuję.

Raffaele Di Fazio
źródło

Odpowiedzi:

6

Jak wspomniał Daniel, przeglądarka może przechowywać źródłowy adres URL (a także stronę odsyłającą) pobranego pliku w atrybucie rozszerzonym com.apple.metadata:kMDItemWhereFroms.

Najpierw Apple dodało to do Safari dla Mac OS X 10.4, następnie zostało dodane do Chrome / Chromium [numer 22289] , i istnieje wyjątkowa prośba o ulepszenie, aby dodać go do Firefoksa [Bug 337051] .

Jeśli chodzi o rzeczywisty kod, aby to zaimplementować, sprawdź łatkę Chromium .

mark4o
źródło
Ładna historia :-) Jednak podczas korzystania z Safari nie widzę strony odsyłającej (a przynajmniej nie w nowych plikach do pobrania próbowałem sprawdzić, czy coś przeoczyłem). Może sytuacja wygląda inaczej po kliknięciu prawym przyciskiem myszy i pobraniu lub gdy pobieranie rozpoczyna się automatycznie? (Na przykład niektóre przeglądarki nie wysyłają strony odsyłającej podczas otwierania linków w nowych oknach.)
Arjan
Ach, masz rację, mdlspokazuje to dla pobierania, które rozpoczyna się automatycznie. A Finder Get Info pokazuje to jako listę oddzieloną przecinkami, której nie zauważyłem!
Arjan
6

Po pobraniu dowolnego pliku uruchomione xattr filepokaże, co przeglądarka zapisała w atrybutach rozszerzonych:

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

Następnie więcej szczegółów:

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 [i tak dalej]

... lub w czytelnym formacie:

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

Możesz także ustawić te (lub dowolne atrybuty):

xattr -w jakaś nazwa jakaś wartość mydownload.gz

Dodaje też działa, chociaż to ma różne wyniki, kiedy ponownie uruchomione powyższe polecenia:

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

I dla com.apple.quarantineatrybutu, zgodnie z rozumieniem :

Zazwyczaj dane kwarantanny składają się z 4 wartości rozdzielanych średnikami (zestawu cyfr dziesiętnych o nieznanym przeznaczeniu - zazwyczaj 0000, nieprzezroczystego 8-znakowego identyfikatora , nazwy aplikacji, która utworzyła plik poddany kwarantannie, oraz interfejsu użytkownika aplikacji (Jednolity identyfikator typu) poprzedzony symbolem potoku)

Na przykład dla dwóch różnych plików pobranych przy użyciu Mozilla FireFox wygląda to następująco:

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

Korzystając z akcji folderu Automatora, możesz uruchamiać takie polecenia dla nowych plików w określonym folderze, jeśli tego właśnie chcesz.

Arjan
źródło
4

Informacje te są przechowywane w tak zwanych „atrybutach rozszerzonych”. John Siracusa ma doskonały artykuł omawiający rozszerzone atrybuty, kiedy zostały wprowadzone po raz pierwszy, w OS X 10.4: http://arstechnica.com/apple/reviews/2005/04/macosx-10-4.ars/7 .

Wygląda na to, że nie ma już strony podręcznika dla narzędzia wiersza poleceń „xattr”, ale „xattr -h” powinien pokazać podstawową pomoc.

Interfejs API na poziomie POSIX / BSD jest dostępny w /usr/include/sys/xattr.h, który definiuje funkcje C, takie jak getxattr (), setxattr (), removexattr (), listxattr () i ich kuzyni na podstawie PLIKÓW. (Te polecenia, w przeciwieństwie do 'xattr (1)', mają strony podręcznika).

NSGod
źródło
3

Ustawia go aplikacja pobierająca plik. Brak wykrycia magicznego pobierania, po prostu atrybut ustawiony w pobranym pliku przez aplikację do pobierania.

Właśnie pobrałem plik zip przy użyciu wgetGoogle Chrome, Firefox i Safari i, zgodnie z oczekiwaniami, wgetpobieranie nie ma rozszerzonych atrybutów, pliki do pobrania przeglądarki mają, ponieważ są świadomi tej funkcji. Co ciekawe, pobieranie Firefox ustawia kwarantannę, ale zapomniałem ustawić com.apple.metadata:kMDItemWhereFroms, gdzie pierwotnie znajdował się pobrany plik (jego adres URL). Safari i Chrome nie ustawiają obu wget.

Daniel Beck
źródło