UNIXwork

dav 1.1.1 veröffentlicht

12. Dezember 2017

Ein kleines dav Update, welches nur einen Bug fixt, der nur unter Windows auftritt. Der Fehler verursachte, dass die Befehle get und list nicht mit der -R Option funktionierten.

Die Änderungen betreffen nur die Windows-Version, durch ein #ifdef sind diese auf anderen Plattformen nicht aktiv. Als Nicht-Windows-User kann man sich das Update also sparen. Ich schätze, ich muss wohl ober übel in Zukunft mehr unter Windows testen.

dav Projektseite SourceForge Projektseite

Autor: Olaf | 0 Kommentare | Tags: dav

dav copy und move mit verschlüsselten Dateien

11. Dezember 2017

Die integrierte Verschlüsselung von dav ist für den Benutzer weitestgehend transparent, bis auf in den Befehlen copy und move in der aktuellen Version 1.1. Bisher sind diese Befehle nur low level WebDAV, das heißt, es wird wirlich nur ein WebDAV COPY oder MOVE ausgeführt. Schauen wir uns dav copy und dav move erstmal an:

dav copy [-pcO] [-L <lock>] <url> <url>
dav move [-pcO] [-L <lock>] <url> <url>

Beide Befehle sind von der Benutzung her gleich, nur dass copy eine Kopie erstellt und move eine Ressource verschiebt. Wie man sieht, haben beide Befehle die Flags -p und -c, mit denen Verschlüsselung aktiviert und deaktiviert werden kann. Dies bezieht sich jedoch nur auf die Pfad-Auflösung.

Das Positive ist schon mal, dass mit aktivierter Verschlüsselung die Ziel-URL (das letzte Argument) auch randomisiert wird. Bei verschlüsselten Ressourcen ist der Dateiname, den der Server sieht, nur ein zufälliger String, während der Name, den dav verwendet, verschlüsselt in den Properties gespeichert wird. Das Problem ist, dass copy/move nicht diese Property anpassen, sondern nur die Properties der Source-URL kopieren, wie es von WebDAV COPY/MOVE gefordert ist. Das hat zur Folge, dass der Dateiname, den dav verwendet, bei verschlüsselten Ressourcen sich nicht durch dav copy/move ändert.

$ dav list -l cryptrepo
-c    32 bytes  Dec 11 19:54  test.txt
$ dav move secrepo/test.txt cryptrepo/newname.txt
$ dav list -l cryptrepo
-c    32 bytes  Dec 11 19:54  test.txt

Schlimmer wird es noch mit copy, wenn die Ziel-URL die selbe Collection ist:

$ dav copy cryptrepo/test.txt cryptrepo/copy.txt
$ dav list -l cryptrepo
-c    32 bytes  Dec 11 20:10  test.txt
-c    32 bytes  Dec 11 19:54  test.txt

Wer sich jetzt fragt, wie man die richtige Datei löschen kann: mit deaktivierter Verschlüsselung sieht man die echten Dateinamen und anhand des lastmodified-Datums kann man die richtige Datei identifizieren.

Möchte man eine verschlüsselte Datei umbenennen, also den verschlüsselten Namen ändern, gibt es einen einfachen Workaround.

Als erstes erstellt man mit dav put eine neue Datei mit dem gewünschten Namen.

$ dav put cryptrepo/newfile.txt -
^D

Dann holt man sich den Inhalt der crypto-name Property.

$ dav get-property cryptrepo/newfile.txt idav:crypto-name
z7qDCHM65EuUSooCt22yaI2d2zwKDdPDlgte23ATkUo=

Die Datei kann dann wieder gelöscht werden.

$ dav rm cryptrepo/newfile.txt

Die verschlüsselte Datei, die man umbenennen möchte, bekommt jetzt den Inhalt der crypto-name Property.

$ dav set-property cryptrepo/test.txt idav:crypto-name z7qDCHM65EuUSooCt22yaI2d2zwKDdPDlgte23ATkUo=

Und schon denkt dav, dass die Datei newfile.txt heißt.

Autor: Olaf | 0 Kommentare | Tags: dav, shell

Extended Attributes Teil 8: macOS Syscalls

10. Dezember 2017

Für den Zugriff auf Extended Attributes hat macOS die Syscalls listxattr, getxattr, setxattr und removexattr. Sie heißen genauso wie die Linux-Syscalls und funktionieren auch fast genauso, nur haben sie ein paar Parameter für Options mehr. Die Syscalls finden sich im Header sys/xattr.h.

