Using Samba

Using Samba

Robert Eckstein, David Collier-Brown, Peter Kelly
1st Edition November 1999
1-56592-449-5, Order Number: 4495
416 pages, $34.95

Buy the hardcopy

Inhaltsverzeichnis


Previous: 5.3 Dateirechte und Attribute auf MS-DOS und Unix Kapitel 5
Browsing und fortgeschrittene Disk Shares
Next: 5.5 Locks und Oplocks
 

5.4 Name Mangling und Case

In den vergangenen Tagen von DOS und Windows 3.1 war jeder Dateiname mit acht Großbuchstaben begrenzt, gefolgt von einem Punkt und drei weiteren Großbuchstaben. Man kannte es unter dem Begriff 8.3 Format, und es war eine ungeheures Ärgernis. Windows 95/98, Windows NT, und Unix haben seither das Problem entspannt, indem sie viel mehr Buchstaben in Groß- und Kleinschreibung für einen Dateinamen erlaubten. Tabelle 5.6 zeigt den momentanen Stand der Benennung von einigen bekannten Betriebssystemen.


Tabelle 5.6: Dateinamen-Beschränkungen in Betriebssystemen

Betriebssystem

Regeln für Dateinamen

DOS 6.22 oder darunter

Acht Zeichen, gefolgt von einem Punkt und einer Erweiterung mit drei Zeichen (8.3 Format); Großbuchstaben

Windows 3.1 für Workgroups

Acht Zeichen, gefolgt von einem Punkt und einer Erweiterung mit drei Zeichen (8.3 Format); Großbuchstaben

Windows 95/98

127 Zeichen; Groß- und Kleinbuchstaben

Windows NT

127 Zeichen; Groß- und Kleinbuchstaben

Unix

255 Zeichen; Groß- und Kleinbuchstaben

Samba muss noch abwärtskompatibel mit Netzwerk-Clients bleiben, die Dateien nur im 8.3-Format speichern, wie Windows für Workgroups. Wenn ein User eine Datei namens antidisestablishmentarianism.txt auf einer Share erzeugt, könnte sie ein Windows-für-Workgroups-Client nicht mit einer anderen Datei mit Namen antidisease.txt im selben Verzeichnis auseinander halten. Wie Windows 95/98 und Windows NT muss Samba eine besondere Methodik zum Übersetzen eines langen Dateinamens in einen 8.3-Dateinamen einsetzen, und zwar auf solche Art, dass ähnliche Dateinamen keine Kollisionen verursachen. Das nennt man name mangling, und Samba erledigt das in einer Weise, die Windows 95 und seinen Nachfolgern ähnlich, aber nicht mit ihnen identisch ist.

5.4.1 Die Mangling-Operation von Samba

Hier steht, wie Samba einen langen Dateinamen zu einem 8.3-Dateinamen verkürzt:

  • Wenn der Original-Dateiname nicht mit einem Punkt beginnt, werden die ersten fünf alphanumerischen Zeichen vor dem letzten Punkt (wenn es einen gibt) zu Großbuchstaben konvertiert. Diese Zeichen werden als die ersten fünf Zeichen des zu 8.3 verkürzten Dateinamens verwendet.

  • Wenn der Original-Dateiname mit einem Punkt beginnt, wird der Punkt entfernt, und werden die ersten fünf alphanumerischen Zeichen vor dem letzten Punkt (wenn es einen gibt) zu Großbuchstaben konvertiert. Diese Zeichen werden als die ersten fünf Zeichen des zu 8.3 verkürzten Dateinamens verwendet.

  • Diese Zeichen folgen einem besonderen Verkürzungs-Verfahren: als Vorgabe eine Tilde (~), obwohl Samba dir dieses Zeichen zu ändern erlaubt.

  • Die Basis des langen Dateinamens vor der letzten Periode ist in einen Zwei-Zeichen-Code geteilt, Teile des Namens nach dem letzten Punkt dürfen, wenn nötig, verwendet werden. Dieser Zwei-Zeichen-Code wird im 8.3-Dateinamen nach dem Mangling-Zeichen angehängt.

  • Die ersten drei Buchstaben nach dem letzten Punkt (wenn einer vorkommt) des Original-Dateinamens werden in Großbuchstaben umgewandelt und hinter dem verkürzten Namen als Erweiterung angehängt. Wenn der Original-Dateiname mit einem Punkt beginnt, werden drei Unterstriche (___) anstatt der Erweiterung verwendet.

