Coverage Report

Created: 2025-10-10 06:50

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/src/FreeRDP/libfreerdp/core/errconnect.c
Line
Count
Source
1
/**
2
 * FreeRDP: A Remote Desktop Protocol Implementation
3
 * Error Connect
4
 *
5
 * Copyright 2015 Armin Novak <armin.novak@thincast.com>
6
 * Copyright 2015 Thincast Technologies GmbH
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 <freerdp/config.h>
22
23
#include <stdio.h>
24
25
#include <freerdp/log.h>
26
27
#include "errinfo.h"
28
29
#define ERRCONNECT_DEFINE(_code, category)                                              \
30
  {                                                                                   \
31
    ERRCONNECT_##_code, "ERRCONNECT_" #_code, ERRCONNECT_##_code##_STRING, category \
32
  }
33
34
/* Protocol-independent codes */
35
36
#define ERRCONNECT_PRE_CONNECT_FAILED_STRING \
37
  "A configuration error prevented a connection to be established."
38
39
#define ERRCONNECT_CONNECT_UNDEFINED_STRING "A undefined connection error occurred."
40
41
#define ERRCONNECT_POST_CONNECT_FAILED_STRING \
42
  "The connection attempt was aborted due to post connect configuration errors."
43
44
#define ERRCONNECT_DNS_ERROR_STRING "The DNS entry could not be resolved."
45
46
#define ERRCONNECT_DNS_NAME_NOT_FOUND_STRING "The DNS host name was not found."
47
48
#define ERRCONNECT_CONNECT_FAILED_STRING "The connection failed."
49
50
#define ERRCONNECT_MCS_CONNECT_INITIAL_ERROR_STRING "The connection failed at initial MCS connect"
51
52
#define ERRCONNECT_TLS_CONNECT_FAILED_STRING "The connection failed at TLS connect."
53
54
#define ERRCONNECT_AUTHENTICATION_FAILED_STRING "An authentication failure aborted the connection."
55
56
#define ERRCONNECT_INSUFFICIENT_PRIVILEGES_STRING \
57
  "Insufficient privileges to establish a connection."
58
59
#define ERRCONNECT_CONNECT_CANCELLED_STRING "The connection was cancelled."
60
61
#define ERRCONNECT_SECURITY_NEGO_CONNECT_FAILED_STRING \
62
  "The connection failed at negotiating security settings."
63
64
#define ERRCONNECT_CONNECT_TRANSPORT_FAILED_STRING "The connection transport layer failed."
65
66
#define ERRCONNECT_PASSWORD_EXPIRED_STRING "The password has expired and must be changed."
67
68
#define ERRCONNECT_PASSWORD_CERTAINLY_EXPIRED_STRING \
69
  "The password has certainly expired and must be changed."