Um den Inhalt eines Attributs zu erhalten, benutzen wir den Syscall getxattr:

ssize_t
getxattr(const char *path, const char *name, void *value, size_t size,
		u_int32_t position,
		int options);

Dabei gibt man den Dateipfad, den Namen des Attributs, einen Pointer auf einen Buffer sowie dessen Größe an. Wie im vorherigen Artikel erwähnt, haben macOS Extended Attributes keinen Namespace, daher ist name ein frei wählbarer Name. Mit value und size gibt man einen vorher allozierten Puffer und seine Größe an. Falls value NULL ist, wird von der Funktion nur die Länge des Inhalts zurück gegeben. Der Parameter position funktioniert nicht mit allen Typen von Attributen und sollte daher 0 sein. Der Parameter options kann abgesehn von 0 noch XATTR_NOFOLLOW oder XATTR_SHOWCOMPRESSION sein.

char *buf = malloc(1024);
ssize_t attrlen = ("file.txt", "myattribute", buf, 1024, 0, 0);
if(attrlen > 0) {
	printf("myattribute: %.*s\n", (int)attrlen, buf);
}

Attribute hinzufügen oder verändern geht mit setxattr.

int setxattr(const char *path, const char *name, void *value, size_t size,
		u_int32_t position,
		int options);

position sollte auch hier wieder 0 sein. Bei den options gibt es wieder XATTR_NOFOLLOW und die interessanten Options XATTR_CREATE, um zu erzwingen, dass das Attribut nur gesetzt wird, falls es noch nicht existiert, oder XATTR_REPLACE, um nur den Inhalt eines bereits existierenden Attributs zu ändern.

char *value = "Hello World!";
setxattr("file.txt", "myattribute", value, strlen(value), 0, 0);

Alle existierenden Attribute auflisten geht mit listxattr.

ssize_t listxattr(const char *path, char *namebuf, size_t size, int options);

Dies schreibt in den vorher allozierten Buffer die Namen aller Attribute, getrennt durch ein 0-Byte. Hier findet sich ein Beispielprogramm, welches alle Attribute einer Datei auflistet.

Autor: Olaf | 0 Kommentare | Tags: macos, xattr, c

Extended Attributes Teil 7: macOS Commandline Tools

09. Dezember 2017

Unter macOS sind Extended Attributes wie unter den meisten Betriebsystemen einfache name/value-Paare. Im unterschied zu Linux oder FreeBSD haben die Attribute keinen Namespace wie user oder system sondern einfach nur einen frei wählbaren Namen.

Extended Attributes können mit dem Tool xattr angezeigt und modifiziert werden. Außerdem kann auch ls Extended Attributes anzeigen. Eine kleine Übersicht über xattr:

Namen aller Attribute oder oder mehrerer Dateien auflisten:

xattr file ...

Value eines Attributs ausgeben:

xattr -p attr_name file ...

Attribut setzen:

xattr -w attr_name attr_value file ...

Attribut entfernen:

xattr -d attr_name file ...

Alle Attribute entfernen:

xattr -c file ...

Außerdem zeigt ls -l@ an, ob und welche Attribute eine Datei hat.

Ein kleines Beispiel:

$ echo "hello" > test.txt
$ rm test.txt 
$ echo "Hello World" > hello.txt
$ echo test > test.txt
$ xattr -w mime_type "text/plain" hello.txt 
$ xattr -w author Olaf hello.txt 
$ xattr -w testxattr testvalue test.txt 
$ ls -l@
total 16
-rw-r--r--@ 1 olaf  staff  12  9 Dez 19:18 hello.txt
	author	 4 
	mime_type	10 
-rw-r--r--@ 1 olaf  staff   5  9 Dez 19:18 test.txt
	testxattr	 9 
$ xattr -p mime_type hello.txt 
text/plain

Positiv ist, dass das macOS tar Extended Attributes im Archiv speichert. Auch cp kopiert sie standardmäßig. Insgesammt scheinen Extended Attributes unter macOS generell ein lebendigeres Feature als unter anderen Betriebsystemen zu sein, denn sie werden vom Finder oder anderen Programmen auch benutzt.

Autor: Olaf | 0 Kommentare | Tags: macos, xattr, shell

