Opet Samba a cestina

Leos Bitto bitto na atrey.karlin.mff.cuni.cz
Středa Září 10 14:02:06 CEST 1997


Dobry den,

Nejprve bych se chtel omluvit ze pisu az ted, ale ted je pro me takova
hloupa doba kdy uz nejsem v praci a jeste nejsem ve skole, takze mam
pristup na Internet hodne omezeny - ted napriklad jsem jen na jeden den ve
skole kvuli zkousce.

Takze jak to je. Ten patch co jsem sem posilal na zacatku, ktery celou
tuto diskusi rozpoutal, jsem jeste trochu prepracoval. Jednak v nem bylo
par chybicek, ale ty nebyly v ceskych znacich. Presto jsem je opravil,
kdyz uz to jednou ma byt codepage 852 tak at uz to je komplet spravne. Pak
jsem to predelal z Samby 1.9.17alpha4 na 1.9.17p1, a nakonec jsem tam
dodelal tak ze pokud se v smb.conf neuvede parametr client code page, tak
se vezme defaultni hodnota 852 a ne 850. Tento novy patch prikladam.
Aplikuje se pomoci "patch -p0 < sambacz.diff" z adresare samba-1.9.17p1.

Ten puvodni patch jsem uz davno poslal autorum Samby, ale doted jsem
nedostal zadnou odpoved. Mozna se jim nelibi ze to neni okomentovane tak
jako ostatni kodove stranky - tj. u kazdeho znaku jeho anglicky popis,
Dec/Hex/Oct ASCII hodnota a tak vubec - viz puvodni charset.c. Na to ted
nemam ani cas ani naladu - pokud nekdo chcete tak to tam dopiste. Stejne
je ale divne ze se mi nikdo ani neozval. Mohli aspon napsat ze se jim to
nelibi nebo tak neco.

No a nakonec co se tyce ukladani jmen na disk v iso-8859-2. To ten muj
patch neresi! Ten pouze zarucuje ze server bude "case insensitive" tak jak
to klient, pouzivajici codepage 852 (tedy treba ceske Windows 95 ci
Windows NT; asi i 3.11 ale ty jsem nezkousel), pozaduje. Tedy vse bude pro
klienty fungovat tak jak ma, akorad ze na Linuxovem filesystemu budou ve
jmenech souboru nesmyslne paznaky. Ovsem kdyz se na tento filesystem bude
pristupovat opet pres Sambu, tak ty paznaky budou opet videt spravne.

K tomu aby se soubory na disk ukladaly s jmeny prelozenymi do iso-8859-2
ma slouzit parametr "character set = iso8859-2" v smb.conf. Ale ten by mel
fungovat pro codepage 850, a jeste k tomu je ve zdrojacich v komentari
napsano "May need more work ?" takze to asi je neodzkousene. Az budu mit
cas tak to odzkousim a az budu mit jeste vice casu tak to prepisu aby to
fungovalo pro codepage 852. Jde o funkci init_iso8859_2 v souboru 
charcnv.c, pokud se na to nekdo chcete vrhnout driv nez ja.

No koukam ze jsem se dneska nejak rozepsal. Takze s pozdravem Ceske Sambe
zdar! se loucim.




Leos Bitto
------------- další část ---------------
diff -ur source.orig/charset.c source/charset.c
--- source.orig/charset.c	Fri Sep  5 22:53:47 1997
+++ source/charset.c	Wed Sep 10 12:53:55 1997
@@ -95,6 +95,51 @@
   {0x9C,0,0,0},     /* Pound        */
   {0,0,0,0}
 };
+
+/* lower->upper mapping for IBM Code Page 852 - MS-DOS Latin 2 */
+unsigned char cp_852[][4] = {
+{0x81,0x9A,1,1},
+{0x82,0x90,1,1},
+{0x83,0xB6,1,1},
+{0x84,0x8E,1,1},
+{0x85,0xDE,1,1},
+{0x86,0x8F,1,1},
+{0x87,0x80,1,1},
+{0x88,0x9D,1,1},
+{0x89,0xD3,1,1},
+{0x8B,0x8A,1,1},
+{0x8C,0xD7,1,1},
+{0x92,0x91,1,1},
+{0x93,0xE2,1,1},
+{0x94,0x99,1,1},
+{0x96,0x95,1,1},
+{0x98,0x97,1,1},
+{0x9C,0x9B,1,1},
+{0x9F,0xAC,1,1},
+{0xA0,0xB5,1,1},
+{0xA1,0xD6,1,1},
+{0xA2,0xE0,1,1},
+{0xA3,0xE9,1,1},
+{0xA5,0xA4,1,1},
+{0xA7,0xA6,1,1},
+{0xA9,0xA8,1,1},
+{0xAB,0x8D,1,1},
+{0xAD,0xB8,1,1},
+{0xBE,0xBD,1,1},
+{0xC7,0xC6,1,1},
+{0xD0,0xD1,1,1},
+{0xD4,0xD2,1,1},
+{0xD8,0xB7,1,1},
+{0xE4,0xE3,1,1},
+{0xE5,0xD5,1,1},
+{0xE7,0xE6,1,1},
+{0xEA,0xE8,1,1},
+{0xEC,0xED,1,1},
+{0xEE,0xDD,1,1},
+{0xFB,0xEB,1,1},
+{0xFD,0xFC,1,1},
+{0,0,0,0}
+};
  
 /* lower->upper mapping for IBM Code Page 437 - MS-DOS Latin US */
 unsigned char cp_437[][4] = {
@@ -257,6 +302,9 @@
     case 850:
       cp = cp_850;
       break;
+    case 852:
+      cp = cp_852;
+      break;
     case 437:
       cp = cp_437;
       break;
@@ -264,17 +312,10 @@
       cp = cp_932;
       break;
     default:
-#ifdef KANJI
-      /* Use default codepage - currently 932 */
+      /* Use default codepage */
       DEBUG(6,("codepage_initialise: Using default client codepage %d\n", 
-               932));
-      cp = cp_932;
-#else /* KANJI */
-      /* Use default codepage - currently 850 */
-      DEBUG(6,("codepage_initialise: Using default client codepage %d\n", 
-               850));
-      cp = cp_850;
-#endif /* KANJI */
+               DEFAULT_CLIENT_CODE_PAGE));
+      cp = DEFAULT_CLIENT_CODE_PAGE_ARRAY;
       break;
   }
 
diff -ur source.orig/smb.h source/smb.h
--- source.orig/smb.h	Fri Sep  5 22:53:49 1997
+++ source/smb.h	Wed Sep 10 12:49:19 1997
@@ -929,9 +929,11 @@
 #ifdef KANJI
 /* Default client code page - 932 - Japanese */
 #define DEFAULT_CLIENT_CODE_PAGE 932
+#define DEFAULT_CLIENT_CODE_PAGE_ARRAY cp_932
 #else /* KANJI */
-/* Default client code page - 850 - Western European */
-#define DEFAULT_CLIENT_CODE_PAGE 850
+/* Default client code page - 852 - Eastern European */
+#define DEFAULT_CLIENT_CODE_PAGE 852
+#define DEFAULT_CLIENT_CODE_PAGE_ARRAY cp_852
 #endif /* KANJI */
 
 /* Size of buffer to use when moving files across filesystems. */


Další informace o konferenci Linux