xref: /onnv-gate/usr/src/lib/libkmsagent/common/KMSAuditLogger.cpp (revision 12720:3db6e0082404)
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