Coverage Report

Created: 2026-03-04 06:14

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/src/FreeRDP/winpr/libwinpr/utils/wlog/SyslogAppender.c
Line
Count
Source
1
/**
2
 * WinPR: Windows Portable Runtime
3
 * WinPR Logger
4
 *
5
 * Copyright © 2015 Thincast Technologies GmbH
6
 * Copyright © 2015 David FORT <contact@hardening-consulting.com>
7
 *
8
 * Licensed under the Apache License, Version 2.0 (the "License");
9
 * you may not use this file except in compliance with the License.
10
 * You may obtain a copy of the License at
11
 *
12
 *     http://www.apache.org/licenses/LICENSE-2.0
13
 *
14
 * Unless required by applicable law or agreed to in writing, software
15
 * distributed under the License is distributed on an "AS IS" BASIS,
16
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
17
 * See the License for the specific language governing permissions and
18
 * limitations under the License.
19
 */
20
21
#include <winpr/config.h>
22
23
#include "SyslogAppender.h"
24
#include <syslog.h>
25
26
typedef struct
27
{
28
  wLogAppender common;
29
} wLogSyslogAppender;
30
31
static int getSyslogLevel(DWORD level)
32
0
{
33
0
  switch (level)
34
0
  {
35
0
    case WLOG_TRACE:
36
0
    case WLOG_DEBUG:
37
0
      return LOG_DEBUG;
38
0
    case WLOG_INFO:
39
0
      return LOG_INFO;
40
0
    case WLOG_WARN:
41
0
      return LOG_WARNING;
42
0
    case WLOG_ERROR:
43
0
      return LOG_ERR;
44
0
    case WLOG_FATAL:
45
0
      return LOG_CRIT;
46
0
    case WLOG_OFF:
47
0
    default:
48
0
      return -1;
49
0
  }
50
0
}
51
52
static BOOL WLog_SyslogAppender_Open(wLog* log, wLogAppender* appender)
53
0
{
54
0
  return !(!log || !appender);
55
0
}
56
57
static BOOL WLog_SyslogAppender_Close(wLog* log, wLogAppender* appender)
58
0
{
59
0
  return !(!log || !appender);
60
0
}
61
62
static BOOL WLog_SyslogAppender_WriteMessage(wLog* log, wLogAppender* appender,
63
                                             const wLogMessage* message)
64
0
{
65
0
  int syslogLevel = 0;
66
67
0
  if (!log || !appender || !message)
68
0
    return FALSE;
69
70
0
  syslogLevel = getSyslogLevel(message->Level);
71
0
  if (syslogLevel >= 0)
72
0
    syslog(syslogLevel, "%s", message->TextString);
73
74
0
  return TRUE;
75
0
}
76
77
static BOOL WLog_SyslogAppender_WriteDataMessage(wLog* log, wLogAppender* appender,
78
                                                 const wLogMessage* message)
79
0
{
80
0
  int syslogLevel = 0;
81
82
0
  if (!log || !appender || !message)
83
0
    return FALSE;
84
85
0
  syslogLevel = getSyslogLevel(message->Level);
86
0
  if (syslogLevel >= 0)
87
0
    syslog(syslogLevel, "skipped data message of %" PRIuz " bytes", message->Length);
88
89
0
  return TRUE;
90
0
}
91
92
static BOOL WLog_SyslogAppender_WriteImageMessage(wLog* log, wLogAppender* appender,
93
                                                  const wLogMessage* message)
94
0
{
95
0
  int syslogLevel = 0;
96
97
0
  if (!log || !appender || !message)
98
0
    return FALSE;
99
100
0
  syslogLevel = getSyslogLevel(message->Level);
101
0
  if (syslogLevel >= 0)
102
0
    syslog(syslogLevel, "skipped image (%" PRIuz "x%" PRIuz "x%" PRIuz ")", message->ImageWidth,
103
0
           message->ImageHeight, message->ImageBpp);
104
105
0
  return TRUE;
106
0
}
107
108
static void WLog_SyslogAppender_Free(wLogAppender* appender)
109
0
{
110
0
  free(appender);
111
0
}
112
113
wLogAppender* WLog_SyslogAppender_New(WINPR_ATTR_UNUSED wLog* log)
114
0
{
115
0
  wLogSyslogAppender* appender = (wLogSyslogAppender*)calloc(1, sizeof(wLogSyslogAppender));
116
0
  if (!appender)
117
0
    return nullptr;
118
119
0
  appender->common.Type = WLOG_APPENDER_SYSLOG;
120
121
0
  appender->common.Open = WLog_SyslogAppender_Open;
122
0
  appender->common.Close = WLog_SyslogAppender_Close;
123
0
  appender->common.WriteMessage = WLog_SyslogAppender_WriteMessage;
124
0
  appender->common.WriteDataMessage = WLog_SyslogAppender_WriteDataMessage;
125
0
  appender->common.WriteImageMessage = WLog_SyslogAppender_WriteImageMessage;
126
0
  appender->common.Free = WLog_SyslogAppender_Free;
127
128
0
  return &appender->common;
129
0
}