Пример #1
0
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);
}
Пример #2
0
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);
}
Пример #3
0
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;
}
Пример #4
0
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 */
}
Пример #5
0
/**
 * 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__);
}
Пример #6
0
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);
}