70
71
#define ERRCONNECT_CLIENT_REVOKED_STRING "The client has been revoked."
72
73
#define ERRCONNECT_KDC_UNREACHABLE_STRING "The KDC is unreachable."
74
75
#define ERRCONNECT_ACCOUNT_DISABLED_STRING "The account is disabled."
76
77
#define ERRCONNECT_PASSWORD_MUST_CHANGE_STRING "The password must be changed."
78
79
#define ERRCONNECT_LOGON_FAILURE_STRING "Logon failed."
80
81
#define ERRCONNECT_WRONG_PASSWORD_STRING "Wrong password supplied."
82
83
#define ERRCONNECT_ACCESS_DENIED_STRING "Access denied."
84
85
#define ERRCONNECT_ACCOUNT_RESTRICTION_STRING "Account restriction."
86
87
#define ERRCONNECT_ACCOUNT_LOCKED_OUT_STRING "Account locked out."
88
89
#define ERRCONNECT_ACCOUNT_EXPIRED_STRING "Account expired."
90
91
#define ERRCONNECT_LOGON_TYPE_NOT_GRANTED_STRING "Logon type not granted."
92
93
#define ERRCONNECT_NO_OR_MISSING_CREDENTIALS_STRING "Credentials invalid or missing."
94
95
#define ERRCONNECT_ACTIVATION_TIMEOUT_STRING "Timeout waiting for activation."
96
97
#define ERRCONNECT_TARGET_BOOTING_STRING "Starting your VM. It may take up to 5 minutes."
98
99
/* Special codes */
100
#define ERRCONNECT_SUCCESS_STRING "Success."
101
#define ERRCONNECT_NONE_STRING ""
102
103
static const ERRINFO ERRCONNECT_CODES[] = {
104
  ERRCONNECT_DEFINE(SUCCESS, CAT_NONE),
105
106
  ERRCONNECT_DEFINE(PRE_CONNECT_FAILED, CAT_CONFIG),
107
  ERRCONNECT_DEFINE(CONNECT_UNDEFINED, CAT_USE),
108
  ERRCONNECT_DEFINE(POST_CONNECT_FAILED, CAT_CONFIG),
109
  ERRCONNECT_DEFINE(DNS_ERROR, CAT_USE),
110
  ERRCONNECT_DEFINE(DNS_NAME_NOT_FOUND, CAT_CONFIG),
111
  ERRCONNECT_DEFINE(CONNECT_FAILED, CAT_USE),
112
  ERRCONNECT_DEFINE(MCS_CONNECT_INITIAL_ERROR, CAT_PROTOCOL),
113
  ERRCONNECT_DEFINE(TLS_CONNECT_FAILED, CAT_USE),
114
  ERRCONNECT_DEFINE(AUTHENTICATION_FAILED, CAT_USE),
115
  ERRCONNECT_DEFINE(INSUFFICIENT_PRIVILEGES, CAT_ADMIN),
116
  ERRCONNECT_DEFINE(CONNECT_CANCELLED, CAT_USE),
117
  ERRCONNECT_DEFINE(SECURITY_NEGO_CONNECT_FAILED, CAT_USE),
118
  ERRCONNECT_DEFINE(CONNECT_TRANSPORT_FAILED, CAT_USE),
119
  ERRCONNECT_DEFINE(PASSWORD_EXPIRED, CAT_ADMIN),
120
  ERRCONNECT_DEFINE(PASSWORD_CERTAINLY_EXPIRED, CAT_ADMIN),
121
  ERRCONNECT_DEFINE(CLIENT_REVOKED, CAT_ADMIN),
122
  ERRCONNECT_DEFINE(KDC_UNREACHABLE, CAT_ADMIN),
123
  ERRCONNECT_DEFINE(ACCOUNT_DISABLED, CAT_ADMIN),
124
  ERRCONNECT_DEFINE(PASSWORD_MUST_CHANGE, CAT_ADMIN),
125
  ERRCONNECT_DEFINE(LOGON_FAILURE, CAT_USE),
126
  ERRCONNECT_DEFINE(WRONG_PASSWORD, CAT_USE),
127
  ERRCONNECT_DEFINE(ACCESS_DENIED, CAT_ADMIN),
128
  ERRCONNECT_DEFINE(ACCOUNT_RESTRICTION, CAT_ADMIN),
129
  ERRCONNECT_DEFINE(ACCOUNT_LOCKED_OUT, CAT_ADMIN),
130
  ERRCONNECT_DEFINE(ACCOUNT_EXPIRED, CAT_ADMIN),
131
  ERRCONNECT_DEFINE(LOGON_TYPE_NOT_GRANTED, CAT_ADMIN),
132
  ERRCONNECT_DEFINE(NO_OR_MISSING_CREDENTIALS, CAT_USE),
133
  ERRCONNECT_DEFINE(ACTIVATION_TIMEOUT, CAT_PROTOCOL),
134
  ERRCONNECT_DEFINE(TARGET_BOOTING, CAT_ADMIN),
135
136
  ERRCONNECT_DEFINE(NONE, CAT_NONE)
137
};
138
139
const char* freerdp_get_error_connect_string(UINT32 code)
140
0
{
141
0
  const ERRINFO* errInfo = NULL;
142
0
  errInfo = &ERRCONNECT_CODES[0];
143
144
0
  while (errInfo->code != ERRCONNECT_NONE)
145
0
  {
146
0
    if (code == errInfo->code)
147
0
    {
148
0
      return errInfo->info;
149
0
    }
150
151
0
    errInfo++;
152
0
  }
153
154
0
  return "ERRCONNECT_UNKNOWN";
155
0
}
156
157
const char* freerdp_get_error_connect_category(UINT32 code)
158
0
{
159
0
  const ERRINFO* errInfo = NULL;
160
0
  errInfo = &ERRCONNECT_CODES[0];
161
162
0
  while (errInfo->code != ERRCONNECT_NONE)
163
0
  {
164
0
    if (code == errInfo->code)
165
0
    {
166
0
      return errInfo->category;
167
0
    }
168
169
0
    errInfo++;
170
0
  }
171
172
0
  return "ERRCONNECT_UNKNOWN";
173
0
}
174
175
const char* freerdp_get_error_connect_name(UINT32 code)
176
212
{
177
212
  const ERRINFO* errInfo = NULL;
178
212
  errInfo = &ERRCONNECT_CODES[0];
179
180
2.68k
  while (errInfo->code != ERRCONNECT_NONE)
181
2.68k
  {
182
2.68k
    if (code == errInfo->code)
183
212
    {
184
212
      return errInfo->name;
185
212
    }
186
187
2.46k
    errInfo++;
188
2.46k
  }
189
190
0
  return "ERRCONNECT_UNKNOWN";
191
212
}