added the validchars package written by tino@augsburg.net. This
authorAndrew Tridgell <tridge@samba.org>
Tue, 13 Aug 1996 12:34:10 +0000 (12:34 +0000)
committerAndrew Tridgell <tridge@samba.org>
Tue, 13 Aug 1996 12:34:10 +0000 (12:34 +0000)
package automates the building of a "valid chars =" line for any
client DOS based client. This makes setting things up right for
european languages much easier.

examples/validchars/msdos70.out [new file with mode: 0644]
examples/validchars/nwdos70.out [new file with mode: 0644]
examples/validchars/readme [new file with mode: 0644]
examples/validchars/validchr.c [new file with mode: 0644]
examples/validchars/validchr.com [new file with mode: 0644]

diff --git a/examples/validchars/msdos70.out b/examples/validchars/msdos70.out
new file mode 100644 (file)
index 0000000..a722b83
--- /dev/null
@@ -0,0 +1,257 @@
+255: ok\r
+254: ok\r
+253: ok\r
+252: ok\r
+251: ok\r
+250: ok\r
+249: ok\r
+248: ok\r
+247: ok\r
+246: ok\r
+245: ok\r
+244: ok\r
+243: ok\r
+242: ok\r
+241: ok\r
+240: ok\r
+239: ok\r
+238: ok\r
+237: ok\r
+236: 237\r
+235: ok\r
+234: ok\r
+233: ok\r
+232: ok\r
+231: 232\r
+230: ok\r
+229: ok\r
+228: 229\r
+227: ok\r
+226: ok\r
+225: ok\r
+224: ok\r
+223: ok\r
+222: ok\r
+221: ok\r
+220: ok\r
+219: ok\r
+218: ok\r
+217: ok\r
+216: ok\r
+215: ok\r
+214: ok\r
+213: 73\r
+212: ok\r
+211: ok\r
+210: ok\r
+209: ok\r
+208: 209\r
+207: ok\r
+206: ok\r
+205: ok\r
+204: ok\r
+203: ok\r
+202: ok\r
+201: ok\r
+200: ok\r
+199: ok\r
+198: 199\r
+197: ok\r
+196: ok\r
+195: ok\r
+194: ok\r
+193: ok\r
+192: ok\r
+191: ok\r
+190: ok\r
+189: ok\r
+188: ok\r
+187: ok\r
+186: ok\r
+185: ok\r
+184: ok\r
+183: ok\r
+182: ok\r
+181: ok\r
+180: ok\r
+179: ok\r
+178: ok\r
+177: ok\r
+176: ok\r
+175: ok\r
+174: ok\r
+173: ok\r
+172: ok\r
+171: ok\r
+170: ok\r
+169: ok\r
+168: ok\r
+167: ok\r
+166: ok\r
+165: ok\r
+164: 165\r
+163: 233\r
+162: 224\r
+161: 214\r
+160: 181\r
+159: ok\r
+158: ok\r
+157: ok\r
+156: ok\r
+155: 157\r
+154: ok\r
+153: ok\r
+152: length 0\r
+151: 235\r
+150: 234\r
+149: 227\r
+148: 153\r
+147: 226\r
+146: ok\r
+145: 146\r
+144: ok\r
+143: ok\r
+142: ok\r
+141: 222\r
+140: 215\r
+139: 216\r
+138: 212\r
+137: 211\r
+136: 210\r
+135: 128\r
+134: 143\r
+133: 183\r
+132: 142\r
+131: 182\r
+130: 144\r
+129: 154\r
+128: ok\r
+127: ok\r
+126: ok\r
+125: ok\r
+124: open unlink 0\r
+123: ok\r
+122: 90\r
+121: 89\r
+120: 88\r
+119: 87\r
+118: 86\r
+117: 85\r
+116: 84\r
+115: 83\r
+114: 82\r
+113: 81\r
+112: 80\r
+111: 79\r
+110: 78\r
+109: 77\r
+108: 76\r
+107: 75\r
+106: 74\r
+105: 73\r
+104: 72\r
+103: 71\r
+102: 70\r
+101: 69\r
+100: 68\r
+99: 67\r
+98: 66\r
+97: 65\r
+96: ok\r
+95: ok\r
+94: ok\r
+93: open unlink 0\r
+92: open unlink 0\r
+91: open unlink 0\r
+90: ok\r
+89: ok\r
+88: ok\r
+87: ok\r
+86: ok\r
+85: ok\r
+84: ok\r
+83: ok\r
+82: ok\r
+81: ok\r
+80: ok\r
+79: ok\r
+78: ok\r
+77: ok\r
+76: ok\r
+75: ok\r
+74: ok\r
+73: ok\r
+72: ok\r
+71: ok\r
+70: ok\r
+69: ok\r
+68: ok\r
+67: ok\r
+66: ok\r
+65: ok\r
+64: ok\r
+63: open unlink 0\r
+62: open unlink 0\r
+61: open unlink 0\r
+60: open unlink 0\r
+59: open unlink 0\r
+58: open unlink 0\r
+57: ok\r
+56: ok\r
+55: ok\r
+54: ok\r
+53: ok\r
+52: ok\r
+51: ok\r
+50: ok\r
+49: ok\r
+48: ok\r
+47: open unlink 0\r
+46: open unlink 0\r
+45: ok\r
+44: open unlink 0\r
+43: open unlink 0\r
+42: open unlink 0\r
+41: ok\r
+40: ok\r
+39: ok\r
+38: ok\r
+37: ok\r
+36: ok\r
+35: ok\r
+34: open unlink 0\r
+33: ok\r
+32: open unlink 0\r
+31: open unlink 0\r
+30: open unlink 0\r
+29: open unlink 0\r
+28: open unlink 0\r
+27: open unlink 0\r
+26: open unlink 0\r
+25: open unlink 0\r
+24: open unlink 0\r
+23: open unlink 0\r
+22: open unlink 0\r
+21: open unlink 0\r
+20: open unlink 0\r
+19: open unlink 0\r
+18: open unlink 0\r
+17: open unlink 0\r
+16: open unlink 0\r
+15: open unlink 0\r
+14: open unlink 0\r
+13: open unlink 0\r
+12: open unlink 0\r
+11: open unlink 0\r
+10: open unlink 0\r
+9: open unlink 0\r
+8: open unlink 0\r
+7: open unlink 0\r
+6: open unlink 0\r
+5: open unlink 0\r
+4: open unlink 0\r
+3: open unlink 0\r
+2: open unlink 0\r
+1: open unlink 0\r
+\r
+   valid chars = 73:213 213:73 73:73 33 35 36 37 38 39 40 41 45 48 49 50 51 52 53 54 55 56 57 64 97:65 98:66 99:67 100:68 101:69 102:70 103:71 104:72 105:73 106:74 107:75 108:76 109:77 110:78 111:79 112:80 113:81 114:82 115:83 116:84 117:85 118:86 119:87 120:88 121:89 122:90 94 95 96 123 125 126 127 135:128 132:142 134:143 130:144 145:146 148:153 129:154 156 155:157 158 159 164:165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 160:181 131:182 133:183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198:199 200 201 202 203 204 205 206 207 208:209 136:210 137:211 138:212 161:214 140:215 139:216 217 218 219 220 221 141:222 223 162:224 225 147:226 149:227 228:229 230 231:232 163:233 150:234 151:235 236:237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255\r
diff --git a/examples/validchars/nwdos70.out b/examples/validchars/nwdos70.out
new file mode 100644 (file)
index 0000000..b0dbf62
--- /dev/null
@@ -0,0 +1,257 @@
+255: ok\r
+254: ok\r
+253: ok\r
+252: ok\r
+251: ok\r
+250: ok\r
+249: ok\r
+248: ok\r
+247: ok\r
+246: ok\r
+245: ok\r
+244: ok\r
+243: ok\r
+242: ok\r
+241: ok\r
+240: ok\r
+239: ok\r
+238: ok\r
+237: ok\r
+236: ok\r
+235: ok\r
+234: ok\r
+233: ok\r
+232: ok\r
+231: ok\r
+230: ok\r
+229: ok\r
+228: ok\r
+227: ok\r
+226: ok\r
+225: ok\r
+224: ok\r
+223: ok\r
+222: ok\r
+221: ok\r
+220: ok\r
+219: ok\r
+218: ok\r
+217: ok\r
+216: ok\r
+215: ok\r
+214: ok\r
+213: ok\r
+212: ok\r
+211: ok\r
+210: ok\r
+209: ok\r
+208: ok\r
+207: ok\r
+206: ok\r
+205: ok\r
+204: ok\r
+203: ok\r
+202: ok\r
+201: ok\r
+200: ok\r
+199: ok\r
+198: ok\r
+197: ok\r
+196: ok\r
+195: ok\r
+194: ok\r
+193: ok\r
+192: ok\r
+191: ok\r
+190: ok\r
+189: ok\r
+188: ok\r
+187: ok\r
+186: ok\r
+185: ok\r
+184: ok\r
+183: ok\r
+182: ok\r
+181: ok\r
+180: ok\r
+179: ok\r
+178: ok\r
+177: ok\r
+176: ok\r
+175: ok\r
+174: ok\r
+173: ok\r
+172: ok\r
+171: ok\r
+170: ok\r
+169: ok\r
+168: ok\r
+167: ok\r
+166: ok\r
+165: ok\r
+164: 165\r
+163: 85\r
+162: 79\r
+161: 73\r
+160: 65\r
+159: ok\r
+158: ok\r
+157: ok\r
+156: ok\r
+155: ok\r
+154: ok\r
+153: ok\r
+152: 89\r
+151: 85\r
+150: 85\r
+149: 79\r
+148: 153\r
+147: 79\r
+146: ok\r
+145: 146\r
+144: ok\r
+143: ok\r
+142: ok\r
+141: 73\r
+140: 73\r
+139: 73\r
+138: 69\r
+137: 69\r
+136: 69\r
+135: 128\r
+134: 143\r
+133: 65\r
+132: 142\r
+131: 65\r
+130: 69\r
+129: 154\r
+128: ok\r
+127: ok\r
+126: ok\r
+125: ok\r
+124: open unlink 0\r
+123: ok\r
+122: 90\r
+121: 89\r
+120: 88\r
+119: 87\r
+118: 86\r
+117: 85\r
+116: 84\r
+115: 83\r
+114: 82\r
+113: 81\r
+112: 80\r
+111: 79\r
+110: 78\r
+109: 77\r
+108: 76\r
+107: 75\r
+106: 74\r
+105: 73\r
+104: 72\r
+103: 71\r
+102: 70\r
+101: 69\r
+100: 68\r
+99: 67\r
+98: 66\r
+97: 65\r
+96: ok\r
+95: ok\r
+94: ok\r
+93: open unlink 0\r
+92: open unlink 0\r
+91: open unlink 0\r
+90: ok\r
+89: ok\r
+88: ok\r
+87: ok\r
+86: ok\r
+85: ok\r
+84: ok\r
+83: ok\r
+82: ok\r
+81: ok\r
+80: ok\r
+79: ok\r
+78: ok\r
+77: ok\r
+76: ok\r
+75: ok\r
+74: ok\r
+73: ok\r
+72: ok\r
+71: ok\r
+70: ok\r
+69: ok\r
+68: ok\r
+67: ok\r
+66: ok\r
+65: ok\r
+64: ok\r
+63: open unlink 0\r
+62: open unlink 0\r
+61: open unlink 0\r
+60: open unlink 0\r
+59: open unlink 0\r
+58: open unlink 0\r
+57: ok\r
+56: ok\r
+55: ok\r
+54: ok\r
+53: ok\r
+52: ok\r
+51: ok\r
+50: ok\r
+49: ok\r
+48: ok\r
+47: open unlink 0\r
+46: open unlink 0\r
+45: ok\r
+44: open unlink 0\r
+43: open unlink 0\r
+42: open unlink 0\r
+41: ok\r
+40: ok\r
+39: ok\r
+38: ok\r
+37: ok\r
+36: ok\r
+35: ok\r
+34: open unlink 0\r
+33: ok\r
+32: length 0\r
+31: open unlink 0\r
+30: open unlink 0\r
+29: open unlink 0\r
+28: open unlink 0\r
+27: open unlink 0\r
+26: open unlink 0\r
+25: open unlink 0\r
+24: open unlink 0\r
+23: open unlink 0\r
+22: open unlink 0\r
+21: open unlink 0\r
+20: open unlink 0\r
+19: open unlink 0\r
+18: open unlink 0\r
+17: open unlink 0\r
+16: open unlink 0\r
+15: open unlink 0\r
+14: open unlink 0\r
+13: open unlink 0\r
+12: open unlink 0\r
+11: open unlink 0\r
+10: open unlink 0\r
+9: open unlink 0\r
+8: open unlink 0\r
+7: open unlink 0\r
+6: open unlink 0\r
+5: open unlink 0\r
+4: open unlink 0\r
+3: open unlink 0\r
+2: open unlink 0\r
+1: open unlink 0\r
+\r
+   valid chars = 69:130 130:69 69:69 65:131 131:65 65:65 65:133 133:65 65:65 69:136 136:69 69:69 69:137 137:69 69:69 69:138 138:69 69:69 73:139 139:73 73:73 73:140 140:73 73:73 73:141 141:73 73:73 79:147 147:79 79:79 79:149 149:79 79:79 85:150 150:85 85:85 85:151 151:85 85:85 89:152 152:89 89:89 65:160 160:65 65:65 73:161 161:73 73:73 79:162 162:79 79:79 85:163 163:85 85:85 33 35 36 37 38 39 40 41 45 48 49 50 51 52 53 54 55 56 57 64 97:65 98:66 99:67 100:68 101:69 102:70 103:71 104:72 105:73 106:74 107:75 108:76 109:77 110:78 111:79 112:80 113:81 114:82 115:83 116:84 117:85 118:86 119:87 120:88 121:89 122:90 94 95 96 123 125 126 127 135:128 132:142 134:143 144 145:146 148:153 129:154 155 156 157 158 159 164:165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255\r
diff --git a/examples/validchars/readme b/examples/validchars/readme
new file mode 100644 (file)
index 0000000..6487fbd
--- /dev/null
@@ -0,0 +1,101 @@
+Note: All files in this directory are DOS formatted (CRLF line terminator).\r
+\r
+!!! VIRUS WARNING !!! I do not know if VALIDCHR.COM is virus free !!!\r
+I think that my system is virus free here because I do not run any games\r
+or other copied software. I only run Shareware/Freeware etc. from CD-ROMs\r
+or from registered disks, however I do not use viral scanners because\r
+I have not registered any (I consider `having no sex' is better than\r
+`testing for AIDS on a regular basis', if you know what I mean).\r
+\r
+This is VALIDCHR, a little DOS program I wrote to create\r
+an apropriate `valid chars =' config parameter.\r
+It is freeware and is thought to be distributed freely with Samba.\r
+\r
+WARNING:\r
+       Your SMB driver may use another character map as the one VALIDCHR\r
+       sees. The only way you can tell this is that some file names fail.\r
+       Under Win95 everything is fine, though.\r
+\r
+Usage:\r
+       c:\r
+       mkdir junk_dir\r
+       cd junk_dir\r
+       a:validchr > a:output.log\r
+       cd ..\r
+       rmdir junk_dir\r
+\r
+Siedeffects:\r
+       Files named *.TST may be deleted.\r
+\r
+Verification:\r
+       For diagnostic purpose you can run VALIDCHR on a Samba mounted drive.\r
+       Then you can use unix diff to compare the output of the network and\r
+       the hard drive. These two outputs usually differ! However there\r
+       should be few differences. I get following on Win95 (c: visa e:)\r
+       104c104\r
+       < 152: length 0\r
+       ---\r
+       > 152: 95\r
+       (diff line for `valid chars =' deleted because it's uninteresting)\r
+       You can see, `y diaresis' can be mapped on the network drive while\r
+       it cannot be mapped on the hard drive. Everything else is identical.\r
+       However this gives a hint that one can improve the mapping.\r
+\r
+Bugs:\r
+       Yes, probably some.\r
+\r
+\r
+VALIDCHR must be run on the system which character mapping should be probed.\r
+It must be run on the hard drive for this. VALIDCHR ALTERS THE CURRENT\r
+DIRECTORY AND REMOVES SOME FILES, SO ALWAYS RUN IT IN A junk DIRECTORY !!!\r
+You should redirect the output of VALIDCHR. At the end of the output is a\r
+line like\r
+   valid chars = x:y y:x x:x ... a:b c ...\r
+which is suitable for your smb.conf file. (you should remove the DOS CR\r
+character, because DOS uses CRLF while Unix uses LF only.)\r
+\r
+Note that some mappings at the beginning of the `valid chars =' line like\r
+A:B B:A B:B\r
+might look a little bit strange to you, however sometimes character A\r
+has to be mapped to character B independently of a default mapping\r
+to uppercase or lowercase while character B must not be touched. I found\r
+this out the hard way ... Consider it a crude workaround, because Samba\r
+lacks the possibility to map characters in one direction only!\r
+\r
+VALIDCHR usually issues one warning for character 32.\r
+You may ignore these and any other warnings.\r
+\r
+VALIDCHR does not test for character NUL (this is the directory end marker).\r
+\r
+validchr.c is the source code to validchr.com\r
+       You may do anything with the source code (copy, change, sell, burn)\r
+validchr.com is a Borland C compiled binary.\r
+       Beware, it may contain a virus (if my system contains one).\r
+nwdos70.out is the output of an VALIDCHR-run under Novell DOS 7.0\r
+       while no codepage (no display.sys) was active.\r
+msdos70.out is the output of an VALIDCHR-run under MS-DOS 7.0 (Win95 DOS)\r
+       while codepage 850 was active.\r
+\r
+I have no other MS-DOS systems at home currently.\r
+(I have access to MS-DOS 3.0, 3.2, 3.3, 5.0 and 6.22, however I have no time\r
+ to run VALIDCHR there)\r
+\r
+Some words to the output\r
+(for people not fammiliar with programming language C):\r
+\r
+probed_char:   [text] mapped_char\r
+\r
+probed_char    is the character probed to be written to disk\r
+text           may be empty or contain:\r
+               open    File could not be opened.\r
+               close   File could not be closed (should not happen)\r
+               length  File name was shortened (usually occurs on SPC) \r
+               unlink  File cannot be unlinked (usually when open fails)\r
+mapped_char    is the character which is used by MS-DOS in the directory\r
+               This is usually the uppercase character.\r
+               The mapped character is 0 if something failed (you may say\r
+               that the character is not supported)\r
+\r
+The last line in the output is documented in the smb.conf manual page ;)\r
+\r
+tino@augsburg.net\r
diff --git a/examples/validchars/validchr.c b/examples/validchars/validchr.c
new file mode 100644 (file)
index 0000000..415546c
--- /dev/null
@@ -0,0 +1,123 @@
+/* by tino@augsburg.net\r
+ */\r
+\r
+#include <stdio.h>\r
+#include <string.h>\r
+\r
+#include <dirent.h>\r
+\r
+unsigned char\r
+test(void)\r
+{\r
+  DIR          *dir;\r
+  struct dirent        *dp;\r
+  unsigned char        c;\r
+\r
+  if ((dir=opendir("."))==0)\r
+    {\r
+      perror("open .");\r
+      return 0;\r
+    }\r
+  c    = 0;\r
+  while ((dp=readdir(dir))!=0)\r
+    {\r
+      size_t len;\r
+\r
+      len      = strlen(dp->d_name);\r
+      if (len<4)\r
+       continue;\r
+      if (strcmp(dp->d_name+len-4, ".TST"))\r
+       continue;\r
+      if (len!=5)\r
+       {\r
+         fprintf(stderr, "warning: %s\n", dp->d_name);\r
+         printf(" length");\r
+         continue;\r
+       }\r
+      if (c)\r
+       printf(" double%d\n", c);\r
+      c        = dp->d_name[0];\r
+    }\r
+  if (closedir(dir))\r
+    perror("close .");\r
+  return c;\r
+}\r
+\r
+int\r
+main(void)\r
+{\r
+  char         name[256];\r
+  unsigned char        map[256], upper[256], lower[256];\r
+  int          i, j, c;\r
+  FILE         *fd;\r
+\r
+  if (test())\r
+    {\r
+      printf("There are *.TST files, please remove\n");\r
+      return 0;\r
+    }\r
+  for (i=0; ++i<256; )\r
+    {\r
+      lower[i] = i;\r
+      upper[i] = 0;\r
+    }\r
+  for (i=256; --i; )\r
+    {\r
+      map[i]   = i;\r
+      strcpy(name, "..TST");\r
+      name[0]  = i;\r
+      printf("%d:", i);\r
+      if ((fd=fopen(name, "w"))==0)\r
+       printf(" open");\r
+      else\r
+       fclose(fd);\r
+      c        = test();\r
+      if (unlink(name))\r
+       printf(" unlink");\r
+      if (c==i)\r
+       printf(" ok");\r
+      else\r
+       printf(" %d", c);\r
+      printf("\n");\r
+      if (c!=i)\r
+       {\r
+         upper[c]++;\r
+         lower[c]      = i;\r
+        }\r
+      map[i]   = c;\r
+    }\r
+\r
+  /* Uppercase characters are detected above on:\r
+   * The character is mapped to itself and there is a\r
+   * character which maps to it.\r
+   * Lowercase characters are the lowest character pointing to another one.\r
+   * Else it is a one way character.\r
+   *\r
+   * For this reason we have to process the list\r
+   * 1) for 'one way' characters\r
+   *   'one way' is something which is no upper and no lower character.\r
+   *   This is an awful, crude and ugly hack due to missing Samba support.\r
+   * 2) for true uppercase/lowercase characters\r
+   * 3) for standalone characters\r
+   * Note that there might be characters which do not fall into 1 to 3.\r
+   */\r
+  printf("\n   valid chars =");\r
+  for (i=0; ++i<256; )\r
+    if (map[i] && map[i]!=i && lower[map[i]]!=i)\r
+      {\r
+       if (!upper[i])\r
+         printf(" %d:%d %d:%d %d:%d",                                  /*1*/\r
+                map[i], i, i, map[i], map[i], map[i]);\r
+       else\r
+         fprintf(stderr, "ignoring map %d->%d because of %d->%d\n",\r
+                 lower[i], i, i, map[i]);\r
+      }\r
+  for (i=0; ++i<256; )\r
+    if (map[i] && map[i]==i)\r
+      if (upper[i])\r
+       printf(" %d:%d", lower[i], i);                                  /*2*/\r
+      else\r
+       printf(" %d", i);                                               /*3*/\r
+  printf("\n");\r
+  return 0;\r
+}\r
diff --git a/examples/validchars/validchr.com b/examples/validchars/validchr.com
new file mode 100644 (file)
index 0000000..ce15956
Binary files /dev/null and b/examples/validchars/validchr.com differ