関数 | |
BOOL | torture_utable (int dummy) |
static char * | form_name (int c) |
BOOL | torture_casetable (int dummy) |
BOOL torture_utable | ( | int | dummy | ) |
参照先 c・CH_UNIX・CH_UTF16LE・cli・cli_close()・cli_mkdir()・cli_open()・cli_qpathinfo_alt_name()・cli_rmdir()・cli_unlink()・convert_string()・d_printf()・errno・fd・len・printf()・strerror()・torture_open_connection()・valid.
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 }
static char* form_name | ( | int | c | ) | [static] |
参照先 CH_UNIX・CH_UTF16LE・convert_string()・len.
参照元 _spoolss_deleteform()・_spoolss_getform()・add_a_form()・delete_a_form()・display_form()・get_a_builtin_ntform()・rpc_printer_migrate_forms_internals()・spoolss_hnd_addform()・spoolss_hnd_deleteform()・spoolss_hnd_getform()・spoolss_hnd_setform()・torture_casetable()・update_a_form().
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 }
BOOL torture_casetable | ( | int | dummy | ) |
参照先 c・cli・cli_close()・cli_mkdir()・cli_nt_create_full()・cli_qfileinfo()・cli_read()・cli_rmdir()・cli_unlink()・cli_write()・form_name()・printf()・size・torture_open_connection().
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 /* found a character equivalence! */ 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 }