395 lines
11 KiB
C
395 lines
11 KiB
C
|
#include "convlog.h"
|
||
|
#include "inetcom.h"
|
||
|
#include "logtype.h"
|
||
|
|
||
|
|
||
|
//
|
||
|
// Current output file
|
||
|
//
|
||
|
|
||
|
OUTFILESTATUS WebOutFile = {0};
|
||
|
OUTFILESTATUS NoConvertOutFile = {0};
|
||
|
|
||
|
//
|
||
|
// Used for find first
|
||
|
//
|
||
|
|
||
|
WIN32_FIND_DATA FindData = {0};
|
||
|
|
||
|
//
|
||
|
// struct for holding command line args
|
||
|
//
|
||
|
|
||
|
BOOL DoDNSConversion = FALSE;
|
||
|
BOOL SaveFTPEntries = FALSE;
|
||
|
BOOL NoFormatConversion = FALSE;
|
||
|
CHAR FTPSaveFile[MAX_PATH+1] = {0};
|
||
|
CHAR NCSAGMTOffset[MAX_PATH+1] = {0};
|
||
|
DWORD LogFileFormat = LOGFILE_INVALID;
|
||
|
CHAR InputFileName[MAX_PATH+1] = {0};
|
||
|
CHAR OutputDir[MAX_PATH+1] = {0};
|
||
|
CHAR TempDir[MAX_PATH+1] = {0};
|
||
|
DWORD nWebLineCount = 0;
|
||
|
DATEFORMAT dwDateFormat = DateFormatUsa;
|
||
|
BOOL bOnErrorContinue = FALSE;
|
||
|
|
||
|
//
|
||
|
// struct that holds log line items
|
||
|
//
|
||
|
|
||
|
INLOGLINE InLogLine = {0};
|
||
|
|
||
|
int
|
||
|
__cdecl
|
||
|
main(
|
||
|
int argc,
|
||
|
char *argv[]
|
||
|
)
|
||
|
{
|
||
|
|
||
|
FILE *fpInFile; //log File to open
|
||
|
|
||
|
HANDLE hFile; //Handle for FindFirstFile
|
||
|
|
||
|
//
|
||
|
// Buffer to hold log line
|
||
|
//
|
||
|
|
||
|
CHAR szInBuf[MAX_LOG_RECORD_LEN+1];
|
||
|
|
||
|
//
|
||
|
// File mask to search for
|
||
|
//
|
||
|
|
||
|
CHAR szFileMask[MAX_PATH+1];
|
||
|
CHAR szInfileName[MAX_PATH+1];
|
||
|
CHAR szWorkingDir[MAX_PATH+1];
|
||
|
|
||
|
int nTotalWebCount = 0;
|
||
|
|
||
|
BOOL bWebFound = FALSE; //did we find a web line?
|
||
|
BOOL bNoConvertFound = FALSE; //did we find any NoConvert lines?
|
||
|
BOOL bRet; //used for testing returns
|
||
|
DWORD dwErr; //used to hold error codes
|
||
|
int nLineCount = 0; //number of lines read from input file
|
||
|
int nTotalCount = 0;
|
||
|
|
||
|
//int nCount = 0; Bug # 101690
|
||
|
CHAR *pCh;
|
||
|
|
||
|
DWORD dwFieldMask;
|
||
|
BOOL fGetHeader;
|
||
|
DWORD nLinesDumped = 0;
|
||
|
DWORD dwGetLogLineResult;
|
||
|
BOOL bContinue;
|
||
|
DWORD dwCurrentLine;
|
||
|
|
||
|
//
|
||
|
// initialize data structure
|
||
|
//
|
||
|
|
||
|
setlocale(LC_ALL, ".ACP" );
|
||
|
|
||
|
WebOutFile.fpOutFile = NULL;
|
||
|
NoConvertOutFile.fpOutFile = NULL;
|
||
|
|
||
|
ZeroMemory(szInBuf, sizeof(szInBuf));
|
||
|
strcpy(OutputDir, ".\\");
|
||
|
|
||
|
switch ( ParseArgs(argc, argv) ) {
|
||
|
case ILLEGAL_COMMAND_LINE:
|
||
|
Usage(argv[0]);
|
||
|
return 0;
|
||
|
|
||
|
case OUT_DIR_NOT_OK:
|
||
|
printfids(IDS_BAD_DIR, OutputDir);
|
||
|
return 0;
|
||
|
|
||
|
case ERROR_BAD_NONE:
|
||
|
printfids(IDS_BAD_NONE_ERR);
|
||
|
return 0;
|
||
|
|
||
|
case COMMAND_LINE_OK:
|
||
|
break;
|
||
|
}
|
||
|
|
||
|
if ( DoDNSConversion ) {
|
||
|
|
||
|
INT serr;
|
||
|
WSADATA wsaData;
|
||
|
|
||
|
if (serr = WSAStartup(MAKEWORD(2,0), &wsaData) != 0) {
|
||
|
printfids(IDS_WINSOCK_ERR, serr);
|
||
|
DoDNSConversion = FALSE;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
if ( (LogFileFormat == LOGFILE_NCSA) && !DoDNSConversion ) {
|
||
|
printfids(IDS_NO_CONVERSION_NEEDED);
|
||
|
return(0);
|
||
|
}
|
||
|
|
||
|
if ( !InitDateStrings() ) {
|
||
|
printfids(IDS_BAD_DATESTRINGS);
|
||
|
}
|
||
|
|
||
|
if (DoDNSConversion) {
|
||
|
|
||
|
InitHashTable(2000);
|
||
|
AddLocalMachineToCache( );
|
||
|
}
|
||
|
|
||
|
strcpy (szWorkingDir, InputFileName);
|
||
|
|
||
|
|
||
|
// Bug # 101690
|
||
|
//
|
||
|
// for (nCount = strlen(szWorkingDir) -1; nCount >= 0; nCount--) {
|
||
|
//
|
||
|
// if ('\\' == szWorkingDir[nCount]) {
|
||
|
// szWorkingDir[nCount+1] = '\0';
|
||
|
// break;
|
||
|
// }
|
||
|
//
|
||
|
// }
|
||
|
|
||
|
// if (nCount < 0) {
|
||
|
// strcpy (szWorkingDir, ".\\");
|
||
|
// }
|
||
|
//
|
||
|
|
||
|
pCh = _mbsrchr(szWorkingDir, '\\');
|
||
|
|
||
|
if (pCh != NULL) {
|
||
|
*(pCh+1) = '\0';
|
||
|
} else {
|
||
|
strcpy (szWorkingDir, ".\\");
|
||
|
}
|
||
|
|
||
|
|
||
|
strcpy(szFileMask, InputFileName);
|
||
|
hFile = FindFirstFile (szFileMask, &FindData);
|
||
|
|
||
|
if (INVALID_HANDLE_VALUE == hFile) {
|
||
|
printfids(IDS_FILE_NONE, szFileMask);
|
||
|
return(0);
|
||
|
}
|
||
|
|
||
|
do {
|
||
|
|
||
|
if (!(FILE_ATTRIBUTE_DIRECTORY & FindData.dwFileAttributes)) {
|
||
|
|
||
|
strcpy(szInfileName, szWorkingDir);
|
||
|
strcat(szInfileName, FindData.cFileName);
|
||
|
|
||
|
fpInFile = fopen(szInfileName, "r");
|
||
|
printfids(IDS_FILE_OPEN, FindData.cFileName);
|
||
|
|
||
|
nLineCount = 0;
|
||
|
dwCurrentLine = 0;
|
||
|
|
||
|
{
|
||
|
//
|
||
|
// Do file conversion
|
||
|
//
|
||
|
|
||
|
strcpy (WebOutFile.szLastDate, NEW_DATETIME);
|
||
|
strcpy (WebOutFile.szLastTime, NEW_DATETIME);
|
||
|
|
||
|
bWebFound = FALSE;
|
||
|
nWebLineCount = 0;
|
||
|
nLinesDumped = 0;
|
||
|
|
||
|
ExtendedFieldsDefined = FALSE;
|
||
|
szGlobalDate[0] = '\0';
|
||
|
}
|
||
|
|
||
|
fGetHeader = TRUE;
|
||
|
bContinue = TRUE;
|
||
|
|
||
|
while ((bContinue) && (!feof(fpInFile)))
|
||
|
{
|
||
|
|
||
|
dwCurrentLine++;
|
||
|
dwGetLogLineResult = GetLogLine( fpInFile, szInBuf, sizeof(szInBuf), &InLogLine);
|
||
|
|
||
|
if (dwGetLogLineResult == GETLOG_SUCCESS)
|
||
|
{
|
||
|
|
||
|
nLineCount++;
|
||
|
if (DoDNSConversion) {
|
||
|
|
||
|
//
|
||
|
//Getting machine names could take days, so put out status messages
|
||
|
//
|
||
|
|
||
|
switch (nLineCount) {
|
||
|
case 25:
|
||
|
case 50:
|
||
|
case 100:
|
||
|
case 250:
|
||
|
case 500:
|
||
|
printfids(IDS_LINES_PROC, FindData.cFileName, nLineCount);
|
||
|
break;
|
||
|
default:
|
||
|
if ((nLineCount % 1000) == 0)
|
||
|
printfids(IDS_LINES_PROC, FindData.cFileName, nLineCount);
|
||
|
} //end switch
|
||
|
}
|
||
|
|
||
|
//
|
||
|
// if NCSA and just DoDNS, do no convert
|
||
|
//
|
||
|
|
||
|
if ( NoFormatConversion ||
|
||
|
|
||
|
(_strnicmp(
|
||
|
InLogLine.szService,
|
||
|
"W3SVC",
|
||
|
strlen("W3SVC")) != 0) ) {
|
||
|
|
||
|
if ( NoFormatConversion || SaveFTPEntries ) {
|
||
|
|
||
|
ProcessNoConvertLine(
|
||
|
&InLogLine,
|
||
|
FindData.cFileName,
|
||
|
szInBuf,
|
||
|
&NoConvertOutFile,
|
||
|
&bNoConvertFound);
|
||
|
} else {
|
||
|
nLinesDumped++;
|
||
|
}
|
||
|
|
||
|
} else {
|
||
|
bWebFound = TRUE;
|
||
|
if (ProcessWebLine(
|
||
|
&InLogLine,
|
||
|
FindData.cFileName,
|
||
|
&WebOutFile)) {
|
||
|
|
||
|
nWebLineCount++;
|
||
|
}
|
||
|
}
|
||
|
} //end if LogLineProcessed
|
||
|
else
|
||
|
{
|
||
|
if (dwGetLogLineResult != GETLOG_ERROR)
|
||
|
{
|
||
|
nLineCount++;
|
||
|
}
|
||
|
|
||
|
switch (dwGetLogLineResult) {
|
||
|
case GETLOG_ERROR_PARSE_NCSA:
|
||
|
printfids(IDS_FILE_NOT_NCSA,dwCurrentLine);
|
||
|
break;
|
||
|
case GETLOG_ERROR_PARSE_MSINET:
|
||
|
printfids(IDS_FILE_NOT_MSINET,dwCurrentLine);
|
||
|
break;
|
||
|
case GETLOG_ERROR_PARSE_EXTENDED:
|
||
|
printfids(IDS_BAD_EXTENDED_FORMAT,dwCurrentLine);
|
||
|
break;
|
||
|
default:
|
||
|
break;
|
||
|
}
|
||
|
|
||
|
if (!bOnErrorContinue)
|
||
|
{
|
||
|
bContinue = FALSE;
|
||
|
}
|
||
|
}
|
||
|
} //end while !eof
|
||
|
|
||
|
nTotalCount += nLineCount;
|
||
|
|
||
|
if (fpInFile) {
|
||
|
fclose(fpInFile);
|
||
|
}
|
||
|
|
||
|
if (bWebFound) {
|
||
|
|
||
|
if (WebOutFile.fpOutFile != NULL ) {
|
||
|
fclose(WebOutFile.fpOutFile);
|
||
|
WebOutFile.fpOutFile = NULL;
|
||
|
}
|
||
|
|
||
|
bRet = MoveFileEx(
|
||
|
WebOutFile.szTmpFileName,
|
||
|
WebOutFile.szOutFileName,
|
||
|
MOVEFILE_COPY_ALLOWED);
|
||
|
|
||
|
|
||
|
if (!bRet) {
|
||
|
dwErr = GetLastError();
|
||
|
switch (dwErr) {
|
||
|
case ERROR_FILE_EXISTS:
|
||
|
case ERROR_ALREADY_EXISTS:
|
||
|
CombineFiles(WebOutFile.szTmpFileName, WebOutFile.szOutFileName);
|
||
|
break;
|
||
|
case ERROR_PATH_NOT_FOUND:
|
||
|
break;
|
||
|
default:
|
||
|
printfids(IDS_FILE_ERR, dwErr);
|
||
|
return 1;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
if (bNoConvertFound) {
|
||
|
|
||
|
bNoConvertFound = FALSE;
|
||
|
|
||
|
if (NoConvertOutFile.fpOutFile != NULL) {
|
||
|
fclose(NoConvertOutFile.fpOutFile);
|
||
|
NoConvertOutFile.fpOutFile = NULL;
|
||
|
}
|
||
|
|
||
|
bRet = MoveFileEx(
|
||
|
NoConvertOutFile.szTmpFileName,
|
||
|
NoConvertOutFile.szOutFileName,
|
||
|
MOVEFILE_COPY_ALLOWED);
|
||
|
|
||
|
if (!bRet) {
|
||
|
dwErr = GetLastError();
|
||
|
switch (dwErr) {
|
||
|
|
||
|
case ERROR_FILE_EXISTS:
|
||
|
case ERROR_ALREADY_EXISTS:
|
||
|
CombineFiles(NoConvertOutFile.szTmpFileName, NoConvertOutFile.szOutFileName);
|
||
|
break;
|
||
|
case ERROR_PATH_NOT_FOUND:
|
||
|
break;
|
||
|
default:
|
||
|
printfids(IDS_FILE_ERR, dwErr);
|
||
|
exit (1);
|
||
|
break;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
nTotalWebCount += nWebLineCount;
|
||
|
printfids( IDS_LINES, FindData.cFileName, nLineCount);
|
||
|
printfids (IDS_WEB_LINES, nWebLineCount);
|
||
|
if ( nLinesDumped > 0 ) {
|
||
|
printfids( IDS_DUMP_LINES, nLinesDumped );
|
||
|
nLinesDumped = 0;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
} while (FindNextFile (hFile, &FindData));
|
||
|
|
||
|
FindClose(hFile);
|
||
|
|
||
|
printfids (IDS_TOTALS);
|
||
|
printfids (IDS_TOT_LINES, nTotalCount);
|
||
|
|
||
|
printfids (IDS_TOT_WEB_LINES, nTotalWebCount);
|
||
|
|
||
|
#if DBG
|
||
|
PrintCacheTotals();
|
||
|
#endif
|
||
|
|
||
|
return (0);
|
||
|
}
|
||
|
|
||
|
|