From 8dfc8b695ae3b17aa41ffca18c19d5b8042cdae7 Mon Sep 17 00:00:00 2001 From: Olaf Barthel Date: Sun, 17 Apr 2016 11:43:42 +0200 Subject: [PATCH] SMB decoder output can now be stored in a file and does not have to go to stdout. Added DUMPSMBLEVEL option which controls how much raw data output is produced. By default (level 0) no raw data output is produced at all. Level 1 will print the contents of the command data area. Level 2 will print the raw data used by the respective commands, with any management/control information stripped off. --- source_code/dump_smb.c | 1138 +++++++++++++++++++++------------------- source_code/dump_smb.h | 2 +- 2 files changed, 600 insertions(+), 540 deletions(-) diff --git a/source_code/dump_smb.c b/source_code/dump_smb.c index 02c896e..971e7e9 100644 --- a/source_code/dump_smb.c +++ b/source_code/dump_smb.c @@ -47,6 +47,15 @@ extern VOID VARARGS68K SPrintf(STRPTR buffer, STRPTR formatString,...); /* This can be used to enable or disable the SMB packet dump output. */ static int dump_smb_enabled; +/* This is for controlling how much output is produced. Higher + * numbers yield more output. + */ +static int dump_smb_level; + +/* This is where the output should go. It could be a file. */ +static BPTR dump_smb_file; +static BOOL dump_smb_stdout; + /*****************************************************************************/ /* This keeps track of which SMB_COM_TRANSACTION2 subcommand was last @@ -517,7 +526,7 @@ print_smb_data(struct line_buffer * lb,int num_data_bytes_left,const unsigned ch if(dword_buffer_len > 0) copy_string_to_line_buffer(lb,dword_buffer,dword_buffer_len,dword_pos); - Printf(" %s\n",lb->line); + FPrintf(dump_smb_file," %s\n",lb->line); } } } @@ -668,76 +677,76 @@ print_smb_transaction2_subcommand(int command,enum smb_packet_source_t smb_packe int offset = 0; search_attributes = next_data_word(parameters,&offset); - Printf("search attributes = 0x%04lx\n",search_attributes); + FPrintf(dump_smb_file,"search attributes = 0x%04lx\n",search_attributes); if(search_attributes & 0x0100) - Printf(" SMB_SEARCH_ATTRIBUTE_READONLY\n"); + FPrintf(dump_smb_file," SMB_SEARCH_ATTRIBUTE_READONLY\n"); if(search_attributes & 0x0200) - Printf(" SMB_SEARCH_ATTRIBUTE_HIDDEN\n"); + FPrintf(dump_smb_file," SMB_SEARCH_ATTRIBUTE_HIDDEN\n"); if(search_attributes & 0x0400) - Printf(" SMB_SEARCH_ATTRIBUTE_SYSTEM\n"); + FPrintf(dump_smb_file," SMB_SEARCH_ATTRIBUTE_SYSTEM\n"); if(search_attributes & 0x1000) - Printf(" SMB_SEARCH_ATTRIBUTE_DIRECTORY\n"); + FPrintf(dump_smb_file," SMB_SEARCH_ATTRIBUTE_DIRECTORY\n"); if(search_attributes & 0x2000) - Printf(" SMB_SEARCH_ATTRIBUTE_ARCHIVE\n"); + FPrintf(dump_smb_file," SMB_SEARCH_ATTRIBUTE_ARCHIVE\n"); search_count = next_data_word(parameters,&offset); - Printf("search count = %ld\n",search_count); + FPrintf(dump_smb_file,"search count = %ld\n",search_count); flags = next_data_word(parameters,&offset); - Printf("flags = 0x%04lx\n",flags); + FPrintf(dump_smb_file,"flags = 0x%04lx\n",flags); if(flags & 0x0001) - Printf(" SMB_FIND_CLOSE_AFTER_REQUEST\n"); + FPrintf(dump_smb_file," SMB_FIND_CLOSE_AFTER_REQUEST\n"); if(flags & 0x0002) - Printf(" SMB_FIND_CLOSE_AT_EOS\n"); + FPrintf(dump_smb_file," SMB_FIND_CLOSE_AT_EOS\n"); if(flags & 0x0004) - Printf(" SMB_FIND_RETURN_RESUME_KEYS\n"); + FPrintf(dump_smb_file," SMB_FIND_RETURN_RESUME_KEYS\n"); if(flags & 0x0008) - Printf(" SMB_FIND_CONTINUE_FROM_LAST\n"); + FPrintf(dump_smb_file," SMB_FIND_CONTINUE_FROM_LAST\n"); if(flags & 0x0010) - Printf(" SMB_FIND_WITH_BACKUP_INTENT\n"); + FPrintf(dump_smb_file," SMB_FIND_WITH_BACKUP_INTENT\n"); information_level = next_data_word(parameters,&offset); - Printf("information level = 0x%04lx\n",information_level); + FPrintf(dump_smb_file,"information level = 0x%04lx\n",information_level); last_trans2_find_information_level = information_level; if (information_level == 0x0001) - Printf(" SMB_INFO_STANDARD\n"); + FPrintf(dump_smb_file," SMB_INFO_STANDARD\n"); else if (information_level == 0x0002) - Printf(" SMB_INFO_QUERY_EA_SIZE\n"); + FPrintf(dump_smb_file," SMB_INFO_QUERY_EA_SIZE\n"); else if (information_level == 0x0003) - Printf(" SMB_INFO_QUERY_EAS_FROM_LIST\n"); + FPrintf(dump_smb_file," SMB_INFO_QUERY_EAS_FROM_LIST\n"); else if (information_level == 0x0101) - Printf(" SMB_FIND_FILE_DIRECTORY_INFO\n"); + FPrintf(dump_smb_file," SMB_FIND_FILE_DIRECTORY_INFO\n"); else if (information_level == 0x0102) - Printf(" SMB_FIND_FILE_FULL_DIRECTORY_INFO\n"); + FPrintf(dump_smb_file," SMB_FIND_FILE_FULL_DIRECTORY_INFO\n"); else if (information_level == 0x0103) - Printf(" SMB_FIND_FILE_NAMES_INFO\n"); + FPrintf(dump_smb_file," SMB_FIND_FILE_NAMES_INFO\n"); else if (information_level == 0x0104) - Printf(" SMB_FIND_FILE_BOTH_DIRECTORY_INFO\n"); + FPrintf(dump_smb_file," SMB_FIND_FILE_BOTH_DIRECTORY_INFO\n"); search_storage_type = next_data_dword(parameters,&offset); - Printf("search_storage_type = 0x%08lx\n",search_storage_type); + FPrintf(dump_smb_file,"search_storage_type = 0x%08lx\n",search_storage_type); if(search_storage_type == 0x00000001) - Printf(" FILE_DIRECTORY_ONLY\n"); + FPrintf(dump_smb_file," FILE_DIRECTORY_ONLY\n"); if(search_storage_type == 0x00000040) - Printf(" FILE_NON_DIRECTORY_FILE\n"); + FPrintf(dump_smb_file," FILE_NON_DIRECTORY_FILE\n"); file_name = next_data_bytes(parameters,0,&offset); - Printf("file name = '%s'\n",file_name); + FPrintf(dump_smb_file,"file name = '%s'\n",file_name); /* ZZZ need to deal with the 'data' provided if * information_level == SMB_INFO_QUERY_EAS_FROM_LIST. @@ -755,55 +764,55 @@ print_smb_transaction2_subcommand(int command,enum smb_packet_source_t smb_packe sid = next_data_word(parameters,&offset); - Printf("sid = 0x%04lx\n",sid); + FPrintf(dump_smb_file,"sid = 0x%04lx\n",sid); search_count = next_data_word(parameters,&offset); - Printf("search count = %ld\n",search_count); + FPrintf(dump_smb_file,"search count = %ld\n",search_count); information_level = next_data_word(parameters,&offset); - Printf("information level = 0x%04lx\n",information_level); + FPrintf(dump_smb_file,"information level = 0x%04lx\n",information_level); last_trans2_find_information_level = information_level; if (information_level == 0x0001) - Printf(" SMB_INFO_STANDARD\n"); + FPrintf(dump_smb_file," SMB_INFO_STANDARD\n"); else if (information_level == 0x0002) - Printf(" SMB_INFO_QUERY_EA_SIZE\n"); + FPrintf(dump_smb_file," SMB_INFO_QUERY_EA_SIZE\n"); else if (information_level == 0x0003) - Printf(" SMB_INFO_QUERY_EAS_FROM_LIST\n"); + FPrintf(dump_smb_file," SMB_INFO_QUERY_EAS_FROM_LIST\n"); else if (information_level == 0x0101) - Printf(" SMB_FIND_FILE_DIRECTORY_INFO\n"); + FPrintf(dump_smb_file," SMB_FIND_FILE_DIRECTORY_INFO\n"); else if (information_level == 0x0102) - Printf(" SMB_FIND_FILE_FULL_DIRECTORY_INFO\n"); + FPrintf(dump_smb_file," SMB_FIND_FILE_FULL_DIRECTORY_INFO\n"); else if (information_level == 0x0103) - Printf(" SMB_FIND_FILE_NAMES_INFO\n"); + FPrintf(dump_smb_file," SMB_FIND_FILE_NAMES_INFO\n"); else if (information_level == 0x0104) - Printf(" SMB_FIND_FILE_BOTH_DIRECTORY_INFO\n"); + FPrintf(dump_smb_file," SMB_FIND_FILE_BOTH_DIRECTORY_INFO\n"); resume_key = next_data_dword(parameters,&offset); - Printf("resume_key = 0x%08lx\n",resume_key); + FPrintf(dump_smb_file,"resume_key = 0x%08lx\n",resume_key); flags = next_data_word(parameters,&offset); - Printf("flags = 0x%04lx\n",flags); + FPrintf(dump_smb_file,"flags = 0x%04lx\n",flags); if(flags & 0x0001) - Printf(" SMB_FIND_CLOSE_AFTER_REQUEST\n"); + FPrintf(dump_smb_file," SMB_FIND_CLOSE_AFTER_REQUEST\n"); if(flags & 0x0002) - Printf(" SMB_FIND_CLOSE_AT_EOS\n"); + FPrintf(dump_smb_file," SMB_FIND_CLOSE_AT_EOS\n"); if(flags & 0x0004) - Printf(" SMB_FIND_RETURN_RESUME_KEYS\n"); + FPrintf(dump_smb_file," SMB_FIND_RETURN_RESUME_KEYS\n"); if(flags & 0x0008) - Printf(" SMB_FIND_CONTINUE_FROM_LAST\n"); + FPrintf(dump_smb_file," SMB_FIND_CONTINUE_FROM_LAST\n"); if(flags & 0x0010) - Printf(" SMB_FIND_WITH_BACKUP_INTENT\n"); + FPrintf(dump_smb_file," SMB_FIND_WITH_BACKUP_INTENT\n"); file_name = next_data_bytes(parameters,0,&offset); - Printf("file name = '%s'\n",file_name); + FPrintf(dump_smb_file,"file name = '%s'\n",file_name); /* ZZZ need to deal with the 'data' provided if * information_level == SMB_INFO_QUERY_EAS_FROM_LIST. @@ -821,20 +830,20 @@ print_smb_transaction2_subcommand(int command,enum smb_packet_source_t smb_packe if(command == TRANS2_FIND_FIRST2) { sid = next_data_word(parameters,&offset); - Printf("sid = %ld\n",sid); + FPrintf(dump_smb_file,"sid = %ld\n",sid); } search_count = next_data_word(parameters,&offset); - Printf("search count = %ld\n",search_count); + FPrintf(dump_smb_file,"search count = %ld\n",search_count); end_of_search = next_data_word(parameters,&offset); - Printf("end of search = 0x%04lx\n",end_of_search); + FPrintf(dump_smb_file,"end of search = 0x%04lx\n",end_of_search); ea_error_offset = next_data_word(parameters,&offset); - Printf("ea error offset = 0x%04lx\n",ea_error_offset); + FPrintf(dump_smb_file,"ea error offset = 0x%04lx\n",ea_error_offset); last_name_offset = next_data_word(parameters,&offset); - Printf("last name offset = 0x%04lx\n",last_name_offset); + FPrintf(dump_smb_file,"last name offset = 0x%04lx\n",last_name_offset); /* SMB_FIND_FILE_BOTH_DIRECTORY_INFO */ if(num_data_bytes > 0 && last_trans2_find_information_level == 0x0104) @@ -864,7 +873,7 @@ print_smb_transaction2_subcommand(int command,enum smb_packet_source_t smb_packe while(entry_offset < num_data_bytes && entry_count < search_count) { - Printf("directory entry [%ld]:\n",entry_count++); + FPrintf(dump_smb_file,"directory entry [%ld]:\n",entry_count++); next_offset = entry_offset; @@ -887,68 +896,68 @@ print_smb_transaction2_subcommand(int command,enum smb_packet_source_t smb_packe short_name = next_data_bytes(data,24,&entry_offset); file_name = next_data_bytes(data,0,&entry_offset); - Printf("\tnext entry offset = %ld\n",next_entry_offset); - Printf("\tfile index = 0x%08lx\n",file_index); - Printf("\tcreation time = 0x%08lx%08lx\n",creation_time[0],creation_time[1]); /* ZZZ this is actually a signed value */ - Printf("\t %s\n",convert_filetime_to_string(creation_time)); - Printf("\tlast access time = 0x%08lx%08lx\n",last_access_time[0],last_access_time[1]); - Printf("\t %s\n",convert_filetime_to_string(last_access_time)); - Printf("\tlast change time = 0x%08lx%08lx\n",last_change_time[0],last_change_time[1]); - Printf("\t %s\n",convert_filetime_to_string(last_change_time)); - Printf("\tend of file = %ls (0x%08lx%08lx)\n",convert_qword_to_string(end_of_file),end_of_file[0],end_of_file[1]); - Printf("\tallocation size = %s (0x%08lx%08lx)\n",convert_qword_to_string(allocation_size),allocation_size[0],allocation_size[1]); + FPrintf(dump_smb_file,"\tnext entry offset = %ld\n",next_entry_offset); + FPrintf(dump_smb_file,"\tfile index = 0x%08lx\n",file_index); + FPrintf(dump_smb_file,"\tcreation time = 0x%08lx%08lx\n",creation_time[0],creation_time[1]); /* ZZZ this is actually a signed value */ + FPrintf(dump_smb_file,"\t %s\n",convert_filetime_to_string(creation_time)); + FPrintf(dump_smb_file,"\tlast access time = 0x%08lx%08lx\n",last_access_time[0],last_access_time[1]); + FPrintf(dump_smb_file,"\t %s\n",convert_filetime_to_string(last_access_time)); + FPrintf(dump_smb_file,"\tlast change time = 0x%08lx%08lx\n",last_change_time[0],last_change_time[1]); + FPrintf(dump_smb_file,"\t %s\n",convert_filetime_to_string(last_change_time)); + FPrintf(dump_smb_file,"\tend of file = %ls (0x%08lx%08lx)\n",convert_qword_to_string(end_of_file),end_of_file[0],end_of_file[1]); + FPrintf(dump_smb_file,"\tallocation size = %s (0x%08lx%08lx)\n",convert_qword_to_string(allocation_size),allocation_size[0],allocation_size[1]); - Printf("\text file attributes = 0x%08lx\n",ext_file_attributes); + FPrintf(dump_smb_file,"\text file attributes = 0x%08lx\n",ext_file_attributes); if(ext_file_attributes & 0x00000001) - Printf("\t ATTR_READONLY\n"); + FPrintf(dump_smb_file,"\t ATTR_READONLY\n"); if(ext_file_attributes & 0x00000002) - Printf("\t ATTR_HIDDEN\n"); + FPrintf(dump_smb_file,"\t ATTR_HIDDEN\n"); if(ext_file_attributes & 0x00000004) - Printf("\t ATTR_SYSTEM\n"); + FPrintf(dump_smb_file,"\t ATTR_SYSTEM\n"); if(ext_file_attributes & 0x00000010) - Printf("\t ATTR_DIRECTORY\n"); + FPrintf(dump_smb_file,"\t ATTR_DIRECTORY\n"); if(ext_file_attributes & 0x00000020) - Printf("\t ATTR_ARCHIVE\n"); + FPrintf(dump_smb_file,"\t ATTR_ARCHIVE\n"); if(ext_file_attributes & 0x00000080) - Printf("\t ATTR_NORMAL\n"); + FPrintf(dump_smb_file,"\t ATTR_NORMAL\n"); if(ext_file_attributes & 0x00000100) - Printf("\t ATTR_TEMPORARY\n"); + FPrintf(dump_smb_file,"\t ATTR_TEMPORARY\n"); if(ext_file_attributes & 0x00000800) - Printf("\t ATTR_COMPRESSED\n"); + FPrintf(dump_smb_file,"\t ATTR_COMPRESSED\n"); if(ext_file_attributes & 0x01000000) - Printf("\t POSIX_SEMANTICS\n"); + FPrintf(dump_smb_file,"\t POSIX_SEMANTICS\n"); if(ext_file_attributes & 0x02000000) - Printf("\t BACKUP_SEMANTICS\n"); + FPrintf(dump_smb_file,"\t BACKUP_SEMANTICS\n"); if(ext_file_attributes & 0x04000000) - Printf("\t DELETE_ON_CLOSE\n"); + FPrintf(dump_smb_file,"\t DELETE_ON_CLOSE\n"); if(ext_file_attributes & 0x08000000) - Printf("\t SEQUENTIAL_SCAN\n"); + FPrintf(dump_smb_file,"\t SEQUENTIAL_SCAN\n"); if(ext_file_attributes & 0x10000000) - Printf("\t RANDOM_ACCESS\n"); + FPrintf(dump_smb_file,"\t RANDOM_ACCESS\n"); if(ext_file_attributes & 0x20000000) - Printf("\t NO_BUFFERING\n"); + FPrintf(dump_smb_file,"\t NO_BUFFERING\n"); if(ext_file_attributes & 0x80000000) - Printf("\t WRITE_THROUGH\n"); + FPrintf(dump_smb_file,"\t WRITE_THROUGH\n"); - Printf("\tfile name length = %ld\n",file_name_length); - Printf("\tea size = %ld\n",ea_size); - Printf("\tshort name length = %ld\n",short_name_length); - Printf("\treserved = 0x%02lx\n",reserved); + FPrintf(dump_smb_file,"\tfile name length = %ld\n",file_name_length); + FPrintf(dump_smb_file,"\tea size = %ld\n",ea_size); + FPrintf(dump_smb_file,"\tshort name length = %ld\n",short_name_length); + FPrintf(dump_smb_file,"\treserved = 0x%02lx\n",reserved); if(short_name_length > 0) { @@ -980,11 +989,11 @@ print_smb_transaction2_subcommand(int command,enum smb_packet_source_t smb_packe } } - Printf("\tshort name = '%s'\n",lb.line); + FPrintf(dump_smb_file,"\tshort name = '%s'\n",lb.line); } if(file_name_length > 0) - Printf("\tfile name = '%s'\n",file_name); + FPrintf(dump_smb_file,"\tfile name = '%s'\n",file_name); entry_offset = next_offset; } @@ -1009,7 +1018,7 @@ print_smb_transaction2_subcommand(int command,enum smb_packet_source_t smb_packe while(entry_offset < num_data_bytes && entry_count < search_count) { - Printf("directory entry [%ld]:\n",entry_count++); + FPrintf(dump_smb_file,"directory entry [%ld]:\n",entry_count++); resume_key = next_data_dword(data,&entry_offset); creation_date = next_data_word(data,&entry_offset); @@ -1024,43 +1033,43 @@ print_smb_transaction2_subcommand(int command,enum smb_packet_source_t smb_packe file_name_length = next_data_byte(data,&entry_offset); file_name = (char *)next_data_bytes(data,file_name_length,&entry_offset); - Printf("\tresume key = 0x%08lx\n",resume_key); - Printf("\tcreation date = 0x%04lx\n",creation_date); - Printf("\tcreation time = 0x%04lx\n",creation_time); - Printf("\tcreation = %s\n",convert_smb_date_time_to_string(creation_date,creation_time)); - Printf("\tlast access date = 0x%04lx\n",last_access_date); - Printf("\tlast access time = 0x%04lx\n",last_access_time); - Printf("\tlast access = %s\n",convert_smb_date_time_to_string(last_access_date,last_access_time)); - Printf("\tlast write date = 0x%04lx\n",last_write_date); - Printf("\tlast write time = 0x%04lx\n",last_write_time); - Printf("\tlast write = %s\n",convert_smb_date_time_to_string(last_write_date,last_write_time)); - Printf("\tfile data size = %lu\n",file_data_size); - Printf("\tallocation size = %lu\n",allocation_size); - Printf("\tfile attributes = 0x%08lx\n",file_attributes); + FPrintf(dump_smb_file,"\tresume key = 0x%08lx\n",resume_key); + FPrintf(dump_smb_file,"\tcreation date = 0x%04lx\n",creation_date); + FPrintf(dump_smb_file,"\tcreation time = 0x%04lx\n",creation_time); + FPrintf(dump_smb_file,"\tcreation = %s\n",convert_smb_date_time_to_string(creation_date,creation_time)); + FPrintf(dump_smb_file,"\tlast access date = 0x%04lx\n",last_access_date); + FPrintf(dump_smb_file,"\tlast access time = 0x%04lx\n",last_access_time); + FPrintf(dump_smb_file,"\tlast access = %s\n",convert_smb_date_time_to_string(last_access_date,last_access_time)); + FPrintf(dump_smb_file,"\tlast write date = 0x%04lx\n",last_write_date); + FPrintf(dump_smb_file,"\tlast write time = 0x%04lx\n",last_write_time); + FPrintf(dump_smb_file,"\tlast write = %s\n",convert_smb_date_time_to_string(last_write_date,last_write_time)); + FPrintf(dump_smb_file,"\tfile data size = %lu\n",file_data_size); + FPrintf(dump_smb_file,"\tallocation size = %lu\n",allocation_size); + FPrintf(dump_smb_file,"\tfile attributes = 0x%08lx\n",file_attributes); if((file_attributes & 0x001f) == 0) - Printf("\t SMB_FILE_ATTRIBUTE_NORMAL\n"); + FPrintf(dump_smb_file,"\t SMB_FILE_ATTRIBUTE_NORMAL\n"); if(file_attributes & 0x0001) - Printf("\t SMB_FILE_ATTRIBUTE_READ_ONLY\n"); + FPrintf(dump_smb_file,"\t SMB_FILE_ATTRIBUTE_READ_ONLY\n"); if(file_attributes & 0x0002) - Printf("\t SMB_FILE_ATTRIBUTE_HIDDEN\n"); + FPrintf(dump_smb_file,"\t SMB_FILE_ATTRIBUTE_HIDDEN\n"); if(file_attributes & 0x0004) - Printf("\t SMB_FILE_ATTRIBUTE_SYSTEM\n"); + FPrintf(dump_smb_file,"\t SMB_FILE_ATTRIBUTE_SYSTEM\n"); if(file_attributes & 0x0008) - Printf("\t SMB_FILE_ATTRIBUTE_VOLUME\n"); + FPrintf(dump_smb_file,"\t SMB_FILE_ATTRIBUTE_VOLUME\n"); if(file_attributes & 0x0010) - Printf("\t SMB_FILE_ATTRIBUTE_DIRECTORY\n"); + FPrintf(dump_smb_file,"\t SMB_FILE_ATTRIBUTE_DIRECTORY\n"); if(file_attributes & 0x0020) - Printf("\t SMB_FILE_ATTRIBUTE_ARCHIVE\n"); + FPrintf(dump_smb_file,"\t SMB_FILE_ATTRIBUTE_ARCHIVE\n"); - Printf("\tfile name length = %ld\n",file_name_length); - Printf("\tfile name = '%s'\n",file_name); + FPrintf(dump_smb_file,"\tfile name length = %ld\n",file_name_length); + FPrintf(dump_smb_file,"\tfile name = '%s'\n",file_name); } } } @@ -1167,8 +1176,8 @@ print_smb_contents(const struct smb_header * header,int command,enum smb_packet_ memmove(filename,data,num_data_bytes); filename[num_data_bytes] = '\0'; - Printf("buffer format = %ld\n",filename[0]); - Printf("directory name = '%s'\n",filename+1); + FPrintf(dump_smb_file,"buffer format = %ld\n",filename[0]); + FPrintf(dump_smb_file,"directory name = '%s'\n",filename+1); } } else if (command == SMB_COM_DELETE_DIRECTORY) @@ -1183,8 +1192,8 @@ print_smb_contents(const struct smb_header * header,int command,enum smb_packet_ memmove(filename,data,num_data_bytes); filename[num_data_bytes] = '\0'; - Printf("buffer format = %ld\n",filename[0]); - Printf("directory name = '%s'\n",filename+1); + FPrintf(dump_smb_file,"buffer format = %ld\n",filename[0]); + FPrintf(dump_smb_file,"directory name = '%s'\n",filename+1); } } else if (command == SMB_COM_OPEN) @@ -1202,28 +1211,28 @@ print_smb_contents(const struct smb_header * header,int command,enum smb_packet_ filename[num_data_bytes] = '\0'; access_mode = vwv[0]; - Printf("access mode = 0x%04lx\n",access_mode); + FPrintf(dump_smb_file,"access mode = 0x%04lx\n",access_mode); switch(access_mode & 0x0007) { case 0: - Printf(" Open for reading\n"); + FPrintf(dump_smb_file," Open for reading\n"); break; case 1: - Printf(" Open for writing\n"); + FPrintf(dump_smb_file," Open for writing\n"); break; case 2: - Printf(" Open for reading and writing\n"); + FPrintf(dump_smb_file," Open for reading and writing\n"); break; case 3: - Printf(" Open for execution\n"); + FPrintf(dump_smb_file," Open for execution\n"); break; default: @@ -1235,27 +1244,27 @@ print_smb_contents(const struct smb_header * header,int command,enum smb_packet_ { case 0: - Printf(" Compatibility mode\n"); + FPrintf(dump_smb_file," Compatibility mode\n"); break; case 1: - Printf(" Deny read/write/execute others (exclusive use requested)\n"); + FPrintf(dump_smb_file," Deny read/write/execute others (exclusive use requested)\n"); break; case 2: - Printf(" Deny write to others\n"); + FPrintf(dump_smb_file," Deny write to others\n"); break; case 3: - Printf(" Deny read/execute to others\n"); + FPrintf(dump_smb_file," Deny read/execute to others\n"); break; case 4: - Printf(" Deny nothing to others\n"); + FPrintf(dump_smb_file," Deny nothing to others\n"); break; default: @@ -1267,22 +1276,22 @@ print_smb_contents(const struct smb_header * header,int command,enum smb_packet_ { case 0: - Printf(" Unknown locality of reference\n"); + FPrintf(dump_smb_file," Unknown locality of reference\n"); break; case 1: - Printf(" Mainly sequential access\n"); + FPrintf(dump_smb_file," Mainly sequential access\n"); break; case 2: - Printf(" Mainly random access\n"); + FPrintf(dump_smb_file," Mainly random access\n"); break; case 3: - Printf(" Random access with some locality\n"); + FPrintf(dump_smb_file," Random access with some locality\n"); break; default: @@ -1291,33 +1300,33 @@ print_smb_contents(const struct smb_header * header,int command,enum smb_packet_ } if(access_mode & 0x1000) - Printf(" Perform caching on file\n"); + FPrintf(dump_smb_file," Perform caching on file\n"); else - Printf(" Do not cache the file\n"); + FPrintf(dump_smb_file," Do not cache the file\n"); if(access_mode & 0x4000) - Printf(" No read ahead or write behind is allowed on this file or device\n"); + FPrintf(dump_smb_file," No read ahead or write behind is allowed on this file or device\n"); search_attribute = vwv[1]; - Printf("search attribute = 0x%04lx\n",search_attribute); + FPrintf(dump_smb_file,"search attribute = 0x%04lx\n",search_attribute); if(search_attribute & 0x0100) - Printf(" SMB_SEARCH_ATTRIBUTE_READONLY\n"); + FPrintf(dump_smb_file," SMB_SEARCH_ATTRIBUTE_READONLY\n"); if(search_attribute & 0x0200) - Printf(" SMB_SEARCH_ATTRIBUTE_HIDDEN\n"); + FPrintf(dump_smb_file," SMB_SEARCH_ATTRIBUTE_HIDDEN\n"); if(search_attribute & 0x0400) - Printf(" SMB_SEARCH_ATTRIBUTE_SYSTEM\n"); + FPrintf(dump_smb_file," SMB_SEARCH_ATTRIBUTE_SYSTEM\n"); if(search_attribute & 0x1000) - Printf(" SMB_SEARCH_ATTRIBUTE_DIRECTORY\n"); + FPrintf(dump_smb_file," SMB_SEARCH_ATTRIBUTE_DIRECTORY\n"); if(search_attribute & 0x2000) - Printf(" SMB_SEARCH_ATTRIBUTE_ARCHIVE\n"); + FPrintf(dump_smb_file," SMB_SEARCH_ATTRIBUTE_ARCHIVE\n"); - Printf("buffer format = %ld\n",filename[0]); - Printf("file pathname = '%s'\n",filename+1); + FPrintf(dump_smb_file,"buffer format = %ld\n",filename[0]); + FPrintf(dump_smb_file,"file pathname = '%s'\n",filename+1); } else { @@ -1327,60 +1336,60 @@ print_smb_contents(const struct smb_header * header,int command,enum smb_packet_ if(num_parameter_words <= 0) return; - Printf("file handle = 0x%04lx\n",vwv[0]); + FPrintf(dump_smb_file,"file handle = 0x%04lx\n",vwv[0]); file_attributes = vwv[1]; - Printf("file attributes = 0x%04lx\n",file_attributes); + FPrintf(dump_smb_file,"file attributes = 0x%04lx\n",file_attributes); if((file_attributes & 0x001f) == 0) - Printf(" SMB_FILE_ATTRIBUTE_NORMAL\n"); + FPrintf(dump_smb_file," SMB_FILE_ATTRIBUTE_NORMAL\n"); if(file_attributes & 0x0001) - Printf(" SMB_FILE_ATTRIBUTE_READ_ONLY\n"); + FPrintf(dump_smb_file," SMB_FILE_ATTRIBUTE_READ_ONLY\n"); if(file_attributes & 0x0002) - Printf(" SMB_FILE_ATTRIBUTE_HIDDEN\n"); + FPrintf(dump_smb_file," SMB_FILE_ATTRIBUTE_HIDDEN\n"); if(file_attributes & 0x0004) - Printf(" SMB_FILE_ATTRIBUTE_SYSTEM\n"); + FPrintf(dump_smb_file," SMB_FILE_ATTRIBUTE_SYSTEM\n"); if(file_attributes & 0x0008) - Printf(" SMB_FILE_ATTRIBUTE_VOLUME\n"); + FPrintf(dump_smb_file," SMB_FILE_ATTRIBUTE_VOLUME\n"); if(file_attributes & 0x0010) - Printf(" SMB_FILE_ATTRIBUTE_DIRECTORY\n"); + FPrintf(dump_smb_file," SMB_FILE_ATTRIBUTE_DIRECTORY\n"); if(file_attributes & 0x0020) - Printf(" SMB_FILE_ATTRIBUTE_ARCHIVE\n"); + FPrintf(dump_smb_file," SMB_FILE_ATTRIBUTE_ARCHIVE\n"); - Printf("last modified = 0x%08lx\n",(((unsigned long)vwv[3]) << 16) | vwv[2]); - Printf(" %s\n",convert_utime_to_string((((unsigned long)vwv[3]) << 16) | vwv[2])); + FPrintf(dump_smb_file,"last modified = 0x%08lx\n",(((unsigned long)vwv[3]) << 16) | vwv[2]); + FPrintf(dump_smb_file," %s\n",convert_utime_to_string((((unsigned long)vwv[3]) << 16) | vwv[2])); - Printf("file size = %lu\n",(((unsigned long )vwv[5]) << 16) | vwv[4]); + FPrintf(dump_smb_file,"file size = %lu\n",(((unsigned long )vwv[5]) << 16) | vwv[4]); access_mode = vwv[6]; - Printf("access mode = 0x%04lx\n",access_mode); + FPrintf(dump_smb_file,"access mode = 0x%04lx\n",access_mode); switch(access_mode & 0x0007) { case 0: - Printf(" Open for reading\n"); + FPrintf(dump_smb_file," Open for reading\n"); break; case 1: - Printf(" Open for writing\n"); + FPrintf(dump_smb_file," Open for writing\n"); break; case 2: - Printf(" Open for reading and writing\n"); + FPrintf(dump_smb_file," Open for reading and writing\n"); break; case 3: - Printf(" Open for execution\n"); + FPrintf(dump_smb_file," Open for execution\n"); break; default: @@ -1392,27 +1401,27 @@ print_smb_contents(const struct smb_header * header,int command,enum smb_packet_ { case 0: - Printf(" Compatibility mode\n"); + FPrintf(dump_smb_file," Compatibility mode\n"); break; case 1: - Printf(" Deny read/write/execute others (exclusive use requested)\n"); + FPrintf(dump_smb_file," Deny read/write/execute others (exclusive use requested)\n"); break; case 2: - Printf(" Deny write to others\n"); + FPrintf(dump_smb_file," Deny write to others\n"); break; case 3: - Printf(" Deny read/execute to others\n"); + FPrintf(dump_smb_file," Deny read/execute to others\n"); break; case 4: - Printf(" Deny nothing to others\n"); + FPrintf(dump_smb_file," Deny nothing to others\n"); break; default: @@ -1424,22 +1433,22 @@ print_smb_contents(const struct smb_header * header,int command,enum smb_packet_ { case 0: - Printf(" Unknown locality of reference\n"); + FPrintf(dump_smb_file," Unknown locality of reference\n"); break; case 1: - Printf(" Mainly sequential access\n"); + FPrintf(dump_smb_file," Mainly sequential access\n"); break; case 2: - Printf(" Mainly random access\n"); + FPrintf(dump_smb_file," Mainly random access\n"); break; case 3: - Printf(" Random access with some locality\n"); + FPrintf(dump_smb_file," Random access with some locality\n"); break; default: @@ -1448,12 +1457,12 @@ print_smb_contents(const struct smb_header * header,int command,enum smb_packet_ } if(access_mode & 0x1000) - Printf(" Perform caching on file\n"); + FPrintf(dump_smb_file," Perform caching on file\n"); else - Printf(" Do not cache the file\n"); + FPrintf(dump_smb_file," Do not cache the file\n"); if(access_mode & 0x4000) - Printf(" No read ahead or write behind is allowed on this file or device\n"); + FPrintf(dump_smb_file," No read ahead or write behind is allowed on this file or device\n"); } } else if (command == SMB_COM_CREATE) @@ -1470,49 +1479,49 @@ print_smb_contents(const struct smb_header * header,int command,enum smb_packet_ filename[num_data_bytes] = '\0'; file_attributes = vwv[0]; - Printf("file attributes = 0x%04lx\n",file_attributes); + FPrintf(dump_smb_file,"file attributes = 0x%04lx\n",file_attributes); if((file_attributes & 0x001f) == 0) - Printf(" SMB_FILE_ATTRIBUTE_NORMAL\n"); + FPrintf(dump_smb_file," SMB_FILE_ATTRIBUTE_NORMAL\n"); if(file_attributes & 0x0001) - Printf(" SMB_FILE_ATTRIBUTE_READ_ONLY\n"); + FPrintf(dump_smb_file," SMB_FILE_ATTRIBUTE_READ_ONLY\n"); if(file_attributes & 0x0002) - Printf(" SMB_FILE_ATTRIBUTE_HIDDEN\n"); + FPrintf(dump_smb_file," SMB_FILE_ATTRIBUTE_HIDDEN\n"); if(file_attributes & 0x0004) - Printf(" SMB_FILE_ATTRIBUTE_SYSTEM\n"); + FPrintf(dump_smb_file," SMB_FILE_ATTRIBUTE_SYSTEM\n"); if(file_attributes & 0x0008) - Printf(" SMB_FILE_ATTRIBUTE_VOLUME\n"); + FPrintf(dump_smb_file," SMB_FILE_ATTRIBUTE_VOLUME\n"); if(file_attributes & 0x0010) - Printf(" SMB_FILE_ATTRIBUTE_DIRECTORY\n"); + FPrintf(dump_smb_file," SMB_FILE_ATTRIBUTE_DIRECTORY\n"); if(file_attributes & 0x0020) - Printf(" SMB_FILE_ATTRIBUTE_ARCHIVE\n"); + FPrintf(dump_smb_file," SMB_FILE_ATTRIBUTE_ARCHIVE\n"); - Printf("creation time = 0x%08lx\n",(((unsigned long)vwv[2]) << 16) | vwv[1]); - Printf(" %s\n",convert_utime_to_string((((unsigned long)vwv[2]) << 16) | vwv[1])); - Printf("buffer format = %ld\n",filename[0]); - Printf("file pathname = '%s'\n",filename+1); + FPrintf(dump_smb_file,"creation time = 0x%08lx\n",(((unsigned long)vwv[2]) << 16) | vwv[1]); + FPrintf(dump_smb_file," %s\n",convert_utime_to_string((((unsigned long)vwv[2]) << 16) | vwv[1])); + FPrintf(dump_smb_file,"buffer format = %ld\n",filename[0]); + FPrintf(dump_smb_file,"file pathname = '%s'\n",filename+1); } else { if(num_parameter_words <= 0) return; - Printf("file handle = 0x%04lx\n",vwv[0]); + FPrintf(dump_smb_file,"file handle = 0x%04lx\n",vwv[0]); } } else if (command == SMB_COM_CLOSE) { if(smb_packet_source == smb_packet_from_consumer) { - Printf("file handle = 0x%04lx\n",vwv[0]); - Printf("last time modified = 0x%08lx\n",(((unsigned long)vwv[2]) << 16) | vwv[1]); - Printf(" %s\n",convert_utime_to_string((((unsigned long)vwv[2]) << 16) | vwv[1])); + FPrintf(dump_smb_file,"file handle = 0x%04lx\n",vwv[0]); + FPrintf(dump_smb_file,"last time modified = 0x%08lx\n",(((unsigned long)vwv[2]) << 16) | vwv[1]); + FPrintf(dump_smb_file," %s\n",convert_utime_to_string((((unsigned long)vwv[2]) << 16) | vwv[1])); } } else if (command == SMB_COM_DELETE) @@ -1529,25 +1538,25 @@ print_smb_contents(const struct smb_header * header,int command,enum smb_packet_ filename[num_data_bytes] = '\0'; search_attributes = vwv[0]; - Printf("search attributes = 0x%04lx\n",search_attributes); + FPrintf(dump_smb_file,"search attributes = 0x%04lx\n",search_attributes); if(search_attributes & 0x0100) - Printf(" SMB_SEARCH_ATTRIBUTE_READONLY\n"); + FPrintf(dump_smb_file," SMB_SEARCH_ATTRIBUTE_READONLY\n"); if(search_attributes & 0x0200) - Printf(" SMB_SEARCH_ATTRIBUTE_HIDDEN\n"); + FPrintf(dump_smb_file," SMB_SEARCH_ATTRIBUTE_HIDDEN\n"); if(search_attributes & 0x0400) - Printf(" SMB_SEARCH_ATTRIBUTE_SYSTEM\n"); + FPrintf(dump_smb_file," SMB_SEARCH_ATTRIBUTE_SYSTEM\n"); if(search_attributes & 0x1000) - Printf(" SMB_SEARCH_ATTRIBUTE_DIRECTORY\n"); + FPrintf(dump_smb_file," SMB_SEARCH_ATTRIBUTE_DIRECTORY\n"); if(search_attributes & 0x2000) - Printf(" SMB_SEARCH_ATTRIBUTE_ARCHIVE\n"); + FPrintf(dump_smb_file," SMB_SEARCH_ATTRIBUTE_ARCHIVE\n"); - Printf("buffer format = %ld\n",filename[0]); - Printf("file name = '%s'\n",filename+1); + FPrintf(dump_smb_file,"buffer format = %ld\n",filename[0]); + FPrintf(dump_smb_file,"file name = '%s'\n",filename+1); } } else if (command == SMB_COM_RENAME) @@ -1560,33 +1569,33 @@ print_smb_contents(const struct smb_header * header,int command,enum smb_packet_ int len; search_attributes = vwv[0]; - Printf("search attributes = 0x%04lx\n",search_attributes); + FPrintf(dump_smb_file,"search attributes = 0x%04lx\n",search_attributes); if(search_attributes & 0x0100) - Printf(" SMB_SEARCH_ATTRIBUTE_READONLY\n"); + FPrintf(dump_smb_file," SMB_SEARCH_ATTRIBUTE_READONLY\n"); if(search_attributes & 0x0200) - Printf(" SMB_SEARCH_ATTRIBUTE_HIDDEN\n"); + FPrintf(dump_smb_file," SMB_SEARCH_ATTRIBUTE_HIDDEN\n"); if(search_attributes & 0x0400) - Printf(" SMB_SEARCH_ATTRIBUTE_SYSTEM\n"); + FPrintf(dump_smb_file," SMB_SEARCH_ATTRIBUTE_SYSTEM\n"); if(search_attributes & 0x1000) - Printf(" SMB_SEARCH_ATTRIBUTE_DIRECTORY\n"); + FPrintf(dump_smb_file," SMB_SEARCH_ATTRIBUTE_DIRECTORY\n"); if(search_attributes & 0x2000) - Printf(" SMB_SEARCH_ATTRIBUTE_ARCHIVE\n"); + FPrintf(dump_smb_file," SMB_SEARCH_ATTRIBUTE_ARCHIVE\n"); old_file_name = data; len = strlen(old_file_name); new_file_name = &old_file_name[len+1]; - Printf("buffer format 1 = %ld\n",old_file_name[0]); - Printf("old file name = '%s'\n",old_file_name+1); + FPrintf(dump_smb_file,"buffer format 1 = %ld\n",old_file_name[0]); + FPrintf(dump_smb_file,"old file name = '%s'\n",old_file_name+1); - Printf("buffer format 2 = %ld\n",new_file_name[0]); - Printf("new file name = '%s'\n",new_file_name+1); + FPrintf(dump_smb_file,"buffer format 2 = %ld\n",new_file_name[0]); + FPrintf(dump_smb_file,"new file name = '%s'\n",new_file_name+1); } } else if (command == SMB_COM_QUERY_INFORMATION) @@ -1601,8 +1610,8 @@ print_smb_contents(const struct smb_header * header,int command,enum smb_packet_ memmove(filename,data,num_data_bytes); filename[num_data_bytes] = '\0'; - Printf("buffer format = 0x%02lx\n",filename[0]); - Printf("file pathname = '%s'\n",filename+1); + FPrintf(dump_smb_file,"buffer format = 0x%02lx\n",filename[0]); + FPrintf(dump_smb_file,"file pathname = '%s'\n",filename+1); } else { @@ -1612,32 +1621,32 @@ print_smb_contents(const struct smb_header * header,int command,enum smb_packet_ return; file_attributes = vwv[0]; - Printf("file attributes = 0x%04lx\n",file_attributes); + FPrintf(dump_smb_file,"file attributes = 0x%04lx\n",file_attributes); if((file_attributes & 0x001f) == 0) - Printf(" SMB_FILE_ATTRIBUTE_NORMAL\n"); + FPrintf(dump_smb_file," SMB_FILE_ATTRIBUTE_NORMAL\n"); if(file_attributes & 0x0001) - Printf(" SMB_FILE_ATTRIBUTE_READ_ONLY\n"); + FPrintf(dump_smb_file," SMB_FILE_ATTRIBUTE_READ_ONLY\n"); if(file_attributes & 0x0002) - Printf(" SMB_FILE_ATTRIBUTE_HIDDEN\n"); + FPrintf(dump_smb_file," SMB_FILE_ATTRIBUTE_HIDDEN\n"); if(file_attributes & 0x0004) - Printf(" SMB_FILE_ATTRIBUTE_SYSTEM\n"); + FPrintf(dump_smb_file," SMB_FILE_ATTRIBUTE_SYSTEM\n"); if(file_attributes & 0x0008) - Printf(" SMB_FILE_ATTRIBUTE_VOLUME\n"); + FPrintf(dump_smb_file," SMB_FILE_ATTRIBUTE_VOLUME\n"); if(file_attributes & 0x0010) - Printf(" SMB_FILE_ATTRIBUTE_DIRECTORY\n"); + FPrintf(dump_smb_file," SMB_FILE_ATTRIBUTE_DIRECTORY\n"); if(file_attributes & 0x0020) - Printf(" SMB_FILE_ATTRIBUTE_ARCHIVE\n"); + FPrintf(dump_smb_file," SMB_FILE_ATTRIBUTE_ARCHIVE\n"); - Printf("last write time = 0x%08lx\n",(((unsigned long)vwv[2]) << 16) | vwv[1]); - Printf(" %s\n",convert_utime_to_string((((unsigned long)vwv[2]) << 16) | vwv[1])); - Printf("file size = %lu\n",(((unsigned long)vwv[4]) << 16) | vwv[3]); + FPrintf(dump_smb_file,"last write time = 0x%08lx\n",(((unsigned long)vwv[2]) << 16) | vwv[1]); + FPrintf(dump_smb_file," %s\n",convert_utime_to_string((((unsigned long)vwv[2]) << 16) | vwv[1])); + FPrintf(dump_smb_file,"file size = %lu\n",(((unsigned long)vwv[4]) << 16) | vwv[3]); } } else if (command == SMB_COM_SET_INFORMATION) @@ -1654,42 +1663,42 @@ print_smb_contents(const struct smb_header * header,int command,enum smb_packet_ filename[num_data_bytes] = '\0'; file_attributes = vwv[0]; - Printf("file attributes = 0x%04lx\n",file_attributes); + FPrintf(dump_smb_file,"file attributes = 0x%04lx\n",file_attributes); if((file_attributes & 0x001f) == 0) - Printf(" SMB_FILE_ATTRIBUTE_NORMAL\n"); + FPrintf(dump_smb_file," SMB_FILE_ATTRIBUTE_NORMAL\n"); if(file_attributes & 0x0001) - Printf(" SMB_FILE_ATTRIBUTE_READ_ONLY\n"); + FPrintf(dump_smb_file," SMB_FILE_ATTRIBUTE_READ_ONLY\n"); if(file_attributes & 0x0002) - Printf(" SMB_FILE_ATTRIBUTE_HIDDEN\n"); + FPrintf(dump_smb_file," SMB_FILE_ATTRIBUTE_HIDDEN\n"); if(file_attributes & 0x0004) - Printf(" SMB_FILE_ATTRIBUTE_SYSTEM\n"); + FPrintf(dump_smb_file," SMB_FILE_ATTRIBUTE_SYSTEM\n"); if(file_attributes & 0x0008) - Printf(" SMB_FILE_ATTRIBUTE_VOLUME\n"); + FPrintf(dump_smb_file," SMB_FILE_ATTRIBUTE_VOLUME\n"); if(file_attributes & 0x0010) - Printf(" SMB_FILE_ATTRIBUTE_DIRECTORY\n"); + FPrintf(dump_smb_file," SMB_FILE_ATTRIBUTE_DIRECTORY\n"); if(file_attributes & 0x0020) - Printf(" SMB_FILE_ATTRIBUTE_ARCHIVE\n"); + FPrintf(dump_smb_file," SMB_FILE_ATTRIBUTE_ARCHIVE\n"); - Printf("creation time = 0x%08lx\n",(((unsigned long)vwv[2]) << 16) | vwv[1]); - Printf(" %s\n",convert_utime_to_string((((unsigned long)vwv[2]) << 16) | vwv[1])); - Printf("file pathname = '%s'\n",filename+1); + FPrintf(dump_smb_file,"creation time = 0x%08lx\n",(((unsigned long)vwv[2]) << 16) | vwv[1]); + FPrintf(dump_smb_file," %s\n",convert_utime_to_string((((unsigned long)vwv[2]) << 16) | vwv[1])); + FPrintf(dump_smb_file,"file pathname = '%s'\n",filename+1); } } else if (command == SMB_COM_READ) { if(smb_packet_source == smb_packet_from_consumer) { - Printf("file handle = 0x%04lx\n",(signed short)vwv[0]); - Printf("count of bytes to read = %ld\n",vwv[1]); - Printf("read offset in bytes = %lu\n",(((unsigned long)vwv[3]) << 16) | vwv[2]); - Printf("estimate of remaining bytes to be read = %ld\n",vwv[4]); + FPrintf(dump_smb_file,"file handle = 0x%04lx\n",(signed short)vwv[0]); + FPrintf(dump_smb_file,"count of bytes to read = %ld\n",vwv[1]); + FPrintf(dump_smb_file,"read offset in bytes = %lu\n",(((unsigned long)vwv[3]) << 16) | vwv[2]); + FPrintf(dump_smb_file,"estimate of remaining bytes to be read = %ld\n",vwv[4]); } else { @@ -1700,19 +1709,19 @@ print_smb_contents(const struct smb_header * header,int command,enum smb_packet_ if(num_parameter_words <= 0) return; - Printf("count of bytes returned = %ld\n",vwv[0]); + FPrintf(dump_smb_file,"count of bytes returned = %ld\n",vwv[0]); buffer_format = next_data_byte(data,&offset); count_of_bytes_read = next_data_word(data,&offset); - Printf("buffer format = %lu\n",buffer_format); - Printf("count of bytes read = %lu\n",count_of_bytes_read); + FPrintf(dump_smb_file,"buffer format = %lu\n",buffer_format); + FPrintf(dump_smb_file,"count of bytes read = %lu\n",count_of_bytes_read); - if(count_of_bytes_read > 0) + if(dump_smb_level > 1 && count_of_bytes_read > 0) { struct line_buffer lb; - Printf("raw data (%ld bytes) =\n",count_of_bytes_read); + FPrintf(dump_smb_file,"raw data (%ld bytes) =\n",count_of_bytes_read); print_smb_data(&lb,count_of_bytes_read,next_data_bytes(data,count_of_bytes_read,&offset)); } @@ -1726,22 +1735,22 @@ print_smb_contents(const struct smb_header * header,int command,enum smb_packet_ unsigned short data_length; int offset = 0; - Printf("file handle = 0x%04lx\n",vwv[0]); - Printf("count of bytes to write = %ld\n",vwv[1]); - Printf("write offset in bytes = %lu\n",(((unsigned long)vwv[3]) << 16) | vwv[2]); - Printf("estimate of remaining bytes to be written = %ld\n",vwv[4]); + FPrintf(dump_smb_file,"file handle = 0x%04lx\n",vwv[0]); + FPrintf(dump_smb_file,"count of bytes to write = %ld\n",vwv[1]); + FPrintf(dump_smb_file,"write offset in bytes = %lu\n",(((unsigned long)vwv[3]) << 16) | vwv[2]); + FPrintf(dump_smb_file,"estimate of remaining bytes to be written = %ld\n",vwv[4]); buffer_format = next_data_byte(data,&offset); data_length = next_data_word(data,&offset); - Printf("buffer format = %lu\n",buffer_format); - Printf("data length = %lu\n",data_length); + FPrintf(dump_smb_file,"buffer format = %lu\n",buffer_format); + FPrintf(dump_smb_file,"data length = %lu\n",data_length); - if(data_length > 0) + if(dump_smb_level > 1 && data_length > 0) { struct line_buffer lb; - Printf("raw data (%ld bytes) =\n",data_length); + FPrintf(dump_smb_file,"raw data (%ld bytes) =\n",data_length); print_smb_data(&lb,data_length,next_data_bytes(data,data_length,&offset)); } @@ -1751,7 +1760,7 @@ print_smb_contents(const struct smb_header * header,int command,enum smb_packet_ if(num_parameter_words <= 0) return; - Printf("count of bytes written = %ld\n",vwv[0]); + FPrintf(dump_smb_file,"count of bytes written = %ld\n",vwv[0]); } } else if (command == SMB_COM_SEEK) @@ -1760,51 +1769,51 @@ print_smb_contents(const struct smb_header * header,int command,enum smb_packet_ { int mode; - Printf("file handle = 0x%04lx\n",vwv[0]); + FPrintf(dump_smb_file,"file handle = 0x%04lx\n",vwv[0]); mode = vwv[1]; - Printf("mode = 0x%04lx\n",mode); + FPrintf(dump_smb_file,"mode = 0x%04lx\n",mode); switch(mode) { case 0: - Printf(" Seek from the start of the file\n"); + FPrintf(dump_smb_file," Seek from the start of the file\n"); break; case 1: - Printf(" Seek from the current position\n"); + FPrintf(dump_smb_file," Seek from the current position\n"); break; case 2: - Printf(" Seek from the end of the file\n"); + FPrintf(dump_smb_file," Seek from the end of the file\n"); break; } - Printf("offset = %ld\n",(long)((((unsigned long)vwv[3]) << 16) | vwv[2])); + FPrintf(dump_smb_file,"offset = %ld\n",(long)((((unsigned long)vwv[3]) << 16) | vwv[2])); } else { if(num_parameter_words <= 0) return; - Printf("absolute position = %lu\n",(((unsigned long)vwv[1]) << 16) | vwv[0]); + FPrintf(dump_smb_file,"absolute position = %lu\n",(((unsigned long)vwv[1]) << 16) | vwv[0]); } } else if (command == SMB_COM_READ_RAW) { if(smb_packet_source == smb_packet_from_consumer) { - Printf("file handle = 0x%04lx\n",(signed short)vwv[0]); - Printf("offset = %lu\n",(((unsigned long)vwv[2]) << 16) | vwv[1]); - Printf("maximum count of bytes to return = %ld\n",vwv[3]); - Printf("minimum count of byte to return = %ld\n",vwv[4]); - Printf("timeout = %lu\n",(((unsigned long)vwv[6]) << 16) | vwv[5]); + FPrintf(dump_smb_file,"file handle = 0x%04lx\n",(signed short)vwv[0]); + FPrintf(dump_smb_file,"offset = %lu\n",(((unsigned long)vwv[2]) << 16) | vwv[1]); + FPrintf(dump_smb_file,"maximum count of bytes to return = %ld\n",vwv[3]); + FPrintf(dump_smb_file,"minimum count of byte to return = %ld\n",vwv[4]); + FPrintf(dump_smb_file,"timeout = %lu\n",(((unsigned long)vwv[6]) << 16) | vwv[5]); if(num_parameter_words == 0x0A) - Printf("offset high = %lu\n",(((unsigned long)vwv[9]) << 16) | vwv[8]); + FPrintf(dump_smb_file,"offset high = %lu\n",(((unsigned long)vwv[9]) << 16) | vwv[8]); } } else if (command == SMB_COM_WRITE_RAW) @@ -1814,70 +1823,73 @@ print_smb_contents(const struct smb_header * header,int command,enum smb_packet_ unsigned short data_length; unsigned short data_offset; - Printf("file handle = 0x%04lx\n",vwv[0]); - Printf("cound of bytes = %lu\n",vwv[1]); - Printf("offset = %lu\n",(((unsigned long)vwv[4]) << 16) | vwv[3]); - Printf("timeout = %lu\n",(((unsigned long)vwv[6]) << 16) | vwv[5]); - Printf("write mode = %ld\n",vwv[7]); + FPrintf(dump_smb_file,"file handle = 0x%04lx\n",vwv[0]); + FPrintf(dump_smb_file,"count of bytes = %lu\n",vwv[1]); + FPrintf(dump_smb_file,"offset = %lu\n",(((unsigned long)vwv[4]) << 16) | vwv[3]); + FPrintf(dump_smb_file,"timeout = %lu\n",(((unsigned long)vwv[6]) << 16) | vwv[5]); + FPrintf(dump_smb_file,"write mode = %ld\n",vwv[7]); if(vwv[7] & 0x0001) - Printf(" Writethrough mode\n"); + FPrintf(dump_smb_file," Writethrough mode\n"); if(vwv[7] & 0x0002) - Printf(" Read bytes available\n"); + FPrintf(dump_smb_file," Read bytes available\n"); if(vwv[7] & 0x0004) - Printf(" Named pipe raw\n"); + FPrintf(dump_smb_file," Named pipe raw\n"); if(vwv[7] & 0x0008) - Printf(" Named pipe start\n"); + FPrintf(dump_smb_file," Named pipe start\n"); data_length = vwv[8]; data_offset = vwv[9]; - Printf("data length = %lu\n",data_length); - Printf("data offset = %lu\n",data_offset); + FPrintf(dump_smb_file,"data length = %lu\n",data_length); + FPrintf(dump_smb_file,"data offset = %lu\n",data_offset); if(num_parameter_words == 0x0E) - Printf("offset high = %lu\n",(((unsigned long)vwv[11]) << 16) | vwv[10]); + FPrintf(dump_smb_file,"offset high = %lu\n",(((unsigned long)vwv[11]) << 16) | vwv[10]); if(data_length > 0) { - struct line_buffer lb; - if(header->data_offset < data_offset) - Printf("padding bytes = %ld\n",data_offset - header->data_offset); + FPrintf(dump_smb_file,"padding bytes = %ld\n",data_offset - header->data_offset); - Printf("raw data (%ld bytes) =\n",data_length); + if(dump_smb_level > 1) + { + struct line_buffer lb; - print_smb_data(&lb,num_data_bytes,&header->raw_packet[data_offset]); + FPrintf(dump_smb_file,"raw data (%ld bytes) =\n",data_length); + + print_smb_data(&lb,num_data_bytes,&header->raw_packet[data_offset]); + } } } else { if(num_parameter_words > 0) - Printf("number of bytes remaining to be written = %lu\n",vwv[0]); + FPrintf(dump_smb_file,"number of bytes remaining to be written = %lu\n",vwv[0]); } } else if (command == SMB_COM_WRITE_COMPLETE) { if(smb_packet_source == smb_packet_to_consumer && num_parameter_words > 0) - Printf("total number of bytes written = %lu\n",vwv[0]); + FPrintf(dump_smb_file,"total number of bytes written = %lu\n",vwv[0]); } else if (command == SMB_COM_SET_INFORMATION2) { if(smb_packet_source == smb_packet_from_consumer) { - Printf("fid = %ld\n",vwv[0]); - Printf("creation date = 0x%04lx\n",vwv[1]); - Printf("creation time = 0x%04lx\n",vwv[2]); - Printf("creation = %s\n",convert_smb_date_time_to_string(vwv[1],vwv[2])); - Printf("last access date = 0x%04lx\n",vwv[3]); - Printf("last access time = 0x%04lx\n",vwv[4]); - Printf("last access = %s\n",convert_smb_date_time_to_string(vwv[3],vwv[4])); - Printf("last write date = 0x%04lx\n",vwv[5]); - Printf("last write time = 0x%04lx\n",vwv[6]); - Printf("last write = %s\n",convert_smb_date_time_to_string(vwv[5],vwv[6])); + FPrintf(dump_smb_file,"fid = %ld\n",vwv[0]); + FPrintf(dump_smb_file,"creation date = 0x%04lx\n",vwv[1]); + FPrintf(dump_smb_file,"creation time = 0x%04lx\n",vwv[2]); + FPrintf(dump_smb_file,"creation = %s\n",convert_smb_date_time_to_string(vwv[1],vwv[2])); + FPrintf(dump_smb_file,"last access date = 0x%04lx\n",vwv[3]); + FPrintf(dump_smb_file,"last access time = 0x%04lx\n",vwv[4]); + FPrintf(dump_smb_file,"last access = %s\n",convert_smb_date_time_to_string(vwv[3],vwv[4])); + FPrintf(dump_smb_file,"last write date = 0x%04lx\n",vwv[5]); + FPrintf(dump_smb_file,"last write time = 0x%04lx\n",vwv[6]); + FPrintf(dump_smb_file,"last write = %s\n",convert_smb_date_time_to_string(vwv[5],vwv[6])); } } else if (command == SMB_COM_QUERY_INFORMATION2) @@ -1886,42 +1898,42 @@ print_smb_contents(const struct smb_header * header,int command,enum smb_packet_ { int file_attributes; - Printf("fid = %ld\n",vwv[0]); - Printf("creation date = 0x%04lx\n",vwv[1]); - Printf("creation time = 0x%04lx\n",vwv[2]); - Printf("creation = %s\n",convert_smb_date_time_to_string(vwv[1],vwv[2])); - Printf("last access date = 0x%04lx\n",vwv[3]); - Printf("last access time = 0x%04lx\n",vwv[4]); - Printf("last access = %s\n",convert_smb_date_time_to_string(vwv[3],vwv[4])); - Printf("last write date = 0x%04lx\n",vwv[5]); - Printf("last write time = 0x%04lx\n",vwv[6]); - Printf("last write = %s\n",convert_smb_date_time_to_string(vwv[5],vwv[6])); - Printf("file data size = %lu\n",(((unsigned long)vwv[8]) << 16) | vwv[7]); - Printf("file allocation size = %lu\n",(((unsigned long)vwv[10]) << 16) | vwv[9]); + FPrintf(dump_smb_file,"fid = %ld\n",vwv[0]); + FPrintf(dump_smb_file,"creation date = 0x%04lx\n",vwv[1]); + FPrintf(dump_smb_file,"creation time = 0x%04lx\n",vwv[2]); + FPrintf(dump_smb_file,"creation = %s\n",convert_smb_date_time_to_string(vwv[1],vwv[2])); + FPrintf(dump_smb_file,"last access date = 0x%04lx\n",vwv[3]); + FPrintf(dump_smb_file,"last access time = 0x%04lx\n",vwv[4]); + FPrintf(dump_smb_file,"last access = %s\n",convert_smb_date_time_to_string(vwv[3],vwv[4])); + FPrintf(dump_smb_file,"last write date = 0x%04lx\n",vwv[5]); + FPrintf(dump_smb_file,"last write time = 0x%04lx\n",vwv[6]); + FPrintf(dump_smb_file,"last write = %s\n",convert_smb_date_time_to_string(vwv[5],vwv[6])); + FPrintf(dump_smb_file,"file data size = %lu\n",(((unsigned long)vwv[8]) << 16) | vwv[7]); + FPrintf(dump_smb_file,"file allocation size = %lu\n",(((unsigned long)vwv[10]) << 16) | vwv[9]); file_attributes = vwv[11]; - Printf("file attributes = 0x%04lx\n",file_attributes); + FPrintf(dump_smb_file,"file attributes = 0x%04lx\n",file_attributes); if((file_attributes & 0x001f) == 0) - Printf(" SMB_FILE_ATTRIBUTE_NORMAL\n"); + FPrintf(dump_smb_file," SMB_FILE_ATTRIBUTE_NORMAL\n"); if(file_attributes & 0x0001) - Printf(" SMB_FILE_ATTRIBUTE_READ_ONLY\n"); + FPrintf(dump_smb_file," SMB_FILE_ATTRIBUTE_READ_ONLY\n"); if(file_attributes & 0x0002) - Printf(" SMB_FILE_ATTRIBUTE_HIDDEN\n"); + FPrintf(dump_smb_file," SMB_FILE_ATTRIBUTE_HIDDEN\n"); if(file_attributes & 0x0004) - Printf(" SMB_FILE_ATTRIBUTE_SYSTEM\n"); + FPrintf(dump_smb_file," SMB_FILE_ATTRIBUTE_SYSTEM\n"); if(file_attributes & 0x0008) - Printf(" SMB_FILE_ATTRIBUTE_VOLUME\n"); + FPrintf(dump_smb_file," SMB_FILE_ATTRIBUTE_VOLUME\n"); if(file_attributes & 0x0010) - Printf(" SMB_FILE_ATTRIBUTE_DIRECTORY\n"); + FPrintf(dump_smb_file," SMB_FILE_ATTRIBUTE_DIRECTORY\n"); if(file_attributes & 0x0020) - Printf(" SMB_FILE_ATTRIBUTE_ARCHIVE\n"); + FPrintf(dump_smb_file," SMB_FILE_ATTRIBUTE_ARCHIVE\n"); } } else if (command == SMB_COM_LOCKING_ANDX) @@ -1934,51 +1946,51 @@ print_smb_contents(const struct smb_header * header,int command,enum smb_packet_ int offset; int i; - Printf("fid = %ld\n",vwv[0]); + FPrintf(dump_smb_file,"fid = %ld\n",vwv[0]); type_of_lock = vwv[1] & 0xff; - Printf("type of lock = %ld\n",type_of_lock); + FPrintf(dump_smb_file,"type of lock = %ld\n",type_of_lock); if(type_of_lock & 0x01) - Printf(" SHARED_LOCK\n"); + FPrintf(dump_smb_file," SHARED_LOCK\n"); else - Printf(" READ_WRITE_LOCK\n"); + FPrintf(dump_smb_file," READ_WRITE_LOCK\n"); if(type_of_lock & 0x02) - Printf(" OPLOCK_RELEASE\n"); + FPrintf(dump_smb_file," OPLOCK_RELEASE\n"); if(type_of_lock & 0x04) - Printf(" CHANGE_LOCK_TYPE\n"); + FPrintf(dump_smb_file," CHANGE_LOCK_TYPE\n"); if(type_of_lock & 0x08) - Printf(" CANCEL_LOCK\n"); + FPrintf(dump_smb_file," CANCEL_LOCK\n"); if(type_of_lock & 0x10) - Printf(" LARGE_FILES\n"); + FPrintf(dump_smb_file," LARGE_FILES\n"); - Printf("new oplock level = 0x%02lx\n",(vwv[1] >> 8) & 0xff); + FPrintf(dump_smb_file,"new oplock level = 0x%02lx\n",(vwv[1] >> 8) & 0xff); - Printf("timeout = %lu\n",(((unsigned long)vwv[3]) << 16) | vwv[2]); + FPrintf(dump_smb_file,"timeout = %lu\n",(((unsigned long)vwv[3]) << 16) | vwv[2]); number_of_requested_unlocks = vwv[4]; - Printf("number of requested unlocks = %ld\n",number_of_requested_unlocks); + FPrintf(dump_smb_file,"number of requested unlocks = %ld\n",number_of_requested_unlocks); number_of_requested_locks = vwv[5]; - Printf("number of requested locks = %ld\n",number_of_requested_locks); + FPrintf(dump_smb_file,"number of requested locks = %ld\n",number_of_requested_locks); offset = 0; for(i = 0 ; i < number_of_requested_unlocks ; i++) { - Printf("unlock range[%ld] pid=%ld, byte offset = %lu, length in bytes = %lu\n", + FPrintf(dump_smb_file,"unlock range[%ld] pid=%ld, byte offset = %lu, length in bytes = %lu\n", i,next_data_word(data,&offset),next_data_dword(data,&offset),next_data_dword(data,&offset)); } for(i = 0 ; i < number_of_requested_locks ; i++) { - Printf("lock range[%ld] pid=%ld, byte offset = %lu, length in bytes = %lu\n", + FPrintf(dump_smb_file,"lock range[%ld] pid=%ld, byte offset = %lu, length in bytes = %lu\n", i,next_data_word(data,&offset),next_data_dword(data,&offset),next_data_dword(data,&offset)); } } @@ -1998,37 +2010,37 @@ print_smb_contents(const struct smb_header * header,int command,enum smb_packet_ int setup_count; int i; - Printf("total parameter count = %ld\n",vwv[0]); - Printf("total data count = %ld\n",vwv[1]); - Printf("max parameter count = %ld\n",vwv[2]); - Printf("max data count = %ld\n",vwv[3]); - Printf("max setup count = %ld\n",vwv[4] & 0xff); + FPrintf(dump_smb_file,"total parameter count = %ld\n",vwv[0]); + FPrintf(dump_smb_file,"total data count = %ld\n",vwv[1]); + FPrintf(dump_smb_file,"max parameter count = %ld\n",vwv[2]); + FPrintf(dump_smb_file,"max data count = %ld\n",vwv[3]); + FPrintf(dump_smb_file,"max setup count = %ld\n",vwv[4] & 0xff); flags = vwv[5]; - Printf("flags = 0x%04lx\n",flags); + FPrintf(dump_smb_file,"flags = 0x%04lx\n",flags); if(flags & 0x0001) - Printf(" DISCONNECT_TID\n"); + FPrintf(dump_smb_file," DISCONNECT_TID\n"); if(flags & 0x0002) - Printf(" NO_RESPONSE\n"); + FPrintf(dump_smb_file," NO_RESPONSE\n"); - Printf("timeout = %lu\n",(((unsigned long)vwv[7]) << 16) | vwv[6]); + FPrintf(dump_smb_file,"timeout = %lu\n",(((unsigned long)vwv[7]) << 16) | vwv[6]); transaction_parameter_count = vwv[9]; - Printf("parameter count = %ld\n",transaction_parameter_count); + FPrintf(dump_smb_file,"parameter count = %ld\n",transaction_parameter_count); transaction_parameter_offset = vwv[10]; - Printf("parameter offset = %ld (header parameter offset = %ld)\n",transaction_parameter_offset,header->parameter_offset); + FPrintf(dump_smb_file,"parameter offset = %ld (header parameter offset = %ld)\n",transaction_parameter_offset,header->parameter_offset); transaction_data_count = vwv[11]; - Printf("data count = %ld\n",transaction_data_count); + FPrintf(dump_smb_file,"data count = %ld\n",transaction_data_count); transaction_data_offset = vwv[12]; - Printf("data offset = %ld (header data offset = %ld)\n",transaction_data_offset,header->data_offset); + FPrintf(dump_smb_file,"data offset = %ld (header data offset = %ld)\n",transaction_data_offset,header->data_offset); setup_count = vwv[13] & 0xff; - Printf("setup count = %ld\n",setup_count); + FPrintf(dump_smb_file,"setup count = %ld\n",setup_count); setup_words = &vwv[14]; @@ -2038,34 +2050,34 @@ print_smb_contents(const struct smb_header * header,int command,enum smb_packet_ subcommand_name = get_smb_transaction2_subcommand_name(setup_words[0]); if(subcommand_name != NULL) - Printf("subcommand = %s\n",subcommand_name); + FPrintf(dump_smb_file,"subcommand = %s\n",subcommand_name); else - Printf("subcommand = %ld\n",setup_words[0]); + FPrintf(dump_smb_file,"subcommand = %ld\n",setup_words[0]); for(i = 0 ; i < setup_count ; i++) - Printf("setup word [%ld] = 0x%04lx\n",i,setup_words[i]); + FPrintf(dump_smb_file,"setup word [%ld] = 0x%04lx\n",i,setup_words[i]); } else { last_smb_com_transaction_subcommand = -1; } - if(transaction_parameter_count > 0 && transaction_parameter_offset + transaction_parameter_count <= header->raw_packet_size) + if(dump_smb_level > 1 && transaction_parameter_count > 0 && transaction_parameter_offset + transaction_parameter_count <= header->raw_packet_size) { const unsigned char * transaction_parameter_contents = (unsigned char *)&header->raw_packet[transaction_parameter_offset]; struct line_buffer lb; - Printf("transaction parameters =\n"); + FPrintf(dump_smb_file,"transaction parameters =\n"); print_smb_data(&lb,transaction_parameter_count,transaction_parameter_contents); } - if(transaction_data_count > 0 && transaction_data_offset + transaction_data_count <= header->raw_packet_size) + if(dump_smb_level > 1 && transaction_data_count > 0 && transaction_data_offset + transaction_data_count <= header->raw_packet_size) { const unsigned char * transaction_data_contents = (unsigned char *)&header->raw_packet[transaction_data_offset]; struct line_buffer lb; - Printf("transaction data =\n"); + FPrintf(dump_smb_file,"transaction data =\n"); print_smb_data(&lb,transaction_data_count,transaction_data_contents); } @@ -2083,25 +2095,25 @@ print_smb_contents(const struct smb_header * header,int command,enum smb_packet_ int setup_count; int i; - Printf("total parameter count = %ld\n",vwv[0]); - Printf("total data count = %ld\n",vwv[1]); + FPrintf(dump_smb_file,"total parameter count = %ld\n",vwv[0]); + FPrintf(dump_smb_file,"total data count = %ld\n",vwv[1]); transaction_parameter_count = vwv[3]; - Printf("parameter count = %ld\n",transaction_parameter_count); + FPrintf(dump_smb_file,"parameter count = %ld\n",transaction_parameter_count); transaction_parameter_offset = vwv[4]; - Printf("parameter offset = %ld\n",transaction_parameter_offset); + FPrintf(dump_smb_file,"parameter offset = %ld\n",transaction_parameter_offset); - Printf("parameter displacement = %ld\n",vwv[5]); + FPrintf(dump_smb_file,"parameter displacement = %ld\n",vwv[5]); transaction_data_count = vwv[6]; - Printf("data count = %ld\n",transaction_data_count); + FPrintf(dump_smb_file,"data count = %ld\n",transaction_data_count); transaction_data_offset = vwv[7]; - Printf("data offset = %ld\n",transaction_data_offset); + FPrintf(dump_smb_file,"data offset = %ld\n",transaction_data_offset); setup_count = vwv[8] & 0xff; - Printf("setup count = %ld\n",setup_count); + FPrintf(dump_smb_file,"setup count = %ld\n",setup_count); setup_words = &vwv[9]; @@ -2109,30 +2121,30 @@ print_smb_contents(const struct smb_header * header,int command,enum smb_packet_ { subcommand_name = get_smb_transaction2_subcommand_name(setup_words[0]); if(subcommand_name != NULL) - Printf("subcommand = %s\n",subcommand_name); + FPrintf(dump_smb_file,"subcommand = %s\n",subcommand_name); else - Printf("subcommand = %ld\n",setup_words[0]); + FPrintf(dump_smb_file,"subcommand = %ld\n",setup_words[0]); for(i = 0 ; i < setup_count ; i++) - Printf("setup word [%ld] = 0x%04lx\n",i,setup_words[i]); + FPrintf(dump_smb_file,"setup word [%ld] = 0x%04lx\n",i,setup_words[i]); } - if(transaction_parameter_count > 0 && transaction_parameter_offset + transaction_parameter_count <= header->raw_packet_size) + if(dump_smb_level > 1 && transaction_parameter_count > 0 && transaction_parameter_offset + transaction_parameter_count <= header->raw_packet_size) { const unsigned char * transaction_parameter_contents = (unsigned char *)&header->raw_packet[transaction_parameter_offset]; struct line_buffer lb; - Printf("transaction parameters =\n"); + FPrintf(dump_smb_file,"transaction parameters =\n"); print_smb_data(&lb,transaction_parameter_count,transaction_parameter_contents); } - if(transaction_data_count > 0 && transaction_data_offset + transaction_data_count <= header->raw_packet_size) + if(dump_smb_level > 1 && transaction_data_count > 0 && transaction_data_offset + transaction_data_count <= header->raw_packet_size) { const unsigned char * transaction_data_contents = (unsigned char *)&header->raw_packet[transaction_data_offset]; struct line_buffer lb; - Printf("transaction data =\n"); + FPrintf(dump_smb_file,"transaction data =\n"); print_smb_data(&lb,transaction_data_count,transaction_data_contents); } @@ -2159,20 +2171,20 @@ print_smb_contents(const struct smb_header * header,int command,enum smb_packet_ service = &password[len+1]; - Printf("buffer format 1 = %ld\n",path[0]); - Printf("path = '%s'\n",path+1); - Printf("buffer format 2 = %ld\n",password[0]); - Printf("password = '%s'\n",password+1); - Printf("buffer format 3 = %ld\n",service[0]); - Printf("service = '%s'\n",service+1); + FPrintf(dump_smb_file,"buffer format 1 = %ld\n",path[0]); + FPrintf(dump_smb_file,"path = '%s'\n",path+1); + FPrintf(dump_smb_file,"buffer format 2 = %ld\n",password[0]); + FPrintf(dump_smb_file,"password = '%s'\n",password+1); + FPrintf(dump_smb_file,"buffer format 3 = %ld\n",service[0]); + FPrintf(dump_smb_file,"service = '%s'\n",service+1); } else { if(num_parameter_words <= 0) return; - Printf("max buffer size = %ld\n",vwv[0]); - Printf("tid = %ld\n",vwv[1]); + FPrintf(dump_smb_file,"max buffer size = %ld\n",vwv[0]); + FPrintf(dump_smb_file,"tid = %ld\n",vwv[1]); } } else if (command == SMB_COM_NEGOTIATE) @@ -2195,7 +2207,7 @@ print_smb_contents(const struct smb_header * header,int command,enum smb_packet_ while(dialect < &args[num_data_bytes]) { - Printf("dialect[%ld] = '%s'\n",dialect_index++,&dialect[1]); + FPrintf(dump_smb_file,"dialect[%ld] = '%s'\n",dialect_index++,&dialect[1]); len = strlen(&dialect[1]); @@ -2218,109 +2230,109 @@ print_smb_contents(const struct smb_header * header,int command,enum smb_packet_ int output_offset; unsigned long system_time[2]; - Printf("dialect index = %ld\n",next_data_word(parameters,&offset)); + FPrintf(dump_smb_file,"dialect index = %ld\n",next_data_word(parameters,&offset)); security_mode = next_data_byte(parameters,&offset); - Printf("security mode = %ld\n",security_mode); + FPrintf(dump_smb_file,"security mode = %ld\n",security_mode); if(security_mode & 0x01) - Printf(" NEGOTIATE_USER_SECURITY\n"); + FPrintf(dump_smb_file," NEGOTIATE_USER_SECURITY\n"); if(security_mode & 0x02) - Printf(" NEGOTIATE_ENCRYPT_PASSWORDS\n"); + FPrintf(dump_smb_file," NEGOTIATE_ENCRYPT_PASSWORDS\n"); if(security_mode & 0x04) - Printf(" NEGOTIATE_SECURITY_SIGNATURES_ENABLE\n"); + FPrintf(dump_smb_file," NEGOTIATE_SECURITY_SIGNATURES_ENABLE\n"); if(security_mode & 0x08) - Printf(" NEGOTIATE_SECURITY_SIGNATURES_REQUIRED\n"); + FPrintf(dump_smb_file," NEGOTIATE_SECURITY_SIGNATURES_REQUIRED\n"); if(security_mode & 0xF0) - Printf(" Reserved = 0x%lx\n",security_mode >> 4); + FPrintf(dump_smb_file," Reserved = 0x%lx\n",security_mode >> 4); - Printf("max mpx count = %ld\n",next_data_word(parameters,&offset)); - Printf("max number cvs = %ld\n",next_data_word(parameters,&offset)); - Printf("max buffer size = %lu\n",next_data_dword(parameters,&offset)); - Printf("max raw size = %lu\n",next_data_dword(parameters,&offset)); - Printf("session key = %lu\n",next_data_dword(parameters,&offset)); + FPrintf(dump_smb_file,"max mpx count = %ld\n",next_data_word(parameters,&offset)); + FPrintf(dump_smb_file,"max number cvs = %ld\n",next_data_word(parameters,&offset)); + FPrintf(dump_smb_file,"max buffer size = %lu\n",next_data_dword(parameters,&offset)); + FPrintf(dump_smb_file,"max raw size = %lu\n",next_data_dword(parameters,&offset)); + FPrintf(dump_smb_file,"session key = %lu\n",next_data_dword(parameters,&offset)); capabilities = next_data_dword(parameters,&offset); - Printf("capabilities = 0x%08lx\n",capabilities); + FPrintf(dump_smb_file,"capabilities = 0x%08lx\n",capabilities); if(capabilities & 0x00000001) - Printf(" CAP_RAW_MODE\n"); + FPrintf(dump_smb_file," CAP_RAW_MODE\n"); if(capabilities & 0x00000002) - Printf(" CAP_MPX_MODE\n"); + FPrintf(dump_smb_file," CAP_MPX_MODE\n"); if(capabilities & 0x00000004) - Printf(" CAP_UNICODE\n"); + FPrintf(dump_smb_file," CAP_UNICODE\n"); if(capabilities & 0x00000008) - Printf(" CAP_LARGE_FILES\n"); + FPrintf(dump_smb_file," CAP_LARGE_FILES\n"); if(capabilities & 0x00000010) - Printf(" CAP_NT_SMBS\n"); + FPrintf(dump_smb_file," CAP_NT_SMBS\n"); if(capabilities & 0x00000020) - Printf(" CAP_RPC_REMOTE_APIS\n"); + FPrintf(dump_smb_file," CAP_RPC_REMOTE_APIS\n"); if(capabilities & 0x00000040) - Printf(" CAP_STATUS32\n"); + FPrintf(dump_smb_file," CAP_STATUS32\n"); if(capabilities & 0x00000080) - Printf(" CAP_LEVEL_II_OPLOCKS\n"); + FPrintf(dump_smb_file," CAP_LEVEL_II_OPLOCKS\n"); if(capabilities & 0x00000100) - Printf(" CAP_LOCK_AND_READ\n"); + FPrintf(dump_smb_file," CAP_LOCK_AND_READ\n"); if(capabilities & 0x00000200) - Printf(" CAP_NT_FIND\n"); + FPrintf(dump_smb_file," CAP_NT_FIND\n"); if(capabilities & 0x00000400) - Printf(" CAP_BULK_TRANSFER\n"); + FPrintf(dump_smb_file," CAP_BULK_TRANSFER\n"); if(capabilities & 0x00000800) - Printf(" CAP_COMPRESSED_DATA\n"); + FPrintf(dump_smb_file," CAP_COMPRESSED_DATA\n"); if(capabilities & 0x00001000) - Printf(" CAP_DFS\n"); + FPrintf(dump_smb_file," CAP_DFS\n"); if(capabilities & 0x00002000) - Printf(" CAP_QUADWORD_ALIGNED\n"); + FPrintf(dump_smb_file," CAP_QUADWORD_ALIGNED\n"); if(capabilities & 0x00004000) - Printf(" CAP_LARGE_READX\n"); + FPrintf(dump_smb_file," CAP_LARGE_READX\n"); if(capabilities & 0x00008000) - Printf(" CAP_LARGE_WRITEX\n"); + FPrintf(dump_smb_file," CAP_LARGE_WRITEX\n"); if(capabilities & 0x00800000) - Printf(" CAP_UNIX\n"); + FPrintf(dump_smb_file," CAP_UNIX\n"); if(capabilities & 0x20000000) - Printf(" CAP_BULK_TRANSFER\n"); + FPrintf(dump_smb_file," CAP_BULK_TRANSFER\n"); if(capabilities & 0x40000000) - Printf(" CAP_COMPRESSED_DATA\n"); + FPrintf(dump_smb_file," CAP_COMPRESSED_DATA\n"); if(capabilities & 0x80000000) - Printf(" CAP_EXTENDED_SECURITY\n"); + FPrintf(dump_smb_file," CAP_EXTENDED_SECURITY\n"); next_data_qword(parameters,system_time,&offset); - Printf("system time = 0x%08lx%08lx\n",system_time[0],system_time[1]); - Printf(" %s\n",convert_filetime_to_string(system_time)); - Printf("server time zone = %ld\n",(signed short)next_data_word(parameters,&offset)); /* ZZZ this is a signed 16 bit integer */ + FPrintf(dump_smb_file,"system time = 0x%08lx%08lx\n",system_time[0],system_time[1]); + FPrintf(dump_smb_file," %s\n",convert_filetime_to_string(system_time)); + FPrintf(dump_smb_file,"server time zone = %ld\n",(signed short)next_data_word(parameters,&offset)); /* ZZZ this is a signed 16 bit integer */ challenge_length = next_data_byte(parameters,&offset); - Printf("challenge length = %ld\n",challenge_length); + FPrintf(dump_smb_file,"challenge length = %ld\n",challenge_length); if(challenge_length > 0) { if(challenge_length == 8) { - Printf("challenge = %02lx %02lx %02lx %02lx %02lx %02lx %02lx %02lx\n", + FPrintf(dump_smb_file,"challenge = %02lx %02lx %02lx %02lx %02lx %02lx %02lx %02lx\n", data[0],data[1],data[2],data[3], data[4],data[5],data[6],data[7]); } @@ -2355,14 +2367,14 @@ print_smb_contents(const struct smb_header * header,int command,enum smb_packet_ } } - Printf("Domain name = '%s'\n",lb.line); + FPrintf(dump_smb_file,"Domain name = '%s'\n",lb.line); } else { if(num_parameter_words <= 0) return; - Printf("dialect index = %ld\n",vwv[0]); + FPrintf(dump_smb_file,"dialect index = %ld\n",vwv[0]); } } } @@ -2392,71 +2404,71 @@ print_smb_contents(const struct smb_header * header,int command,enum smb_packet_ int unicode_password_length; unsigned long capabilities; - Printf("consumer's maximum buffer size = %ld\n",vwv[0]); - Printf("actual maximum multiplexed pending requests = %ld\n",vwv[1]); - Printf("vc number = %ld\n",vwv[2]); - Printf("session key = 0x%08lx\n",(((unsigned long)vwv[4]) << 16) | vwv[3]); + FPrintf(dump_smb_file,"consumer's maximum buffer size = %ld\n",vwv[0]); + FPrintf(dump_smb_file,"actual maximum multiplexed pending requests = %ld\n",vwv[1]); + FPrintf(dump_smb_file,"vc number = %ld\n",vwv[2]); + FPrintf(dump_smb_file,"session key = 0x%08lx\n",(((unsigned long)vwv[4]) << 16) | vwv[3]); oem_password_length = vwv[5]; - Printf("oem password length = %ld\n",oem_password_length); + FPrintf(dump_smb_file,"oem password length = %ld\n",oem_password_length); unicode_password_length = vwv[6]; - Printf("unicode password length = %ld\n",unicode_password_length); + FPrintf(dump_smb_file,"unicode password length = %ld\n",unicode_password_length); capabilities = (((unsigned long)vwv[10]) << 16) | vwv[9]; - Printf("capabilities = 0x%08lx\n",capabilities); + FPrintf(dump_smb_file,"capabilities = 0x%08lx\n",capabilities); if(capabilities & 0x00000001) - Printf(" CAP_RAW_MODE\n"); + FPrintf(dump_smb_file," CAP_RAW_MODE\n"); if(capabilities & 0x00000002) - Printf(" CAP_MPX_MODE\n"); + FPrintf(dump_smb_file," CAP_MPX_MODE\n"); if(capabilities & 0x00000004) - Printf(" CAP_UNICODE\n"); + FPrintf(dump_smb_file," CAP_UNICODE\n"); if(capabilities & 0x00000008) - Printf(" CAP_LARGE_FILES\n"); + FPrintf(dump_smb_file," CAP_LARGE_FILES\n"); if(capabilities & 0x00000010) - Printf(" CAP_NT_SMBS\n"); + FPrintf(dump_smb_file," CAP_NT_SMBS\n"); if(capabilities & 0x00000020) - Printf(" CAP_RPC_REMOTE_APIS\n"); + FPrintf(dump_smb_file," CAP_RPC_REMOTE_APIS\n"); if(capabilities & 0x00000040) - Printf(" CAP_STATUS32\n"); + FPrintf(dump_smb_file," CAP_STATUS32\n"); if(capabilities & 0x00000080) - Printf(" CAP_LEVEL_II_OPLOCKS\n"); + FPrintf(dump_smb_file," CAP_LEVEL_II_OPLOCKS\n"); if(capabilities & 0x00000100) - Printf(" CAP_LOCK_AND_READ\n"); + FPrintf(dump_smb_file," CAP_LOCK_AND_READ\n"); if(capabilities & 0x00000200) - Printf(" CAP_NT_FIND\n"); + FPrintf(dump_smb_file," CAP_NT_FIND\n"); if(capabilities & 0x00000400) - Printf(" CAP_BULK_TRANSFER\n"); + FPrintf(dump_smb_file," CAP_BULK_TRANSFER\n"); if(capabilities & 0x00000800) - Printf(" CAP_COMPRESSED_DATA\n"); + FPrintf(dump_smb_file," CAP_COMPRESSED_DATA\n"); if(capabilities & 0x00001000) - Printf(" CAP_DFS\n"); + FPrintf(dump_smb_file," CAP_DFS\n"); if(capabilities & 0x00002000) - Printf(" CAP_QUADWORD_ALIGNED\n"); + FPrintf(dump_smb_file," CAP_QUADWORD_ALIGNED\n"); if(capabilities & 0x00004000) - Printf(" CAP_LARGE_READX\n"); + FPrintf(dump_smb_file," CAP_LARGE_READX\n"); if(capabilities & 0x00800000) - Printf(" CAP_UNIX\n"); + FPrintf(dump_smb_file," CAP_UNIX\n"); if(capabilities & 0x80000000) - Printf(" CAP_EXTENDED_SECURITY\n"); + FPrintf(dump_smb_file," CAP_EXTENDED_SECURITY\n"); if(num_data_bytes > 0) { @@ -2501,10 +2513,10 @@ print_smb_contents(const struct smb_header * header,int command,enum smb_packet_ } } - Printf("account name = '%s'\n",account_name); - Printf("primary domain = '%s'\n",primary_domain); - Printf("native os = '%s'\n",native_os); - Printf("native lan man = '%s'\n",native_lan_man); + FPrintf(dump_smb_file,"account name = '%s'\n",account_name); + FPrintf(dump_smb_file,"primary domain = '%s'\n",primary_domain); + FPrintf(dump_smb_file,"native os = '%s'\n",native_os); + FPrintf(dump_smb_file,"native lan man = '%s'\n",native_lan_man); } else { @@ -2514,13 +2526,13 @@ print_smb_contents(const struct smb_header * header,int command,enum smb_packet_ return; request_mode = vwv[0]; - Printf("request mode = 0x%04lx\n",request_mode); + FPrintf(dump_smb_file,"request mode = 0x%04lx\n",request_mode); if(request_mode & 0x0001) - Printf(" SMB_SETUP_GUEST\n"); + FPrintf(dump_smb_file," SMB_SETUP_GUEST\n"); if(request_mode & 0x0002) - Printf(" SMB_SETUP_USE_LANMAN_KEY\n"); + FPrintf(dump_smb_file," SMB_SETUP_USE_LANMAN_KEY\n"); if(num_data_bytes > 0) { @@ -2539,9 +2551,9 @@ print_smb_contents(const struct smb_header * header,int command,enum smb_packet_ primary_domain = &native_lan_man[len+1]; } - Printf("native os = '%s'\n",native_os); - Printf("native lan man = '%s'\n",native_lan_man); - Printf("primary domain = '%s'\n",primary_domain); + FPrintf(dump_smb_file,"native os = '%s'\n",native_os); + FPrintf(dump_smb_file,"native lan man = '%s'\n",native_lan_man); + FPrintf(dump_smb_file,"primary domain = '%s'\n",primary_domain); } } } @@ -2565,14 +2577,14 @@ print_smb_contents(const struct smb_header * header,int command,enum smb_packet_ int password_length; flags = vwv[0]; - Printf("flags = 0x%04lx\n",flags); + FPrintf(dump_smb_file,"flags = 0x%04lx\n",flags); if(flags & 0x0001) - Printf(" TREE_CONNECT_ANDX_DISCONNECT_TID\n"); + FPrintf(dump_smb_file," TREE_CONNECT_ANDX_DISCONNECT_TID\n"); password_length = vwv[1]; - Printf("password length = %ld\n",password_length); + FPrintf(dump_smb_file,"password length = %ld\n",password_length); password = args; len = password_length; @@ -2590,9 +2602,9 @@ print_smb_contents(const struct smb_header * header,int command,enum smb_packet_ dev_name = &path[len]; - Printf("path = '%s'\n",path); - // Printf("password = '%s'\n",password); - Printf("dev name = '%s'\n",dev_name); + FPrintf(dump_smb_file,"path = '%s'\n",path); + // FPrintf(dump_smb_file,"password = '%s'\n",password); + FPrintf(dump_smb_file,"dev name = '%s'\n",dev_name); } else { @@ -2609,18 +2621,18 @@ print_smb_contents(const struct smb_header * header,int command,enum smb_packet_ /* ZZZ this could be Unicode text. */ native_file_system = &service[len]; - Printf("service = '%s'\n",service); - Printf("native file system = '%s'\n",native_file_system); + FPrintf(dump_smb_file,"service = '%s'\n",service); + FPrintf(dump_smb_file,"native file system = '%s'\n",native_file_system); } } else if (command == SMB_COM_QUERY_INFORMATION_DISK) { if(smb_packet_source == smb_packet_to_consumer && num_parameter_words > 3) { - Printf("allocation units/server = %ld\n",vwv[0]); - Printf("blocks/allocation unit = %ld\n",vwv[1]); - Printf("block size (in bytes) = %ld\n",vwv[2]); - Printf("free allocation units = %ld\n",vwv[3]); + FPrintf(dump_smb_file,"allocation units/server = %ld\n",vwv[0]); + FPrintf(dump_smb_file,"blocks/allocation unit = %ld\n",vwv[1]); + FPrintf(dump_smb_file,"block size (in bytes) = %ld\n",vwv[2]); + FPrintf(dump_smb_file,"free allocation units = %ld\n",vwv[3]); } } else if (command == SMB_COM_SEARCH) @@ -2634,38 +2646,38 @@ print_smb_contents(const struct smb_header * header,int command,enum smb_packet_ int len; int offset; - Printf("max count = %ld\n",vwv[0]); + FPrintf(dump_smb_file,"max count = %ld\n",vwv[0]); search_attributes = vwv[1]; - Printf("search attributes = 0x%04lx\n",search_attributes); + FPrintf(dump_smb_file,"search attributes = 0x%04lx\n",search_attributes); if(search_attributes & 0x0100) - Printf(" SMB_SEARCH_ATTRIBUTE_READONLY\n"); + FPrintf(dump_smb_file," SMB_SEARCH_ATTRIBUTE_READONLY\n"); if(search_attributes & 0x0200) - Printf(" SMB_SEARCH_ATTRIBUTE_HIDDEN\n"); + FPrintf(dump_smb_file," SMB_SEARCH_ATTRIBUTE_HIDDEN\n"); if(search_attributes & 0x0400) - Printf(" SMB_SEARCH_ATTRIBUTE_SYSTEM\n"); + FPrintf(dump_smb_file," SMB_SEARCH_ATTRIBUTE_SYSTEM\n"); if(search_attributes & 0x1000) - Printf(" SMB_SEARCH_ATTRIBUTE_DIRECTORY\n"); + FPrintf(dump_smb_file," SMB_SEARCH_ATTRIBUTE_DIRECTORY\n"); if(search_attributes & 0x2000) - Printf(" SMB_SEARCH_ATTRIBUTE_ARCHIVE\n"); + FPrintf(dump_smb_file," SMB_SEARCH_ATTRIBUTE_ARCHIVE\n"); file_name = (char *)data; len = strlen(file_name); - Printf("buffer format = %ld\n",file_name[0]); - Printf("file name = '%s'\n",file_name+1); + FPrintf(dump_smb_file,"buffer format = %ld\n",file_name[0]); + FPrintf(dump_smb_file,"file name = '%s'\n",file_name+1); resume_key_data = (unsigned char *)&file_name[len+1]; offset = 0; resume_key_length = next_data_word(resume_key_data,&offset); - Printf("resume key length = %ld\n",resume_key_length); + FPrintf(dump_smb_file,"resume key length = %ld\n",resume_key_length); if(resume_key_length == 21) { @@ -2677,21 +2689,21 @@ print_smb_contents(const struct smb_header * header,int command,enum smb_packet_ server_state = next_data_bytes(resume_key_data,16,&offset); client_state = next_data_bytes(resume_key_data,4,&offset); - Printf("resume key reserved = %02lx\n",reserved); + FPrintf(dump_smb_file,"resume key reserved = %02lx\n",reserved); - Printf("resume key server state = "); + FPrintf(dump_smb_file,"resume key server state = "); for(i = 0 ; i < 16 ; i++) - Printf("%02lx",server_state[i]); + FPrintf(dump_smb_file,"%02lx",server_state[i]); - Printf("\n"); + FPrintf(dump_smb_file,"\n"); - Printf("resume key client state = "); + FPrintf(dump_smb_file,"resume key client state = "); for(i = 0 ; i < 4 ; i++) - Printf("%02lx",client_state[i]); + FPrintf(dump_smb_file,"%02lx",client_state[i]); - Printf("\n"); + FPrintf(dump_smb_file,"\n"); } } else @@ -2715,78 +2727,78 @@ print_smb_contents(const struct smb_header * header,int command,enum smb_packet_ count = vwv[0]; - Printf("count = %ld\n",count); + FPrintf(dump_smb_file,"count = %ld\n",count); offset = 0; buffer_format = next_data_byte(data,&offset); - Printf("buffer format = %ld\n",buffer_format); + FPrintf(dump_smb_file,"buffer format = %ld\n",buffer_format); data_length = next_data_word(data,&offset); - Printf("data length = %ld\n",data_length); + FPrintf(dump_smb_file,"data length = %ld\n",data_length); for(j = 0 ; j < count ; j++) { - Printf("directory entry [%ld]:\n",j); + FPrintf(dump_smb_file,"directory entry [%ld]:\n",j); reserved = next_data_byte(data,&offset); server_state = next_data_bytes(data,16,&offset); client_state = next_data_bytes(data,4,&offset); - Printf("\tresume key reserved = %02lx\n",reserved); + FPrintf(dump_smb_file,"\tresume key reserved = %02lx\n",reserved); - Printf("\tresume key server state = "); + FPrintf(dump_smb_file,"\tresume key server state = "); for(i = 0 ; i < 16 ; i++) - Printf("%02lx",server_state[i]); + FPrintf(dump_smb_file,"%02lx",server_state[i]); - Printf("\n"); + FPrintf(dump_smb_file,"\n"); - Printf("\tresume key client state = "); + FPrintf(dump_smb_file,"\tresume key client state = "); for(i = 0 ; i < 4 ; i++) - Printf("%02lx",client_state[i]); + FPrintf(dump_smb_file,"%02lx",client_state[i]); - Printf("\n"); + FPrintf(dump_smb_file,"\n"); file_attributes = next_data_byte(data,&offset); - Printf("file attributes = 0x%04lx\n",file_attributes); + FPrintf(dump_smb_file,"file attributes = 0x%04lx\n",file_attributes); if((file_attributes & 0x001f) == 0) - Printf("\t SMB_FILE_ATTRIBUTE_NORMAL\n"); + FPrintf(dump_smb_file,"\t SMB_FILE_ATTRIBUTE_NORMAL\n"); if(file_attributes & 0x0001) - Printf("\t SMB_FILE_ATTRIBUTE_READ_ONLY\n"); + FPrintf(dump_smb_file,"\t SMB_FILE_ATTRIBUTE_READ_ONLY\n"); if(file_attributes & 0x0002) - Printf("\t SMB_FILE_ATTRIBUTE_HIDDEN\n"); + FPrintf(dump_smb_file,"\t SMB_FILE_ATTRIBUTE_HIDDEN\n"); if(file_attributes & 0x0004) - Printf("\t SMB_FILE_ATTRIBUTE_SYSTEM\n"); + FPrintf(dump_smb_file,"\t SMB_FILE_ATTRIBUTE_SYSTEM\n"); if(file_attributes & 0x0008) - Printf("\t SMB_FILE_ATTRIBUTE_VOLUME\n"); + FPrintf(dump_smb_file,"\t SMB_FILE_ATTRIBUTE_VOLUME\n"); if(file_attributes & 0x0010) - Printf("\t SMB_FILE_ATTRIBUTE_DIRECTORY\n"); + FPrintf(dump_smb_file,"\t SMB_FILE_ATTRIBUTE_DIRECTORY\n"); if(file_attributes & 0x0020) - Printf("\t SMB_FILE_ATTRIBUTE_ARCHIVE\n"); + FPrintf(dump_smb_file,"\t SMB_FILE_ATTRIBUTE_ARCHIVE\n"); last_write_time = next_data_word(data,&offset); last_write_date = next_data_word(data,&offset); - Printf("\tlast write time = 0x%04lx\n",last_write_time); - Printf("\tlast write date = 0x%04lx\n",last_write_date); - Printf("\tlast write = %s\n",convert_smb_date_time_to_string(last_write_date,last_write_time)); - Printf("\tfile size = %lu\n",next_data_dword(data,&offset)); + FPrintf(dump_smb_file,"\tlast write time = 0x%04lx\n",last_write_time); + FPrintf(dump_smb_file,"\tlast write date = 0x%04lx\n",last_write_date); + FPrintf(dump_smb_file,"\tlast write = %s\n",convert_smb_date_time_to_string(last_write_date,last_write_time)); + FPrintf(dump_smb_file,"\tfile size = %lu\n",next_data_dword(data,&offset)); file_name = (const char *)next_data_bytes(data,13,&offset); - Printf("\tfile name = '%s'\n",file_name); + FPrintf(dump_smb_file,"\tfile name = '%s'\n",file_name); } } } @@ -2806,7 +2818,7 @@ print_smb_parameters(int num_parameter_words,const unsigned char *parameters) { word_value = parameters[j] + (((int)parameters[j+1]) << 8); - Printf(" %04lx: %04lx (bytes: %02lx%02lx)\n",i,word_value,parameters[j],parameters[j+1]); + FPrintf(dump_smb_file," %04lx: %04lx (bytes: %02lx%02lx)\n",i,word_value,parameters[j],parameters[j+1]); } } } @@ -4016,16 +4028,16 @@ print_smb_header(const struct smb_header * header,int header_length,const unsign { nt_status_quota_list_inconsistent, "quota list inconsistent" }, { nt_status_file_is_offline, "file is offline" }, //{ nt_status_notify_enum_dir, "notify enum dir" }, - { -1, NULL } + { -1, NULL } }; const char * command_name; struct line_buffer lb; if(smb_packet_source == smb_packet_from_consumer) - Printf("message type = Request (client --> server)\n"); + FPrintf(dump_smb_file,"message type = Request (client --> server)\n"); else - Printf("message type = Response (server --> client)\n"); + FPrintf(dump_smb_file,"message type = Response (server --> client)\n"); if(header->flags2 & SMB_FLAGS2_32BIT_STATUS) { @@ -4046,7 +4058,7 @@ print_smb_header(const struct smb_header * header,int header_length,const unsign } } - Printf("status = [%08lx] severity:%s, facility:%s (%ld), code:%s (%ld)\n",header->status, + FPrintf(dump_smb_file,"status = [%08lx] severity:%s, facility:%s (%ld), code:%s (%ld)\n",header->status, severity ? "failure" : "success",facility ? "?" : "default",facility,error_code_name,error_code); } else @@ -4119,12 +4131,12 @@ print_smb_header(const struct smb_header * header,int header_length,const unsign break; } - Printf("status = [%08lx] error:%s (%ld), code:%s (%ld)\n",header->status, + FPrintf(dump_smb_file,"status = [%08lx] error:%s (%ld), code:%s (%ld)\n",header->status, error_class_name,error_class_value, error_code_name,error_code_value); } - Printf("flags = "); + FPrintf(dump_smb_file,"flags = "); init_line_buffer(&lb); @@ -4163,9 +4175,9 @@ print_smb_header(const struct smb_header * header,int header_length,const unsign else add_lb_flag(&lb,"support-lockread=no"); - Printf("%s\n",lb.line); + FPrintf(dump_smb_file,"%s\n",lb.line); - Printf("flags2 = "); + FPrintf(dump_smb_file,"flags2 = "); init_line_buffer(&lb); @@ -4214,17 +4226,17 @@ print_smb_header(const struct smb_header * header,int header_length,const unsign else add_lb_flag(&lb,"client-names-supported=8.3"); - Printf("%s\n",lb.line); + FPrintf(dump_smb_file,"%s\n",lb.line); - Printf("signature = %04lx%04lx%04lx%04lx\n",header->extra.signature[0],header->extra.signature[1], + FPrintf(dump_smb_file,"signature = %04lx%04lx%04lx%04lx\n",header->extra.signature[0],header->extra.signature[1], header->extra.signature[2],header->extra.signature[3]); - Printf("tid = %04lx\n",header->tid); - Printf("pid = %04lx\n",header->pid); - Printf("uid = %04lx\n",header->uid); - Printf("mid = %04lx\n",header->mid); + FPrintf(dump_smb_file,"tid = %04lx\n",header->tid); + FPrintf(dump_smb_file,"pid = %04lx\n",header->pid); + FPrintf(dump_smb_file,"uid = %04lx\n",header->uid); + FPrintf(dump_smb_file,"mid = %04lx\n",header->mid); - Printf("length = %ld (packet size:%ld, buffer size:%ld)\n",header_length,packet_size,max_buffer_size); + FPrintf(dump_smb_file,"length = %ld (packet size:%ld, buffer size:%ld)\n",header_length,packet_size,max_buffer_size); if(is_smb_andx_command(header->command)) { @@ -4235,19 +4247,19 @@ print_smb_header(const struct smb_header * header,int header_length,const unsign command_name = get_smb_command_name(header->command); if(command_name != NULL) - Printf("command = %s (ANDX)\n",command_name); + FPrintf(dump_smb_file,"command = %s (ANDX)\n",command_name); else - Printf("command = 0x%02lx (ANDX)\n",header->command); + FPrintf(dump_smb_file,"command = 0x%02lx (ANDX)\n",header->command); - Printf("parameter words = %ld\n",header->num_parameter_words - 2); + FPrintf(dump_smb_file,"parameter words = %ld\n",header->num_parameter_words - 2); if(header->num_parameter_words - 2 > 0) print_smb_parameters(header->num_parameter_words - 2,&header->parameters[4]); - Printf("data bytes = %ld\n",header->num_data_bytes); + FPrintf(dump_smb_file,"data bytes = %ld\n",header->num_data_bytes); /* If there are any data bytes, print them like "type hex .." would. */ - if(header->num_data_bytes > 0) + if(dump_smb_level > 0 && header->num_data_bytes > 0) print_smb_data(&lb,header->num_data_bytes,header->data); print_smb_contents(header, header->command, smb_packet_source, header->num_parameter_words - 2, @@ -4262,22 +4274,22 @@ print_smb_header(const struct smb_header * header,int header_length,const unsign command_name = get_smb_command_name(andx_header[0]); if(command_name != NULL) - Printf("command = %s (ANDX)\n",command_name); + FPrintf(dump_smb_file,"command = %s (ANDX)\n",command_name); else - Printf("command = 0x%02lx (ANDX)\n",header->command); + FPrintf(dump_smb_file,"command = 0x%02lx (ANDX)\n",header->command); - Printf("andx_offset = 0x%02lx\n",(((int)andx_header[3]) << 8) + andx_header[2]); + FPrintf(dump_smb_file,"andx_offset = 0x%02lx\n",(((int)andx_header[3]) << 8) + andx_header[2]); - Printf("parameter words = %ld\n",num_parameter_words); + FPrintf(dump_smb_file,"parameter words = %ld\n",num_parameter_words); if(num_parameter_words > 0) print_smb_parameters(num_parameter_words,&andx_header[4]); num_data_bytes = andx_header[4 + num_parameter_words * 2] + (((int)andx_header[4 + num_parameter_words * 2 + 1]) << 8); - Printf("data bytes = %ld\n",num_data_bytes); + FPrintf(dump_smb_file,"data bytes = %ld\n",num_data_bytes); - if(num_data_bytes > 0) + if(dump_smb_level > 0 && num_data_bytes > 0) print_smb_data(&lb,num_data_bytes,&andx_header[4 + num_parameter_words * 2 + 2]); print_smb_contents(header, andx_header[0], smb_packet_source, num_parameter_words, &andx_header[4], @@ -4291,19 +4303,19 @@ print_smb_header(const struct smb_header * header,int header_length,const unsign command_name = get_smb_command_name(header->command); if(command_name != NULL) - Printf("command = %s\n",command_name); + FPrintf(dump_smb_file,"command = %s\n",command_name); else - Printf("command = 0x%02lx\n",header->command); + FPrintf(dump_smb_file,"command = 0x%02lx\n",header->command); - Printf("parameter words = %ld\n",header->num_parameter_words); + FPrintf(dump_smb_file,"parameter words = %ld\n",header->num_parameter_words); if(header->num_parameter_words > 0) print_smb_parameters(header->num_parameter_words,(unsigned char *)header->parameters); - Printf("data bytes = %ld\n",header->num_data_bytes); + FPrintf(dump_smb_file,"data bytes = %ld\n",header->num_data_bytes); /* If there are any data bytes, print them like "type hex .." would. */ - if(header->num_data_bytes > 0) + if(dump_smb_level > 0 && header->num_data_bytes > 0) print_smb_data(&lb,header->num_data_bytes,header->data); print_smb_contents(header, header->command, smb_packet_source, header->num_parameter_words, header->parameters, @@ -4366,43 +4378,43 @@ dump_netbios_header(const char *file_name,int line_number,const unsigned char *n break; } - Printf("---\n"); - Printf("%s:%ld\n",file_name,line_number); + FPrintf(dump_smb_file,"---\n"); + FPrintf(dump_smb_file,"%s:%ld\n",file_name,line_number); - Printf("netbios session type=%s (0x%02lx), flags=0x%02lx, length=%ld\n", + FPrintf(dump_smb_file,"netbios session type=%s (0x%02lx), flags=0x%02lx, length=%ld\n", session_type_label,session_type,session_flags,session_length); if (session_type == 0x83 && netbios_payload != NULL && netbios_payload_size > 0) { int error_code = *netbios_payload; - Printf("error code = 0x%02lx\n",error_code); + FPrintf(dump_smb_file,"error code = 0x%02lx\n",error_code); switch(error_code) { case 0x80: - Printf(" Not listening on called name\n"); + FPrintf(dump_smb_file," Not listening on called name\n"); break; case 0x81: - Printf(" Not listening for calling name\n"); + FPrintf(dump_smb_file," Not listening for calling name\n"); break; case 0x82: - Printf(" Called name not present\n"); + FPrintf(dump_smb_file," Called name not present\n"); break; case 0x83: - Printf(" Insufficient resources\n"); + FPrintf(dump_smb_file," Insufficient resources\n"); break; case 0x8f: - Printf(" Unspecific error\n"); + FPrintf(dump_smb_file," Unspecific error\n"); break; } } @@ -4410,7 +4422,7 @@ dump_netbios_header(const char *file_name,int line_number,const unsigned char *n { struct line_buffer lb; - Printf("session data (%ld bytes) =\n",netbios_payload_size); + FPrintf(dump_smb_file,"session data (%ld bytes) =\n",netbios_payload_size); print_smb_data(&lb,netbios_payload_size,netbios_payload); } @@ -4428,16 +4440,19 @@ dump_smb(const char *file_name,int line_number,int is_raw_data, { if(is_raw_data) { - struct line_buffer lb; + if(dump_smb_level > 1) + { + struct line_buffer lb; - Printf("---\n"); - Printf("%s:%ld\n",file_name,line_number); + FPrintf(dump_smb_file,"---\n"); + FPrintf(dump_smb_file,"%s:%ld\n",file_name,line_number); - Printf("raw data (%ld bytes) =\n",length); + FPrintf(dump_smb_file,"raw data (%ld bytes) =\n",length); - print_smb_data(&lb,length,packet); + print_smb_data(&lb,length,packet); - Printf("---\n\n"); + FPrintf(dump_smb_file,"---\n\n"); + } } else { @@ -4449,13 +4464,13 @@ dump_smb(const char *file_name,int line_number,int is_raw_data, num_bytes_read = fill_header(packet,length,&header); if(num_bytes_read <= length) { - Printf("---\n"); - Printf("%s:%ld\n",file_name,line_number); + FPrintf(dump_smb_file,"---\n"); + FPrintf(dump_smb_file,"%s:%ld\n",file_name,line_number); print_smb_header(&header,num_bytes_read,packet,length, smb_packet_source,max_buffer_size); - Printf("---\n\n"); + FPrintf(dump_smb_file,"---\n\n"); } } } @@ -4465,9 +4480,54 @@ dump_smb(const char *file_name,int line_number,int is_raw_data, /*****************************************************************************/ void -control_smb_dump(int enable) +control_smb_dump(int enable,int level,const char * file_name) { + /* Close the output file if necessary. */ + if(!enable && !dump_smb_stdout && dump_smb_file != (BPTR)NULL) + Close(dump_smb_file); + + dump_smb_file = (BPTR)NULL; + dump_smb_enabled = enable; + dump_smb_level = level; + + if(enable) + { + dump_smb_stdout = TRUE; + + /* Write the output to a file? */ + if(file_name != NULL) + { + /* Try to append the output to an existing file. */ + dump_smb_file = Open(file_name,MODE_OLDFILE); + if(dump_smb_file == (BPTR)NULL) + { + /* File does not exist? Then create a new file. */ + if(IoErr() == ERROR_OBJECT_NOT_FOUND) + { + dump_smb_file = Open(file_name,MODE_NEWFILE); + if(dump_smb_file != (BPTR)NULL) + ChangeMode(CHANGE_FH,dump_smb_file,SHARED_LOCK); + } + } + else + { + /* File exists; seek to the end of it. */ + Seek(dump_smb_file,0,OFFSET_END); + } + + /* If a file was created or opened for appending + * output to it, make sure it will get closed + * eventually. + */ + if(dump_smb_file != (BPTR)NULL) + dump_smb_stdout = FALSE; + } + + /* No file was opened: output to STDOUT. */ + if(dump_smb_file == (BPTR)NULL) + dump_smb_file = Output(); + } } /*****************************************************************************/ diff --git a/source_code/dump_smb.h b/source_code/dump_smb.h index 356fa97..c4944ff 100644 --- a/source_code/dump_smb.h +++ b/source_code/dump_smb.h @@ -200,7 +200,7 @@ extern void dump_smb(const char *file_name,int line_number,int is_raw_data, const void * packet,int length,enum smb_packet_source_t smb_packet_source, int max_buffer_size); -extern void control_smb_dump(int enable); +extern void control_smb_dump(int enable,int level,const char * file_name); /*****************************************************************************/