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