Coverage Report

Created: 2025-07-01 06:46

/src/FreeRDP/winpr/libwinpr/utils/wlog/SyslogAppender.c
Line
Count
Source (jump to first uncovered line)
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
  WLOG_APPENDER_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
  if (!log || !appender)
55
0
    return FALSE;
56
57
0
  return TRUE;
58
0
}
59
60
static BOOL WLog_SyslogAppender_Close(wLog* log, wLogAppender* appender)
61
0
{
62
0
  if (!log || !appender)
63
0
    return FALSE;
64
65
0
  return TRUE;
66
0
}
67
68
static BOOL WLog_SyslogAppender_WriteMessage(wLog* log, wLogAppender* appender,
69
                                             wLogMessage* message)
70
0
{
71
0
  int syslogLevel = 0;
72
73
0
  if (!log || !appender || !message)
74
0
    return FALSE;
75
76
0
  syslogLevel = getSyslogLevel(message->Level);
77
0
  if (syslogLevel >= 0)
78
0
    syslog(syslogLevel, "%s", message->TextString);
79
80
0
  return TRUE;
81
0
}
82
83
static BOOL WLog_SyslogAppender_WriteDataMessage(wLog* log, wLogAppender* appender,
84
                                                 wLogMessage* message)
85
0
{
86
0
  int syslogLevel = 0;
87
88
0
  if (!log || !appender || !message)
89
0
    return FALSE;
90
91
0
  syslogLevel = getSyslogLevel(message->Level);
92
0
  if (syslogLevel >= 0)
93
0
    syslog(syslogLevel, "skipped data message of %" PRIuz " bytes", message->Length);
94
95
0
  return TRUE;
96
0
}
97
98
static BOOL WLog_SyslogAppender_WriteImageMessage(wLog* log, wLogAppender* appender,
99
                                                  wLogMessage* message)
100
0
{
101
0
  int syslogLevel = 0;
102
103
0
  if (!log || !appender || !message)
104
0
    return FALSE;
105
106
0
  syslogLevel = getSyslogLevel(message->Level);
107
0
  if (syslogLevel >= 0)
108
0
    syslog(syslogLevel, "skipped image (%" PRIuz "x%" PRIuz "x%" PRIuz ")", message->ImageWidth,
109
0
           message->ImageHeight, message->ImageBpp);
110
111
0
  return TRUE;
112
0
}
113
114
static void WLog_SyslogAppender_Free(wLogAppender* appender)
115
0
{
116
0
  free(appender);
117
0
}
118
119
wLogAppender* WLog_SyslogAppender_New(WINPR_ATTR_UNUSED wLog* log)
120
0
{
121
0
  wLogSyslogAppender* appender = NULL;
122
123
0
  appender = (wLogSyslogAppender*)calloc(1, sizeof(wLogSyslogAppender));
124
0
  if (!appender)
125
0
    return NULL;
126
127
0
  appender->Type = WLOG_APPENDER_SYSLOG;
128
129
0
  appender->Open = WLog_SyslogAppender_Open;
130
0
  appender->Close = WLog_SyslogAppender_Close;
131
0
  appender->WriteMessage = WLog_SyslogAppender_WriteMessage;
132
0
  appender->WriteDataMessage = WLog_SyslogAppender_WriteDataMessage;
133
0
  appender->WriteImageMessage = WLog_SyslogAppender_WriteImageMessage;
134
0
  appender->Free = WLog_SyslogAppender_Free;
135
136
0
  return (wLogAppender*)appender;
137
0
}