Hier sind einige Beispiele:

virtuosity.dat                       VIRTU~F1.DAT
.htaccess                            HTACC~U0.___
hello.java                           HELLO~1F.JAV
team.config.txt                      TEAMC~04.TXT
antidisestablishmentarianism.txt     ANTID~E3.TXT
antidiseast.txt                      ANTID~9K.TXT

Der Gebrauch dieser Regeln erlaubt Windows für Workgroups, die zwei Dateien im Namen der armen Person zu unterscheiden, die gezwungen ist, das Netzwerk durch die Augen dieses Betriebssystems zu sehen. Beachte, dass derselbe lange Dateiname immer zum selben Kurznamen mit Samba gestutzt wird; das passiert mit Windows nicht immer. Die Kehrseite dieses Ansatzes bedeutet die Möglichkeit von Kollisionen, obwohl die Chancen sehr gering sind.

Du willst generell die Konfigurationsoptionen für die Verkürzung nur mit den ältesten Clients verwenden. Wir empfehlen dies, ohne die anderen Clients zu stören, mit dem Zusatz der Direktive include in der Datei smb.conf file:

[global]
	include = /ucsr/local/samba/lib/smb.conf.%m

Dies verlangt die Datei smb.conf.WfWg, wenn sich ein WfW-Client anschließt. Nun kannst du eine Datei /usr/local/samba/lib/smb.conf.WfWg erzeugen, die diese Optionen enthalten könnte:

[global]
	case sensitive = no
	default case = upper
	preserve case = no
	short preserve case = no
	mangle case = yes
	mangled names= yes

Wenn du kein Windows für Workgroups 3.1 benützt, brauchst du vielleicht keine dieser Optionen in ihren Vorgaben zu verändern.

5.4.1.1 Darstellung und Auflösung von Dateinamen mit Samba

Ein anderer Punkt, den wir herausheben sollten, ist der, dass es einen Unterschied gibt, wie ein Betriebssystem eine Datei darstellt und wie sie diese auflöst. Wenn du z.B. Windows 95/98/NT verwendet hast, bist du wahrscheinlich auf eine Datei namens README.TXT gestoßen. Die Datei kann vom Betriebssystem ganz in Großbuchstaben dargestellt werden. Nun, wenn du ein MS-DOS-Fenster öffnest und den Befehl edit readme.txt eingibst, wird die All-Caps-Datei in das Editorprogramm geladen, obwohl du den Namen in Kleinbuchstaben eingabst!

Das geht deswegen, weil die Windows 95/98/NT-Familie Dateien in einer case-insensitiven Art auflöst, obwohl die Dateien in case-sensitiver Weise dargestellt werden. Unix-basierte Betriebssysteme dagegen lösen Dateien immer in einer case-sensitiven Art auf; wenn du versuchst, README.TXT mit dem Befehl vi readme.txt zu editieren, wirst du wahrscheinlich den leeren Puffer einer neuen Datei aufmachen.

Hier steht, wie Samba Fälle behandelt: wenn preserve case auf yes gesetzt ist, wird Samba immer den Fall verweden, der vom Betriebssystem zur Darstellung (nicht Auflösung) von Dateinamen vorgesehen ist. Ist es auf no gesetzt, wird es den Fall verwenden, der von der Option default case bestimmt wurde. Dasselbe gilt für short preserve case. Wenn diese Option auf yes gesetzt ist, wird Samba den Vorgabe-Fall des Betriebssystems für Darstellung von 8.3 Dateinamen verwenden; sonst verwendet es den Fall, der von der Option default case festgelegt wurde. Samba löst schließlich Dateinamen in seinen Shares auf Grund des Wertes der Option case sensitive auf.

5.4.2 Mangling-Optionen

Samba erlaubt dir, sehr verfeinerte Instruktionen anzugeben, wie es die Namensverkürzung durchführen soll, einschließlich dieser Kontrolle der "case sensivity", dem eingefügten Zeichen für die Gestaltung eines verkürzten Namens und der Möglichkeit, manuell Dateinamen eines Formats auf ein anderes abzubilden. Diese Optionen zeigt Tabelle 5.7.


