static LW_VOID RtlLogCallback( LW_IN LW_OPTIONAL LW_PVOID Context, LW_IN LW_RTL_LOG_LEVEL Level, LW_IN LW_OPTIONAL LW_PCSTR ComponentName, LW_IN LW_PCSTR FunctionName, LW_IN LW_PCSTR FileName, LW_IN LW_ULONG LineNumber, LW_IN LW_PCSTR Format, LW_IN ... ) { va_list args; PSTR pCombined = NULL; DWORD djLevel = 0; va_start(args, Format); switch(Level) { case LW_RTL_LOG_LEVEL_ALWAYS: djLevel = LOG_LEVEL_ALWAYS; break; case LW_RTL_LOG_LEVEL_ERROR: djLevel = LOG_LEVEL_ERROR; break; case LW_RTL_LOG_LEVEL_WARNING: djLevel = LOG_LEVEL_WARNING; break; case LW_RTL_LOG_LEVEL_INFO: djLevel = LOG_LEVEL_INFO; break; case LW_RTL_LOG_LEVEL_VERBOSE: case LW_RTL_LOG_LEVEL_DEBUG: case LW_RTL_LOG_LEVEL_TRACE: case LW_RTL_LOG_LEVEL_UNDEFINED: default: djLevel = LOG_LEVEL_VERBOSE; break; } if (!LwAllocateStringPrintfV( &pCombined, Format, args)) { dj_log_message( djLevel, "%s:%s():%s:%d: %s", ComponentName, FunctionName, FileName, LineNumber, pCombined); } LW_SAFE_FREE_STRING(pCombined); va_end(args); }
static VOID LogCallback( IN OPTIONAL PVOID Context, IN LW_RTL_LOG_LEVEL Level, IN OPTIONAL PCSTR ComponentName, IN PCSTR FunctionName, IN PCSTR FileName, IN ULONG LineNumber, IN PCSTR Format, IN ... ) { DWORD dwError = 0; PSTR formattedMessage = NULL; LW_RTL_LOG_LEVEL maxLevel = LwRtlLogGetLevel(); va_list argList; va_start(argList, Format); dwError = LwAllocateStringPrintfV(&formattedMessage, Format, argList); va_end(argList); if (!dwError) { size_t length = strlen(formattedMessage); if ((length > 0) && (Format[length-1] != '\n')) { if (maxLevel >= LW_RTL_LOG_LEVEL_DEBUG) { printf("[%s() %s:%d] %s\n", FunctionName, FileName, LineNumber, formattedMessage); } else { printf("%s\n", formattedMessage); } } else { if (maxLevel >= LW_RTL_LOG_LEVEL_DEBUG) { printf("[%s() %s:%d] %s", FunctionName, FileName, LineNumber, formattedMessage); } else { printf("%s", formattedMessage); } } } LW_SAFE_FREE_STRING(formattedMessage); }
DWORD LwAllocateStringPrintf( PSTR* ppszOutputString, PCSTR pszFormat, ... ) { DWORD dwError = 0; va_list args; va_start(args, pszFormat); dwError = LwAllocateStringPrintfV( ppszOutputString, pszFormat, args); va_end(args); return dwError; }
void lsass_vsyslog( int priority, const char *format, va_list ap ) { #if defined(HAVE_VSYSLOG) vsyslog(priority, format, ap); #else DWORD dwError; PSTR buffer = NULL; dwError = LwAllocateStringPrintfV(&buffer, format, ap); if (!dwError) { syslog(priority, "%s", buffer); } LW_SAFE_FREE_STRING(buffer); #endif /* ! HAVE_VSYSLOG */ }
/** * Print a message. * * @param appContext Application context reference. * @param dst Can be stdout, stderr, or NULL - execution result string. * @param level Log level. * @param str The formated content will be added to this string. Can be NULL. * @param format Format * @param msgList Arguments */ static VOID PrintMessage(IN AppContextTP appContext, IN FILE *dst, IN LogLevelT level, IN PCSTR format, va_list msgList) { DWORD dwError = 0; PSTR str = NULL; PSTR addStr = NULL; PSTR retStr = NULL; INT len = 0; PSTR res = NULL; if(appContext == NULL) { vfprintf(stderr, format, msgList); return; } if ((dst != 0) && (level > appContext->gopts.logLevel)) { return; } if((level == LogLevelError) && (appContext->gopts.logLevel < LogLevelVerbose)) { return; // Do not print detailed error messages unless we are tracing a problem } if(format == NULL) { return; } if(appContext->outputMode == AdtOutputModeStdout) { vfprintf((dst == 0) ? stdout : dst, format, msgList); return; } if(dst == stdout) { str = appContext->stdoutStr; } else { if (dst == stderr) { str = appContext->stderrStr; } else { str = appContext->execResult.base.resultStr; } } dwError = LwAllocateStringPrintfV(&addStr, format, msgList); ADT_BAIL_ON_ALLOC_FAILURE_NP(!dwError); if (str == NULL) { res = addStr; } else { len += strlen(addStr); len += strlen(str); dwError = LwAllocateMemory(len + 1, OUT_PPVOID(&retStr)); ADT_BAIL_ON_ALLOC_FAILURE_NP(!dwError); res = retStr; strcpy(retStr, str); strcpy(retStr + strlen(str), addStr); LW_SAFE_FREE_MEMORY(addStr); LW_SAFE_FREE_MEMORY(str); } if(dst == stdout) { appContext->stdoutStr = res; } else { if (dst == stderr) { appContext->stderrStr = res; } else { str = appContext->execResult.base.resultStr = res; } } return; error: fprintf(stderr, "%s at %s:%d\n", AdtGetErrorMsg(ADT_ERR_FAILED_ALLOC), __FILE__, __LINE__); }
static VOID LogCallback( IN OPTIONAL LW_PVOID Context, IN LW_RTL_LOG_LEVEL Level, IN OPTIONAL PCSTR ComponentName, IN PCSTR FunctionName, IN PCSTR FileName, IN ULONG LineNumber, IN PCSTR Format, IN ... ) { DWORD dwError = 0; PSTR formattedMessage = NULL; va_list argList; PCSTR levelString = NULL; size_t messageLength = 0; PCSTR optionalNewLine = NULL; va_start(argList, Format); dwError = LwAllocateStringPrintfV(&formattedMessage, Format, argList); va_end(argList); if (dwError) { goto error; } switch (Level) { case LW_RTL_LOG_LEVEL_ALWAYS: levelString = "ALWAYS"; break; case LW_RTL_LOG_LEVEL_ERROR: levelString = "ERROR"; break; case LW_RTL_LOG_LEVEL_WARNING: levelString = "WARNING"; break; case LW_RTL_LOG_LEVEL_INFO: levelString = "INFO"; break; case LW_RTL_LOG_LEVEL_VERBOSE: levelString = "VERBOSE"; break; case LW_RTL_LOG_LEVEL_DEBUG: levelString = "DEBUG"; break; case LW_RTL_LOG_LEVEL_TRACE: levelString = "TRACE"; break; default: levelString = NULL; break; } messageLength = strlen(formattedMessage); if (!messageLength || formattedMessage[messageLength-1] != '\n') { optionalNewLine = "\n"; } printf("%s: [%s() %s:%d] %s%s", LW_RTL_LOG_SAFE_STRING(levelString), FunctionName, FileName, LineNumber, formattedMessage, optionalNewLine); error: if (dwError) { printf("WARNING: Failed to format log message"); } LW_SAFE_FREE_STRING(formattedMessage); }