1*12720SWyllys.Ingersoll@Sun.COM /* 2*12720SWyllys.Ingersoll@Sun.COM * CDDL HEADER START 3*12720SWyllys.Ingersoll@Sun.COM * 4*12720SWyllys.Ingersoll@Sun.COM * The contents of this file are subject to the terms of the 5*12720SWyllys.Ingersoll@Sun.COM * Common Development and Distribution License (the "License"). 6*12720SWyllys.Ingersoll@Sun.COM * You may not use this file except in compliance with the License. 7*12720SWyllys.Ingersoll@Sun.COM * 8*12720SWyllys.Ingersoll@Sun.COM * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE 9*12720SWyllys.Ingersoll@Sun.COM * or http://www.opensolaris.org/os/licensing. 10*12720SWyllys.Ingersoll@Sun.COM * See the License for the specific language governing permissions 11*12720SWyllys.Ingersoll@Sun.COM * and limitations under the License. 12*12720SWyllys.Ingersoll@Sun.COM * 13*12720SWyllys.Ingersoll@Sun.COM * When distributing Covered Code, include this CDDL HEADER in each 14*12720SWyllys.Ingersoll@Sun.COM * file and include the License file at usr/src/OPENSOLARIS.LICENSE. 15*12720SWyllys.Ingersoll@Sun.COM * If applicable, add the following below this CDDL HEADER, with the 16*12720SWyllys.Ingersoll@Sun.COM * fields enclosed by brackets "[]" replaced with your own identifying 17*12720SWyllys.Ingersoll@Sun.COM * information: Portions Copyright [yyyy] [name of copyright owner] 18*12720SWyllys.Ingersoll@Sun.COM * 19*12720SWyllys.Ingersoll@Sun.COM * CDDL HEADER END 20*12720SWyllys.Ingersoll@Sun.COM */ 21*12720SWyllys.Ingersoll@Sun.COM 22*12720SWyllys.Ingersoll@Sun.COM /* 23*12720SWyllys.Ingersoll@Sun.COM * Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved. 24*12720SWyllys.Ingersoll@Sun.COM */ 25*12720SWyllys.Ingersoll@Sun.COM 26*12720SWyllys.Ingersoll@Sun.COM /** 27*12720SWyllys.Ingersoll@Sun.COM * \file KMSAuditLogger.cpp 28*12720SWyllys.Ingersoll@Sun.COM */ 29*12720SWyllys.Ingersoll@Sun.COM 30*12720SWyllys.Ingersoll@Sun.COM #ifndef WIN32 31*12720SWyllys.Ingersoll@Sun.COM //#include <syslog.h> 32*12720SWyllys.Ingersoll@Sun.COM #include <stdarg.h> 33*12720SWyllys.Ingersoll@Sun.COM #endif 34*12720SWyllys.Ingersoll@Sun.COM 35*12720SWyllys.Ingersoll@Sun.COM #include <stdio.h> 36*12720SWyllys.Ingersoll@Sun.COM 37*12720SWyllys.Ingersoll@Sun.COM #ifndef METAWARE 38*12720SWyllys.Ingersoll@Sun.COM #include <sys/timeb.h> 39*12720SWyllys.Ingersoll@Sun.COM #endif 40*12720SWyllys.Ingersoll@Sun.COM 41*12720SWyllys.Ingersoll@Sun.COM #include <time.h> 42*12720SWyllys.Ingersoll@Sun.COM 43*12720SWyllys.Ingersoll@Sun.COM #include "KMSAuditLogger.h" 44*12720SWyllys.Ingersoll@Sun.COM #include "ApplianceParameters.h" 45*12720SWyllys.Ingersoll@Sun.COM 46*12720SWyllys.Ingersoll@Sun.COM #define AGENT_LOG_FILE "KMSAgentLog.log" 47*12720SWyllys.Ingersoll@Sun.COM 48*12720SWyllys.Ingersoll@Sun.COM // globals for file logging 49*12720SWyllys.Ingersoll@Sun.COM static FILE* g_fpLogFileHandle = NULL; 50*12720SWyllys.Ingersoll@Sun.COM static K_MUTEX_HANDLE g_stLogFileMutex; 51*12720SWyllys.Ingersoll@Sun.COM static char g_sLogFileName[MAX_LOG_FILE_NAME_LENGTH]; 52*12720SWyllys.Ingersoll@Sun.COM 53*12720SWyllys.Ingersoll@Sun.COM // Find header in AuditLogger.h 54*12720SWyllys.Ingersoll@Sun.COM int InitializeFileLogging( const char* const i_sWorkingDirectory ) 55*12720SWyllys.Ingersoll@Sun.COM { 56*12720SWyllys.Ingersoll@Sun.COM FATAL_ASSERT( i_sWorkingDirectory ); 57*12720SWyllys.Ingersoll@Sun.COM if ( g_fpLogFileHandle != NULL ) 58*12720SWyllys.Ingersoll@Sun.COM { 59*12720SWyllys.Ingersoll@Sun.COM return false; 60*12720SWyllys.Ingersoll@Sun.COM } 61*12720SWyllys.Ingersoll@Sun.COM 62*12720SWyllys.Ingersoll@Sun.COM char sLogFileName[MAX_LOG_FILE_NAME_LENGTH]; 63*12720SWyllys.Ingersoll@Sun.COM strncpy( sLogFileName, i_sWorkingDirectory, MAX_LOG_FILE_NAME_LENGTH ); 64*12720SWyllys.Ingersoll@Sun.COM 65*12720SWyllys.Ingersoll@Sun.COM if ( sLogFileName[ strlen( sLogFileName )-1 ] != PATH_SEPARATOR ) 66*12720SWyllys.Ingersoll@Sun.COM { 67*12720SWyllys.Ingersoll@Sun.COM sLogFileName[ strlen(sLogFileName) ] = PATH_SEPARATOR ; 68*12720SWyllys.Ingersoll@Sun.COM sLogFileName[ strlen(sLogFileName) + 1 ] = '\0'; 69*12720SWyllys.Ingersoll@Sun.COM } 70*12720SWyllys.Ingersoll@Sun.COM 71*12720SWyllys.Ingersoll@Sun.COM strncat( sLogFileName, AGENT_LOG_FILE, MAX_LOG_FILE_NAME_LENGTH ); 72*12720SWyllys.Ingersoll@Sun.COM 73*12720SWyllys.Ingersoll@Sun.COM strcpy(g_sLogFileName, sLogFileName); 74*12720SWyllys.Ingersoll@Sun.COM 75*12720SWyllys.Ingersoll@Sun.COM if ( K_CreateMutex( &g_stLogFileMutex ) != K_SYS_OK ) 76*12720SWyllys.Ingersoll@Sun.COM { 77*12720SWyllys.Ingersoll@Sun.COM return false; 78*12720SWyllys.Ingersoll@Sun.COM } 79*12720SWyllys.Ingersoll@Sun.COM 80*12720SWyllys.Ingersoll@Sun.COM if ( NULL == ( g_fpLogFileHandle = fopen( g_sLogFileName, "a+t" ) ) ) 81*12720SWyllys.Ingersoll@Sun.COM { 82*12720SWyllys.Ingersoll@Sun.COM return false; 83*12720SWyllys.Ingersoll@Sun.COM } 84*12720SWyllys.Ingersoll@Sun.COM 85*12720SWyllys.Ingersoll@Sun.COM return true; 86*12720SWyllys.Ingersoll@Sun.COM } 87*12720SWyllys.Ingersoll@Sun.COM 88*12720SWyllys.Ingersoll@Sun.COM // Find header in AuditLogger.h 89*12720SWyllys.Ingersoll@Sun.COM int FinalizeFileLogging() 90*12720SWyllys.Ingersoll@Sun.COM { 91*12720SWyllys.Ingersoll@Sun.COM FATAL_ASSERT( g_fpLogFileHandle != NULL ); 92*12720SWyllys.Ingersoll@Sun.COM 93*12720SWyllys.Ingersoll@Sun.COM K_DestroyMutex( g_stLogFileMutex ); 94*12720SWyllys.Ingersoll@Sun.COM 95*12720SWyllys.Ingersoll@Sun.COM bool bSuccess = ( 0 == fclose( g_fpLogFileHandle ) ); 96*12720SWyllys.Ingersoll@Sun.COM 97*12720SWyllys.Ingersoll@Sun.COM g_fpLogFileHandle = NULL; 98*12720SWyllys.Ingersoll@Sun.COM 99*12720SWyllys.Ingersoll@Sun.COM return bSuccess; 100*12720SWyllys.Ingersoll@Sun.COM } 101*12720SWyllys.Ingersoll@Sun.COM 102*12720SWyllys.Ingersoll@Sun.COM // Find header in AuditLogger.h 103*12720SWyllys.Ingersoll@Sun.COM extern "C" int LogToFile( int i_iErrno, 104*12720SWyllys.Ingersoll@Sun.COM const char* const i_sLogLine ) 105*12720SWyllys.Ingersoll@Sun.COM { 106*12720SWyllys.Ingersoll@Sun.COM if ( g_fpLogFileHandle == NULL ) 107*12720SWyllys.Ingersoll@Sun.COM { 108*12720SWyllys.Ingersoll@Sun.COM return false; 109*12720SWyllys.Ingersoll@Sun.COM } 110*12720SWyllys.Ingersoll@Sun.COM 111*12720SWyllys.Ingersoll@Sun.COM CAutoMutex oAutoMutex( g_stLogFileMutex ); 112*12720SWyllys.Ingersoll@Sun.COM 113*12720SWyllys.Ingersoll@Sun.COM if (0 > fputs( i_sLogLine, g_fpLogFileHandle ) ) 114*12720SWyllys.Ingersoll@Sun.COM { 115*12720SWyllys.Ingersoll@Sun.COM return false; 116*12720SWyllys.Ingersoll@Sun.COM } 117*12720SWyllys.Ingersoll@Sun.COM 118*12720SWyllys.Ingersoll@Sun.COM if ( 0 > fputs( "\n", g_fpLogFileHandle ) ) 119*12720SWyllys.Ingersoll@Sun.COM { 120*12720SWyllys.Ingersoll@Sun.COM return false; 121*12720SWyllys.Ingersoll@Sun.COM } 122*12720SWyllys.Ingersoll@Sun.COM 123*12720SWyllys.Ingersoll@Sun.COM if ( fflush( g_fpLogFileHandle ) != 0 ) 124*12720SWyllys.Ingersoll@Sun.COM { 125*12720SWyllys.Ingersoll@Sun.COM return false; 126*12720SWyllys.Ingersoll@Sun.COM } 127*12720SWyllys.Ingersoll@Sun.COM 128*12720SWyllys.Ingersoll@Sun.COM return true; 129*12720SWyllys.Ingersoll@Sun.COM } 130*12720SWyllys.Ingersoll@Sun.COM 131*12720SWyllys.Ingersoll@Sun.COM static const int g_iMaxLogFileLineLength = MAX_LOG_FILE_LINE_LENGTH; 132*12720SWyllys.Ingersoll@Sun.COM 133*12720SWyllys.Ingersoll@Sun.COM 134*12720SWyllys.Ingersoll@Sun.COM int Log_function( 135*12720SWyllys.Ingersoll@Sun.COM int i_iErrno, 136*12720SWyllys.Ingersoll@Sun.COM const char* const i_sOperation, 137*12720SWyllys.Ingersoll@Sun.COM const char* const i_sEntityID, 138*12720SWyllys.Ingersoll@Sun.COM const char* const i_sNetworkAddress, 139*12720SWyllys.Ingersoll@Sun.COM const char* const i_sMessage ) 140*12720SWyllys.Ingersoll@Sun.COM { 141*12720SWyllys.Ingersoll@Sun.COM char sFileLogEntry[500]; 142*12720SWyllys.Ingersoll@Sun.COM const int iTempSize = 100; 143*12720SWyllys.Ingersoll@Sun.COM 144*12720SWyllys.Ingersoll@Sun.COM timeb stTime; 145*12720SWyllys.Ingersoll@Sun.COM ftime(&stTime); 146*12720SWyllys.Ingersoll@Sun.COM 147*12720SWyllys.Ingersoll@Sun.COM struct tm* pstTime = gmtime( &(stTime.time) ); 148*12720SWyllys.Ingersoll@Sun.COM 149*12720SWyllys.Ingersoll@Sun.COM K_snprintf( 150*12720SWyllys.Ingersoll@Sun.COM sFileLogEntry, 151*12720SWyllys.Ingersoll@Sun.COM iTempSize, 152*12720SWyllys.Ingersoll@Sun.COM "%04d-%02d-%02d %02d:%02d:%02d.%03dZ", 153*12720SWyllys.Ingersoll@Sun.COM pstTime->tm_year+1900, 154*12720SWyllys.Ingersoll@Sun.COM pstTime->tm_mon+1, 155*12720SWyllys.Ingersoll@Sun.COM pstTime->tm_mday, 156*12720SWyllys.Ingersoll@Sun.COM pstTime->tm_hour, 157*12720SWyllys.Ingersoll@Sun.COM pstTime->tm_min, 158*12720SWyllys.Ingersoll@Sun.COM pstTime->tm_sec, 159*12720SWyllys.Ingersoll@Sun.COM stTime.millitm); 160*12720SWyllys.Ingersoll@Sun.COM 161*12720SWyllys.Ingersoll@Sun.COM if ( i_sEntityID ) 162*12720SWyllys.Ingersoll@Sun.COM { 163*12720SWyllys.Ingersoll@Sun.COM strcat(sFileLogEntry," AgentID="); 164*12720SWyllys.Ingersoll@Sun.COM strcat(sFileLogEntry,i_sEntityID); 165*12720SWyllys.Ingersoll@Sun.COM } 166*12720SWyllys.Ingersoll@Sun.COM 167*12720SWyllys.Ingersoll@Sun.COM if ( i_sNetworkAddress ) 168*12720SWyllys.Ingersoll@Sun.COM { 169*12720SWyllys.Ingersoll@Sun.COM strcat(sFileLogEntry," KMA Address="); 170*12720SWyllys.Ingersoll@Sun.COM strcat(sFileLogEntry, i_sNetworkAddress); 171*12720SWyllys.Ingersoll@Sun.COM } 172*12720SWyllys.Ingersoll@Sun.COM if ( i_sOperation ) 173*12720SWyllys.Ingersoll@Sun.COM { 174*12720SWyllys.Ingersoll@Sun.COM strcat(sFileLogEntry, " Operation="); 175*12720SWyllys.Ingersoll@Sun.COM strcat(sFileLogEntry,i_sOperation); 176*12720SWyllys.Ingersoll@Sun.COM } 177*12720SWyllys.Ingersoll@Sun.COM 178*12720SWyllys.Ingersoll@Sun.COM if ( i_sMessage ) 179*12720SWyllys.Ingersoll@Sun.COM { 180*12720SWyllys.Ingersoll@Sun.COM strcat(sFileLogEntry, " Msg="); 181*12720SWyllys.Ingersoll@Sun.COM strcat(sFileLogEntry, i_sMessage); 182*12720SWyllys.Ingersoll@Sun.COM } 183*12720SWyllys.Ingersoll@Sun.COM 184*12720SWyllys.Ingersoll@Sun.COM return LogToFile( i_iErrno, sFileLogEntry ); 185*12720SWyllys.Ingersoll@Sun.COM } 186*12720SWyllys.Ingersoll@Sun.COM 187*12720SWyllys.Ingersoll@Sun.COM int Log2(char* msg1, 188*12720SWyllys.Ingersoll@Sun.COM char* msg2) 189*12720SWyllys.Ingersoll@Sun.COM { 190*12720SWyllys.Ingersoll@Sun.COM return 0; 191*12720SWyllys.Ingersoll@Sun.COM } 192