Mercurial > illumos > illumos-gate
diff usr/src/lib/libkmsagent/common/KMSAuditLogger.cpp @ 12720:3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
6944296 Solaris needs a PKCS#11 provider to allow access to KMS keystore functionality
author | Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM> |
---|---|
date | Mon, 28 Jun 2010 16:04:11 -0700 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/usr/src/lib/libkmsagent/common/KMSAuditLogger.cpp Mon Jun 28 16:04:11 2010 -0700 @@ -0,0 +1,191 @@ +/* + * CDDL HEADER START + * + * The contents of this file are subject to the terms of the + * Common Development and Distribution License (the "License"). + * You may not use this file except in compliance with the License. + * + * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE + * or http://www.opensolaris.org/os/licensing. + * See the License for the specific language governing permissions + * and limitations under the License. + * + * When distributing Covered Code, include this CDDL HEADER in each + * file and include the License file at usr/src/OPENSOLARIS.LICENSE. + * If applicable, add the following below this CDDL HEADER, with the + * fields enclosed by brackets "[]" replaced with your own identifying + * information: Portions Copyright [yyyy] [name of copyright owner] + * + * CDDL HEADER END + */ + +/* + * Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved. + */ + +/** + * \file KMSAuditLogger.cpp + */ + +#ifndef WIN32 +//#include <syslog.h> +#include <stdarg.h> +#endif + +#include <stdio.h> + +#ifndef METAWARE +#include <sys/timeb.h> +#endif + +#include <time.h> + +#include "KMSAuditLogger.h" +#include "ApplianceParameters.h" + +#define AGENT_LOG_FILE "KMSAgentLog.log" + +// globals for file logging +static FILE* g_fpLogFileHandle = NULL; +static K_MUTEX_HANDLE g_stLogFileMutex; +static char g_sLogFileName[MAX_LOG_FILE_NAME_LENGTH]; + +// Find header in AuditLogger.h +int InitializeFileLogging( const char* const i_sWorkingDirectory ) +{ + FATAL_ASSERT( i_sWorkingDirectory ); + if ( g_fpLogFileHandle != NULL ) + { + return false; + } + + char sLogFileName[MAX_LOG_FILE_NAME_LENGTH]; + strncpy( sLogFileName, i_sWorkingDirectory, MAX_LOG_FILE_NAME_LENGTH ); + + if ( sLogFileName[ strlen( sLogFileName )-1 ] != PATH_SEPARATOR ) + { + sLogFileName[ strlen(sLogFileName) ] = PATH_SEPARATOR ; + sLogFileName[ strlen(sLogFileName) + 1 ] = '\0'; + } + + strncat( sLogFileName, AGENT_LOG_FILE, MAX_LOG_FILE_NAME_LENGTH ); + + strcpy(g_sLogFileName, sLogFileName); + + if ( K_CreateMutex( &g_stLogFileMutex ) != K_SYS_OK ) + { + return false; + } + + if ( NULL == ( g_fpLogFileHandle = fopen( g_sLogFileName, "a+t" ) ) ) + { + return false; + } + + return true; +} + +// Find header in AuditLogger.h +int FinalizeFileLogging() +{ + FATAL_ASSERT( g_fpLogFileHandle != NULL ); + + K_DestroyMutex( g_stLogFileMutex ); + + bool bSuccess = ( 0 == fclose( g_fpLogFileHandle ) ); + + g_fpLogFileHandle = NULL; + + return bSuccess; +} + +// Find header in AuditLogger.h +extern "C" int LogToFile( int i_iErrno, + const char* const i_sLogLine ) +{ + if ( g_fpLogFileHandle == NULL ) + { + return false; + } + + CAutoMutex oAutoMutex( g_stLogFileMutex ); + + if (0 > fputs( i_sLogLine, g_fpLogFileHandle ) ) + { + return false; + } + + if ( 0 > fputs( "\n", g_fpLogFileHandle ) ) + { + return false; + } + + if ( fflush( g_fpLogFileHandle ) != 0 ) + { + return false; + } + + return true; +} + +static const int g_iMaxLogFileLineLength = MAX_LOG_FILE_LINE_LENGTH; + + +int 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 ) +{ + char sFileLogEntry[500]; + const int iTempSize = 100; + + timeb stTime; + ftime(&stTime); + + struct tm* pstTime = gmtime( &(stTime.time) ); + + K_snprintf( + sFileLogEntry, + iTempSize, + "%04d-%02d-%02d %02d:%02d:%02d.%03dZ", + pstTime->tm_year+1900, + pstTime->tm_mon+1, + pstTime->tm_mday, + pstTime->tm_hour, + pstTime->tm_min, + pstTime->tm_sec, + stTime.millitm); + + if ( i_sEntityID ) + { + strcat(sFileLogEntry," AgentID="); + strcat(sFileLogEntry,i_sEntityID); + } + + if ( i_sNetworkAddress ) + { + strcat(sFileLogEntry," KMA Address="); + strcat(sFileLogEntry, i_sNetworkAddress); + } + if ( i_sOperation ) + { + strcat(sFileLogEntry, " Operation="); + strcat(sFileLogEntry,i_sOperation); + } + + if ( i_sMessage ) + { + strcat(sFileLogEntry, " Msg="); + strcat(sFileLogEntry, i_sMessage); + } + + return LogToFile( i_iErrno, sFileLogEntry ); +} + +int Log2(char* msg1, + char* msg2) +{ + return 0; +}