00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021 #include "includes.h"
00022
00023 BOOL torture_utable(int dummy)
00024 {
00025 struct cli_state *cli;
00026 fstring fname, alt_name;
00027 int fnum;
00028 smb_ucs2_t c2;
00029 int c, len, fd;
00030 int chars_allowed=0, alt_allowed=0;
00031 uint8 valid[0x10000];
00032
00033 printf("starting utable\n");
00034
00035 if (!torture_open_connection(&cli, 0)) {
00036 return False;
00037 }
00038
00039 memset(valid, 0, sizeof(valid));
00040
00041 cli_mkdir(cli, "\\utable");
00042 cli_unlink(cli, "\\utable\\*");
00043
00044 for (c=1; c < 0x10000; c++) {
00045 char *p;
00046
00047 SSVAL(&c2, 0, c);
00048 fstrcpy(fname, "\\utable\\x");
00049 p = fname+strlen(fname);
00050 len = convert_string(CH_UTF16LE, CH_UNIX,
00051 &c2, 2,
00052 p, sizeof(fname)-strlen(fname), True);
00053 p[len] = 0;
00054 fstrcat(fname,"_a_long_extension");
00055
00056 fnum = cli_open(cli, fname, O_RDWR | O_CREAT | O_TRUNC,
00057 DENY_NONE);
00058 if (fnum == -1) continue;
00059
00060 chars_allowed++;
00061
00062 cli_qpathinfo_alt_name(cli, fname, alt_name);
00063
00064 if (strncmp(alt_name, "X_A_L", 5) != 0) {
00065 alt_allowed++;
00066 valid[c] = 1;
00067 d_printf("fname=[%s] alt_name=[%s]\n", fname, alt_name);
00068 }
00069
00070 cli_close(cli, fnum);
00071 cli_unlink(cli, fname);
00072
00073 if (c % 100 == 0) {
00074 printf("%d (%d/%d)\r", c, chars_allowed, alt_allowed);
00075 }
00076 }
00077 printf("%d (%d/%d)\n", c, chars_allowed, alt_allowed);
00078
00079 cli_rmdir(cli, "\\utable");
00080
00081 d_printf("%d chars allowed %d alt chars allowed\n", chars_allowed, alt_allowed);
00082
00083 fd = open("valid.dat", O_WRONLY|O_CREAT|O_TRUNC, 0644);
00084 if (fd == -1) {
00085 d_printf("Failed to create valid.dat - %s", strerror(errno));
00086 return False;
00087 }
00088 write(fd, valid, 0x10000);
00089 close(fd);
00090 d_printf("wrote valid.dat\n");
00091
00092 return True;
00093 }
00094
00095
00096 static char *form_name(int c)
00097 {
00098 static fstring fname;
00099 smb_ucs2_t c2;
00100 char *p;
00101 int len;
00102
00103 fstrcpy(fname, "\\utable\\");
00104 p = fname+strlen(fname);
00105 SSVAL(&c2, 0, c);
00106
00107 len = convert_string(CH_UTF16LE, CH_UNIX,
00108 &c2, 2,
00109 p, sizeof(fname)-strlen(fname), True);
00110 p[len] = 0;
00111 return fname;
00112 }
00113
00114 BOOL torture_casetable(int dummy)
00115 {
00116 static struct cli_state *cli;
00117 char *fname;
00118 int fnum;
00119 int c, i;
00120 #define MAX_EQUIVALENCE 8
00121 smb_ucs2_t equiv[0x10000][MAX_EQUIVALENCE];
00122 printf("starting casetable\n");
00123
00124 if (!torture_open_connection(&cli, 0)) {
00125 return False;
00126 }
00127
00128 memset(equiv, 0, sizeof(equiv));
00129
00130 cli_unlink(cli, "\\utable\\*");
00131 cli_rmdir(cli, "\\utable");
00132 if (!cli_mkdir(cli, "\\utable")) {
00133 printf("Failed to create utable directory!\n");
00134 return False;
00135 }
00136
00137 for (c=1; c < 0x10000; c++) {
00138 SMB_OFF_T size;
00139
00140 if (c == '.' || c == '\\') continue;
00141
00142 printf("%04x (%c)\n", c, isprint(c)?c:'.');
00143
00144 fname = form_name(c);
00145 fnum = cli_nt_create_full(cli, fname, 0,
00146 GENERIC_ALL_ACCESS,
00147 FILE_ATTRIBUTE_NORMAL,
00148 FILE_SHARE_NONE,
00149 FILE_OPEN_IF, 0, 0);
00150
00151 if (fnum == -1) {
00152 printf("Failed to create file with char %04x\n", c);
00153 continue;
00154 }
00155
00156 size = 0;
00157
00158 if (!cli_qfileinfo(cli, fnum, NULL, &size,
00159 NULL, NULL, NULL, NULL, NULL)) continue;
00160
00161 if (size > 0) {
00162
00163 int c2[MAX_EQUIVALENCE];
00164
00165 if (size/sizeof(int) >= MAX_EQUIVALENCE) {
00166 printf("too many chars match?? size=%ld c=0x%04x\n",
00167 (unsigned long)size, c);
00168 cli_close(cli, fnum);
00169 return False;
00170 }
00171
00172 cli_read(cli, fnum, (char *)c2, 0, size);
00173 printf("%04x: ", c);
00174 equiv[c][0] = c;
00175 for (i=0; i<size/sizeof(int); i++) {
00176 printf("%04x ", c2[i]);
00177 equiv[c][i+1] = c2[i];
00178 }
00179 printf("\n");
00180 fflush(stdout);
00181 }
00182
00183 cli_write(cli, fnum, 0, (char *)&c, size, sizeof(c));
00184 cli_close(cli, fnum);
00185 }
00186
00187 cli_unlink(cli, "\\utable\\*");
00188 cli_rmdir(cli, "\\utable");
00189
00190 return True;
00191 }