Back to the Mac

08. Dezember 2017

Nach vier Jahren Abstinenz jetzt wieder macOS? Was hab ich nur getan.

Von April 2009 bis September 2013 war ich schon mal Mac-User. Mich hat damals zum einen das OS interessiert, aber vor allem war ich vom Mac mini begeistert. Kompakte Hardware mit ausreichend Leistung, sehr leise und stromsparend. Irgendwann hat die Leistung jedoch nicht mehr gereicht und von OS X war ich auch genervt.

Der Wechsel zurück zu Linux war absolut schmerzlos. Irgendwelche spezielle Software, die nur unter OS X und nicht unter Linux läuft, hab ich nicht wirklich benutzt. Und Gnome 3 wirkte auf mich auch ein bisschen wie OS X. Aber Linux-Desktops wie Gnome 3 oder andere sind von der Funktionalität und Produktivität macOS oder Windows deutlich überlegen. Bei der Diskussion, was nun das beste Desktop-OS ist, wird gerne gesagt, dass Linux Gefrickel ist, wärend auf dem Mac alles einfach funktioniert. Das mag zwar sein. Doch wie oft installiert man das OS neu oder richtet neue Hardware ein? Vielleicht ist die Installation etwas frickeliger bei Linux (wobei sie mit meiner Hardware absolut problemlos ist), doch beim täglichen Arbeiten zählen andere Dinge. Windows und macOS können dann nur mit der größeren Auswahl an Anwendersoftware punkten.

Also warum sollte man als glücklicher Linux-User wieder zurück? Ohne Mac (meine Hackintosh-Versuche waren mehr oder weniger erfolglos) war ich nicht mehr in der Lage meine Software unter macOS zu testen. Auch weiß ich, dass dav unter einem aktuellen macOS nicht ohne weiteres kompiliert. Und meine Pläne für ein Multiplattform-GUI-Framework fallen ohne Mac auch aus. Auch ärgerte es mich, dass ich als Unix-Fan keinen Zugriff auf einen wichtigen Vertreter dieser Gattung hatte. Es musste also wohl oder übel wieder Apfel-Hardware her.

Die Auswahl ist da allerdings eher schlecht. Leider schafft es Apple nicht mehr, brauchbare Hardware zu bauen. Notebooks wollte ich nicht. Abgesehn davon taugen die auch nichts. Mac Pro ist alt und für die Tonne. Der iMac fällt auch aus, weil er ein AiO ist. Also muss wieder der Mac mini her. Das "aktuelle" Modell ist jedoch nicht nur von 2014, es ist auch noch schlechter als das Vorgängermodell von 2012.

Und der Mac mini ist jetzt auch gar nicht mal so gut. Selbst wenn man ein Modell mit aktueller CPU und wechselbaren RAM und SSD hätte. Vergleichbare Konkurrenzprodukte sind einfach besser. Mein aktueller Linux-PC ist ein Fujitsu D756. Ebenso leise und stromsparend, dafür keine verlötete CPU, kein verlöteter RAM, Platz für einige Disks und PCIe-Karten. Das ist jetzt jedoch ein Small Form Factor PC und nicht ganz so mini. Ich halte diese Geräteklasse zwar für überlegen, aber es gibt von PC-Herstellern auch deutlich kleinere Systeme. Ich fasse es zwar nicht, dass ich was positives über Lenovo sage, aber den ihr ThinkCentre M710/M910 Tiny ist ein sehr interessanter PC. Kleiner als der Mac mini, dafür leistungsfähiger, wartungsfreundlicher, erweiterbarer und mit mehr Schnittstellen. Günstiger glaube ich auch noch. Apple sollte also deutlich mehr tun als nur ein einfaches Update des Mac minis zu bringen.

Letztendlich hab ich dann doch den 2012er Mac mini gekauft. Dank Apple sind die Teile gebraucht nur zu abartig überhöhten Preisen erhältlich. An macOS muss ich mich jetzt erstmal wieder gewöhnen. Mein Haupt-Desktop wird definitiv Linux bleiben, weil ich da einfach die viel bessere Hardware für habe und die Bedienung von Gnome 3 einfach besser ist. Eine Chance gebe ich macOS aber schon, denn so ein bisschen hat mir das OS ja schon gefallen. Ein bisschen...

Autor: Olaf | 0 Kommentare | Tags: apple, mac, rant
Zurück Weiter