Using SambaRobert Eckstein, David Collier-Brown, Peter Kelly1st Edition November 1999 1-56592-449-5, Order Number: 4495 416 pages, $34.95 |
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.TXTDer 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.%mDies 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= yesWenn 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
aufyes
gesetzt ist, wird Samba immer den Fall verweden, der vom Betriebssystem zur Darstellung (nicht Auflösung) von Dateinamen vorgesehen ist. Ist es aufno
gesetzt, wird es den Fall verwenden, der von der Optiondefault
case
bestimmt wurde. Dasselbe gilt fürshort
preserve
case
. Wenn diese Option aufyes
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 Optiondefault
case
festgelegt wurde. Samba löst schließlich Dateinamen in seinen Shares auf Grund des Wertes der Optioncase
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
oderlower
)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 dendefault 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 istno
, 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 aufyes
setzen, wie hier gezeigt:[accounting] case sensitive = yesIm anderen Fall empfehlen wir, dass du diese Option auf ihrer Vorgabe belässt.
5.4.2.2 default case
Die Option
default
case
wird mitpreserve
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 istlower
, 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 = upperWenn 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 istyes
, was den vom Betriebssystem des Clients vorgesehenen Fall verwendet. Wenn er aufno
gesetzt ist, wird der Wert der Optiondefault
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 aufyes
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 Voreinstellungyes
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 istyes
, was die Schreibweise verwendet, die vom Betriebssystem geboten wird. Du kannst Samba die Schreibweise durch die Optiondefault
case
aussuchen lassen, wenn du Folgendes einstellst:[global] short preserve case = noWenn 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 istyes
. Du kannst sie pro Share aufheben wie folgt:[data] mangled names = no5.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 istno
. Wenn du sie aufyes
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 = yesWir 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 = 1005.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.
© 1999, O'Reilly & Associates, Inc.