Tabelle 5.7: Name Mangling-Optionen

Option

Parameter

Funktion

Vorgabe

Bereich

case sensitive

(casesignames)

boolean

Wenn yes, dann behandelt Samba Dateinamen als case-sensitive (Windows tut das nicht).

no

Share

default case

(upper oder lower)

Fall für die Vorgabe annehmen (nur verwendet, wenn preserve case no ist).

Lower

Share

preserve case

boolean

Wenn yes, dann behalte den Fall, den der Client unterstützt (z.B. konvertiere nicht in den default case).

yes

Share

short preserve case

boolean

Wenn yes, halte den Fall des 8.3-Formatnamens aufrecht, den der Client unterstützt.

yes

Share

mangle case

boolean

Verkürze einen Namen, wenn er ein gemischter Fall ist.

no

Share

mangled names

boolean

Verkürzt lange Namen in das 8.3 DOS-Format.

yes

Share

mangling char

string (Einzelzeichen)

Gibt das Verkürzungszeichen aus.

~

Share

mangled stack

numerisch

Anzahl der verkürzten Namen, die auf dem lokalen Mangling-Stack gehalten werden.

50

Global

mangled map

string (Liste von Mustern)

Erlaubt das Mappen von Dateinamen von einem Format in das andere.

Nichts

Share

5.4.2.1 case sensitive

Diese Share-Level-Option, die das stumpfe Synonym casesignames hat, legt fest ob Samba Case schützen sollte, wenn die Dateinamen in einer bestimmten Share aufgelöst werden. Die Vorgabe für diese Option ist no, was der Behandlung der Datei-Auflösung durch Windows entspricht. Wenn Clients ein Betriebssystem verwenden, das den Vorteil der case-sensitiven Dateinamen wahrnimmt, kannst du diese Konfigurations-Option auf yes setzen, wie hier gezeigt:

[accounting]
	case sensitive = yes

Im anderen Fall empfehlen wir, dass du diese Option auf ihrer Vorgabe belässt.

5.4.2.2 default case

Die Option default case wird mit preserve case benützt. Das bezeichnet den Vorgabe-Fall (upper oder lower), den Samba anwendet, wenn es im Auftrag eines Clients eine Datei auf einer seiner Shares erzeugt. Der Vorgabe-Fall ist lower, was bedeutet, dass neu erzeugte Dateien die mixed-case Namen verwenden, die ihnen vom Client gegeben wurden. Wenn du es brauchst, kannst du diese globale Option überschreiben, indem du Folgendes festlegst:

[global]
	default case = upper

Wenn du diesen Wert bestimmst, werden die Namen von neu erzeugten Dateien in Großbuchstaben übersetzt und können in einem Programm nicht zurückverwandelt werden. Wir empfehlen, dass du den Vorgabe-Wert verwendest, außer wenn du mit Windows für Workgroups oder einem anderen 8.3-Client arbeitest, in deren Fall er upper sein sollte.

5.4.2.3 preserve case

Diese Option legt fest, ob eine von Samba im Auftrag des Clients erzeugte Datei mit dem vom Betriebssystem des Clients vorgesehenen Fall erzeugt wird oder der Fall von der oben besprochenen Konfigurations-Option default case bestimmt wird. Der Vorgabe-Wert ist yes, was den vom Betriebssystem des Clients vorgesehenen Fall verwendet. Wenn er auf no gesetzt ist, wird der Wert der Option default case verwendet.

Beachte, dass diese Option keine vom Client gesendete 8.3-Dateianfragen behandelt - siehe die nachfolgende Option short preserve case. Du könntest diese Option auf yes setzen wollen, wenn Applikationen, die Dateien auf dem Sambaserver erzeugen, case-sensitiv verwendet werden, wenn sie die Datei erzeugen. Wenn du z.B. Samba zwingen willst, das Verhalten eines Windows NT-Dateisystems zu imitieren, kannst du diese Option auf ihrer Voreinstellung yes belassen.

5.4.2.4 short preserve case

Diese Option bestimmt, ob ein von Samba erzeugter 8.3-Dateiname im Auftrag des Clients mit der Case-Voreinstellung des Client-Betriebssystems oder mit der Schreibweise der Konfigurations-Option default case erzeugt wird. Der Vorgabe-Wert ist yes, was die Schreibweise verwendet, die vom Betriebssystem geboten wird. Du kannst Samba die Schreibweise durch die Option default case aussuchen lassen, wenn du Folgendes einstellst:

[global]
	short preserve case = no

Wenn du Samba zwingen willst, das Verhalten eines Windows NT-Dateisystems zu imitieren, kannst du diese Option auf ihrer Voreinstellung yes belassen.

5.4.2.5 mangled names

Diese Share-Level-Option bestimmt, ob Samba Dateinamen für 8.3-Clients in dieser Share verkürzen wird. Wenn die Option auf no eingestellt ist, wird Samba die Namen nicht verkürzen, und (abhängig vom Client) sie werden entweder unsichtbar sein oder zu solchen abgeschnitten erscheinen, die 8.3-Dateisysteme verwenden. Die Voreinstellung ist yes. Du kannst sie pro Share aufheben wie folgt:

[data]
	mangled names = no

5.4.2.6 mangle case

Diese Option sagt Samba, ob es Dateinamen verkürzen soll, die nicht ganz in der Schreibweise verfasst sind, die durch die Verwendung der Konfigurations-Option default case festgelegt wird. Die Voreinstellung dieser Option ist no. Wenn du sie auf yes setzt, solltest du sicher sein, das alle Clients die verkürzten Dateinamen, die sich ergeben, behandeln können. Du kannst sie für jede Share aufheben wie folgt:

[data]
	mangle case = yes

Wir empfehlen, dass du diese Option belässt, außer du hast einen gut überlegten Grund, sie zu wechseln.

5.4.2.7 mangling char

Diese Share-Level-Option bestimmt das verwendete Mangling-Zeichen, wenn Samba Dateinamen in das 8.3-Format verkürzt. Das vorgegebene Zeichen ist eine Tilde (~). Du kannst es durch ein beliebiges Zeichen ersetzen, zum Beispiel:

[data]
	mangling char = #

5.4.2.8 mangled stack

Samba unterhält einen lokalen Stack der letzten verkürzten 8.3-Dateinamen, dieser Stack kann verwendet werden, map-verkürzte Dateinamen zu ihrem Originalstatus umzukehren. Das wird oft von Applikationen benötigt, die eine Datei erzeugen und speichern, sie schließen und sie später modifizieren müssen. Die voreingestellte Anzahl von gespeicherten langen/verkürzten Dateinamenpaaren auf diesem Stack ist 50. Nun, wenn du den Betrag der Prozessorzeit für die Verkürzung von Dateinamen verringern willst, kannst du den Stack auf eine beliebige Größe erhöhen, auf Kosten des Speichers und etwas langsameren Dateizugriffs.

[global]
	mangled stack = 100

5.4.2.9 mangled map

Wenn das vorgegebene Verhalten des Name-Mangling nicht ausreicht, kannst du Samba weitere Instruktionen erteilen, wie es sich beim Gebrauch der Option mangled map verhalten muss. Diese Option erlaubt dir Mapping-Muster zu bestimmen, die vor oder sogar statt dem von Samba durchgeführten Name-Mangling verwendet werden können. Ein Beispiel:

[data]
	mangled map =(*.database *.db) (*.class *.cls)

Hier wird Samba angewiesen, jede Datei, die es antrifft, nach Zeichen abzusuchen, die mit dem ersten, in der Klammer festgelegten Muster übereinstimmt, und sie in das modifizierte zweite Muster in der Klammer umzuwandeln, zur Ausgabe auf einem 8.3-Client. Das ist in dem Fall praktisch, wenn das Name-Mangling den Dateinamen unkorrekt umwandelt oder in ein Format, das der Client nicht zu lesen versteht. Muster sind durch Leerzeichen getrennt.


Previous: 5.3 Dateirechte und Attribute auf MS-DOS und Unix Next: 5.5 Locks und Oplocks
5.3 Dateirechte und Attribute auf MS-DOS und Unix Buch-Index (engl.) 5.5 Locks und Oplocks

O'Reilly Home | O'Reilly Bookstores | How to Order | O'Reilly Contacts
International | About O'Reilly | Affiliated Companies

© 1999, O'Reilly & Associates, Inc.