2
* FreeRDP: A Remote Desktop Protocol Implementation
5
* Copyright 2012 Marc-Andre Moreau <marcandre.moreau@gmail.com>
7
* Licensed under the Apache License, Version 2.0 (the "License");
8
* you may not use this file except in compliance with the License.
9
* You may obtain a copy of the License at
11
* http://www.apache.org/licenses/LICENSE-2.0
13
* Unless required by applicable law or agreed to in writing, software
14
* distributed under the License is distributed on an "AS IS" BASIS,
15
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16
* See the License for the specific language governing permissions and
17
* limitations under the License.
24
#include "rpc_fault.h"
26
extern const RPC_FAULT_CODE RPC_TSG_FAULT_CODES[];
28
const RPC_FAULT_CODE RPC_FAULT_CODES[] =
30
DEFINE_RPC_FAULT_CODE(nca_s_fault_object_not_found)
31
DEFINE_RPC_FAULT_CODE(nca_s_fault_cancel)
32
DEFINE_RPC_FAULT_CODE(nca_s_fault_addr_error)
33
DEFINE_RPC_FAULT_CODE(nca_s_fault_context_mismatch)
34
DEFINE_RPC_FAULT_CODE(nca_s_fault_fp_div_zero)
35
DEFINE_RPC_FAULT_CODE(nca_s_fault_fp_error)
36
DEFINE_RPC_FAULT_CODE(nca_s_fault_fp_overflow)
37
DEFINE_RPC_FAULT_CODE(nca_s_fault_fp_underflow)
38
DEFINE_RPC_FAULT_CODE(nca_s_fault_ill_inst)
39
DEFINE_RPC_FAULT_CODE(nca_s_fault_int_div_by_zero)
40
DEFINE_RPC_FAULT_CODE(nca_s_fault_int_overflow)
41
DEFINE_RPC_FAULT_CODE(nca_s_fault_invalid_bound)
42
DEFINE_RPC_FAULT_CODE(nca_s_fault_invalid_tag)
43
DEFINE_RPC_FAULT_CODE(nca_s_fault_pipe_closed)
44
DEFINE_RPC_FAULT_CODE(nca_s_fault_pipe_comm_error)
45
DEFINE_RPC_FAULT_CODE(nca_s_fault_pipe_discipline)
46
DEFINE_RPC_FAULT_CODE(nca_s_fault_pipe_empty)
47
DEFINE_RPC_FAULT_CODE(nca_s_fault_pipe_memory)
48
DEFINE_RPC_FAULT_CODE(nca_s_fault_pipe_order)
49
DEFINE_RPC_FAULT_CODE(nca_s_fault_remote_no_memory)
50
DEFINE_RPC_FAULT_CODE(nca_s_fault_user_defined)
51
DEFINE_RPC_FAULT_CODE(nca_s_fault_tx_open_failed)
52
DEFINE_RPC_FAULT_CODE(nca_s_fault_codeset_conv_error)
53
DEFINE_RPC_FAULT_CODE(nca_s_fault_no_client_stub)
54
DEFINE_RPC_FAULT_CODE(RPC_S_INVALID_STRING_BINDING)
55
DEFINE_RPC_FAULT_CODE(RPC_S_WRONG_KIND_OF_BINDING)
56
DEFINE_RPC_FAULT_CODE(RPC_S_INVALID_BINDING)
57
DEFINE_RPC_FAULT_CODE(RPC_S_PROTSEQ_NOT_SUPPORTED)
58
DEFINE_RPC_FAULT_CODE(RPC_S_INVALID_RPC_PROTSEQ)
59
DEFINE_RPC_FAULT_CODE(RPC_S_INVALID_STRING_UUID)
60
DEFINE_RPC_FAULT_CODE(RPC_S_INVALID_ENDPOINT_FORMAT)
61
DEFINE_RPC_FAULT_CODE(RPC_S_INVALID_NET_ADDR)
62
DEFINE_RPC_FAULT_CODE(RPC_S_NO_ENDPOINT_FOUND)
63
DEFINE_RPC_FAULT_CODE(RPC_S_INVALID_TIMEOUT)
64
DEFINE_RPC_FAULT_CODE(RPC_S_OBJECT_NOT_FOUND)
65
DEFINE_RPC_FAULT_CODE(RPC_S_ALREADY_REGISTERED)
66
DEFINE_RPC_FAULT_CODE(RPC_S_TYPE_ALREADY_REGISTERED)
67
DEFINE_RPC_FAULT_CODE(RPC_S_ALREADY_LISTENING)
68
DEFINE_RPC_FAULT_CODE(RPC_S_NO_PROTSEQS_REGISTERED)
69
DEFINE_RPC_FAULT_CODE(RPC_S_NOT_LISTENING)
70
DEFINE_RPC_FAULT_CODE(RPC_S_UNKNOWN_MGR_TYPE)
71
DEFINE_RPC_FAULT_CODE(RPC_S_UNKNOWN_IF)
72
DEFINE_RPC_FAULT_CODE(RPC_S_NO_BINDINGS)
73
DEFINE_RPC_FAULT_CODE(RPC_S_NO_PROTSEQS)
74
DEFINE_RPC_FAULT_CODE(RPC_S_CANT_CREATE_ENDPOINT)
75
DEFINE_RPC_FAULT_CODE(RPC_S_OUT_OF_RESOURCES)
76
DEFINE_RPC_FAULT_CODE(RPC_S_SERVER_UNAVAILABLE)
77
DEFINE_RPC_FAULT_CODE(RPC_S_SERVER_TOO_BUSY)
78
DEFINE_RPC_FAULT_CODE(RPC_S_INVALID_NETWORK_OPTIONS)
79
DEFINE_RPC_FAULT_CODE(RPC_S_NO_CALL_ACTIVE)
80
DEFINE_RPC_FAULT_CODE(RPC_S_CALL_FAILED)
81
DEFINE_RPC_FAULT_CODE(RPC_S_CALL_FAILED_DNE)
82
DEFINE_RPC_FAULT_CODE(RPC_S_PROTOCOL_ERROR)
83
DEFINE_RPC_FAULT_CODE(RPC_S_PROXY_ACCESS_DENIED)
84
DEFINE_RPC_FAULT_CODE(RPC_S_UNSUPPORTED_TRANS_SYN)
85
DEFINE_RPC_FAULT_CODE(RPC_S_UNSUPPORTED_TYPE)
86
DEFINE_RPC_FAULT_CODE(RPC_S_INVALID_TAG)
87
DEFINE_RPC_FAULT_CODE(RPC_S_INVALID_BOUND)
88
DEFINE_RPC_FAULT_CODE(RPC_S_NO_ENTRY_NAME)
89
DEFINE_RPC_FAULT_CODE(RPC_S_INVALID_NAME_SYNTAX)
90
DEFINE_RPC_FAULT_CODE(RPC_S_UNSUPPORTED_NAME_SYNTAX)
91
DEFINE_RPC_FAULT_CODE(RPC_S_UUID_NO_ADDRESS)
92
DEFINE_RPC_FAULT_CODE(RPC_S_DUPLICATE_ENDPOINT)
93
DEFINE_RPC_FAULT_CODE(RPC_S_UNKNOWN_AUTHN_TYPE)
94
DEFINE_RPC_FAULT_CODE(RPC_S_MAX_CALLS_TOO_SMALL)
95
DEFINE_RPC_FAULT_CODE(RPC_S_STRING_TOO_LONG)
96
DEFINE_RPC_FAULT_CODE(RPC_S_PROTSEQ_NOT_FOUND)
97
DEFINE_RPC_FAULT_CODE(RPC_S_PROCNUM_OUT_OF_RANGE)
98
DEFINE_RPC_FAULT_CODE(RPC_S_BINDING_HAS_NO_AUTH)
99
DEFINE_RPC_FAULT_CODE(RPC_S_UNKNOWN_AUTHN_SERVICE)
100
DEFINE_RPC_FAULT_CODE(RPC_S_UNKNOWN_AUTHN_LEVEL)
101
DEFINE_RPC_FAULT_CODE(RPC_S_INVALID_AUTH_IDENTITY)
102
DEFINE_RPC_FAULT_CODE(RPC_S_UNKNOWN_AUTHZ_SERVICE)
103
DEFINE_RPC_FAULT_CODE(EPT_S_INVALID_ENTRY)
104
DEFINE_RPC_FAULT_CODE(EPT_S_CANT_PERFORM_OP)
105
DEFINE_RPC_FAULT_CODE(EPT_S_NOT_REGISTERED)
106
DEFINE_RPC_FAULT_CODE(RPC_S_NOTHING_TO_EXPORT)
107
DEFINE_RPC_FAULT_CODE(RPC_S_INCOMPLETE_NAME)
108
DEFINE_RPC_FAULT_CODE(RPC_S_INVALID_VERS_OPTION)
109
DEFINE_RPC_FAULT_CODE(RPC_S_NO_MORE_MEMBERS)
110
DEFINE_RPC_FAULT_CODE(RPC_S_NOT_ALL_OBJS_UNEXPORTED)
111
DEFINE_RPC_FAULT_CODE(RPC_S_INTERFACE_NOT_FOUND)
112
DEFINE_RPC_FAULT_CODE(RPC_S_ENTRY_ALREADY_EXISTS)
113
DEFINE_RPC_FAULT_CODE(RPC_S_ENTRY_NOT_FOUND)
114
DEFINE_RPC_FAULT_CODE(RPC_S_NAME_SERVICE_UNAVAILABLE)
115
DEFINE_RPC_FAULT_CODE(RPC_S_INVALID_NAF_ID)
116
DEFINE_RPC_FAULT_CODE(RPC_S_CANNOT_SUPPORT)
117
DEFINE_RPC_FAULT_CODE(RPC_S_NO_CONTEXT_AVAILABLE)
118
DEFINE_RPC_FAULT_CODE(RPC_S_INTERNAL_ERROR)
119
DEFINE_RPC_FAULT_CODE(RPC_S_ZERO_DIVIDE)
120
DEFINE_RPC_FAULT_CODE(RPC_S_ADDRESS_ERROR)
121
DEFINE_RPC_FAULT_CODE(RPC_S_FP_DIV_ZERO)
122
DEFINE_RPC_FAULT_CODE(RPC_S_FP_UNDERFLOW)
123
DEFINE_RPC_FAULT_CODE(RPC_S_FP_OVERFLOW)
124
DEFINE_RPC_FAULT_CODE(RPC_X_NO_MORE_ENTRIES)
125
DEFINE_RPC_FAULT_CODE(RPC_X_SS_CHAR_TRANS_OPEN_FAIL)
126
DEFINE_RPC_FAULT_CODE(RPC_X_SS_CHAR_TRANS_SHORT_FILE)
127
DEFINE_RPC_FAULT_CODE(RPC_X_SS_IN_NULL_CONTEXT)
128
DEFINE_RPC_FAULT_CODE(RPC_X_SS_CONTEXT_DAMAGED)
129
DEFINE_RPC_FAULT_CODE(RPC_X_SS_HANDLES_MISMATCH)
130
DEFINE_RPC_FAULT_CODE(RPC_X_SS_CANNOT_GET_CALL_HANDLE)
131
DEFINE_RPC_FAULT_CODE(RPC_X_NULL_REF_POINTER)
132
DEFINE_RPC_FAULT_CODE(RPC_X_ENUM_VALUE_OUT_OF_RANGE)
133
DEFINE_RPC_FAULT_CODE(RPC_X_BYTE_COUNT_TOO_SMALL)
134
DEFINE_RPC_FAULT_CODE(RPC_X_BAD_STUB_DATA)
135
DEFINE_RPC_FAULT_CODE(RPC_S_NO_INTERFACES)
136
DEFINE_RPC_FAULT_CODE(RPC_S_CALL_CANCELLED)
137
DEFINE_RPC_FAULT_CODE(RPC_S_BINDING_INCOMPLETE)
138
DEFINE_RPC_FAULT_CODE(RPC_S_COMM_FAILURE)
139
DEFINE_RPC_FAULT_CODE(RPC_S_UNSUPPORTED_AUTHN_LEVEL)
140
DEFINE_RPC_FAULT_CODE(RPC_S_NO_PRINC_NAME)
141
DEFINE_RPC_FAULT_CODE(RPC_S_NOT_RPC_ERROR)
142
DEFINE_RPC_FAULT_CODE(RPC_S_UUID_LOCAL_ONLY)
143
DEFINE_RPC_FAULT_CODE(RPC_S_SEC_PKG_ERROR)
144
DEFINE_RPC_FAULT_CODE(RPC_S_NOT_CANCELLED)
145
DEFINE_RPC_FAULT_CODE(RPC_X_INVALID_ES_ACTION)
146
DEFINE_RPC_FAULT_CODE(RPC_X_WRONG_ES_VERSION)
147
DEFINE_RPC_FAULT_CODE(RPC_X_WRONG_STUB_VERSION)
148
DEFINE_RPC_FAULT_CODE(RPC_X_INVALID_PIPE_OBJECT)
149
DEFINE_RPC_FAULT_CODE(RPC_X_WRONG_PIPE_ORDER)
150
DEFINE_RPC_FAULT_CODE(RPC_X_WRONG_PIPE_VERSION)
151
DEFINE_RPC_FAULT_CODE(RPC_S_COOKIE_AUTH_FAILED)
152
DEFINE_RPC_FAULT_CODE(RPC_S_GROUP_MEMBER_NOT_FOUND)
153
DEFINE_RPC_FAULT_CODE(EPT_S_CANT_CREATE)
154
DEFINE_RPC_FAULT_CODE(RPC_S_INVALID_OBJECT)
158
const RPC_FAULT_CODE RPC_TSG_FAULT_CODES[] =
160
DEFINE_RPC_FAULT_CODE(RPC_S_OK)
161
DEFINE_RPC_FAULT_CODE(RPC_S_INVALID_ARG)
162
DEFINE_RPC_FAULT_CODE(RPC_S_OUT_OF_MEMORY)
163
DEFINE_RPC_FAULT_CODE(RPC_S_OUT_OF_THREADS)
164
DEFINE_RPC_FAULT_CODE(RPC_S_INVALID_LEVEL)
165
DEFINE_RPC_FAULT_CODE(RPC_S_BUFFER_TOO_SMALL)
166
DEFINE_RPC_FAULT_CODE(RPC_S_INVALID_SECURITY_DESC)
167
DEFINE_RPC_FAULT_CODE(RPC_S_ACCESS_DENIED)
168
DEFINE_RPC_FAULT_CODE(RPC_S_SERVER_OUT_OF_MEMORY)
169
DEFINE_RPC_FAULT_CODE(RPC_S_ASYNC_CALL_PENDING)
170
DEFINE_RPC_FAULT_CODE(RPC_S_UNKNOWN_PRINCIPAL)
171
DEFINE_RPC_FAULT_CODE(RPC_S_TIMEOUT)
172
DEFINE_RPC_FAULT_CODE(RPC_X_NO_MEMORY)
173
DEFINE_RPC_FAULT_CODE(RPC_X_INVALID_BOUND)
174
DEFINE_RPC_FAULT_CODE(RPC_X_INVALID_TAG)
175
DEFINE_RPC_FAULT_CODE(RPC_X_ENUM_VALUE_TOO_LARGE)
176
DEFINE_RPC_FAULT_CODE(RPC_X_SS_CONTEXT_MISMATCH)
177
DEFINE_RPC_FAULT_CODE(RPC_X_INVALID_BUFFER)
178
DEFINE_RPC_FAULT_CODE(RPC_X_PIPE_APP_MEMORY)
179
DEFINE_RPC_FAULT_CODE(RPC_X_INVALID_PIPE_OPERATION)
180
DEFINE_RPC_FAULT_CODE(ERROR_ONLY_IF_CONNECTED)
181
DEFINE_RPC_FAULT_CODE(ERROR_GRACEFUL_DISCONNECT)
182
DEFINE_RPC_FAULT_CODE(ERROR_OPERATION_ABORTED)
183
DEFINE_RPC_FAULT_CODE(ERROR_BAD_ARGUMENTS)
184
DEFINE_RPC_FAULT_CODE(E_PROXY_INTERNALERROR)
185
DEFINE_RPC_FAULT_CODE(E_PROXY_RAP_ACCESSDENIED)
186
DEFINE_RPC_FAULT_CODE(E_PROXY_NAP_ACCESSDENIED)
187
DEFINE_RPC_FAULT_CODE(E_PROXY_TS_CONNECTFAILED)
188
DEFINE_RPC_FAULT_CODE(E_PROXY_ALREADYDISCONNECTED)
189
DEFINE_RPC_FAULT_CODE(E_PROXY_QUARANTINE_ACCESSDENIED)
190
DEFINE_RPC_FAULT_CODE(E_PROXY_NOCERTAVAILABLE)
191
DEFINE_RPC_FAULT_CODE(E_PROXY_COOKIE_BADPACKET)
192
DEFINE_RPC_FAULT_CODE(E_PROXY_COOKIE_AUTHENTICATION_ACCESS_DENIED)
193
DEFINE_RPC_FAULT_CODE(E_PROXY_UNSUPPORTED_AUTHENTICATION_METHOD)
194
DEFINE_RPC_FAULT_CODE(E_PROXY_CAPABILITYMISMATCH)
195
DEFINE_RPC_FAULT_CODE(HRESULT_CODE(E_PROXY_NOTSUPPORTED))
196
DEFINE_RPC_FAULT_CODE(HRESULT_CODE(E_PROXY_TS_CONNECTFAILED))
197
DEFINE_RPC_FAULT_CODE(HRESULT_CODE(E_PROXY_MAXCONNECTIONSREACHED))
198
DEFINE_RPC_FAULT_CODE(HRESULT_CODE(E_PROXY_INTERNALERROR))
199
DEFINE_RPC_FAULT_CODE(HRESULT_CODE(E_PROXY_SESSIONTIMEOUT))
200
DEFINE_RPC_FAULT_CODE(HRESULT_CODE(E_PROXY_REAUTH_AUTHN_FAILED))
201
DEFINE_RPC_FAULT_CODE(HRESULT_CODE(E_PROXY_REAUTH_CAP_FAILED))
202
DEFINE_RPC_FAULT_CODE(HRESULT_CODE(E_PROXY_REAUTH_RAP_FAILED))
203
DEFINE_RPC_FAULT_CODE(HRESULT_CODE(E_PROXY_SDR_NOT_SUPPORTED_BY_TS))
204
DEFINE_RPC_FAULT_CODE(HRESULT_CODE(E_PROXY_REAUTH_NAP_FAILED))
205
DEFINE_RPC_FAULT_CODE(HRESULT_CODE(E_PROXY_CONNECTIONABORTED))
206
DEFINE_RPC_FAULT_CODE(HRESULT_CODE(E_PROXY_NOCERTAVAILABLE))
207
DEFINE_RPC_FAULT_CODE(__HRESULT_FROM_WIN32(RPC_S_CALL_CANCELLED))
212
* [MS-RPCE] 3.1.1.5.5 Returning Win32 Error Values:
213
* http://msdn.microsoft.com/en-us/library/ee442005/
216
UINT32 rpc_map_status_code_to_win32_error_code(UINT32 code)
220
case nca_s_comm_failure:
221
return RPC_S_COMM_FAILURE;
222
case nca_s_op_rng_error:
223
return RPC_S_PROCNUM_OUT_OF_RANGE;
225
return RPC_S_UNKNOWN_IF;
226
case nca_s_wrong_boot_time:
227
return nca_s_wrong_boot_time;
228
case nca_s_you_crashed:
229
return RPC_S_CALL_FAILED;
230
case nca_s_proto_error:
231
return RPC_S_PROTOCOL_ERROR;
232
case nca_s_out_args_too_big:
233
return RPC_S_SERVER_OUT_OF_MEMORY;
234
case nca_s_server_too_busy:
235
return RPC_S_SERVER_TOO_BUSY;
236
case nca_s_unsupported_type:
237
return RPC_S_UNSUPPORTED_TYPE;
238
case nca_s_fault_int_div_by_zero:
239
return RPC_S_ZERO_DIVIDE;
240
case nca_s_fault_addr_error:
241
return RPC_S_ADDRESS_ERROR;
242
case nca_s_fault_fp_div_zero:
243
return RPC_S_FP_DIV_ZERO;
244
case nca_s_fault_fp_underflow:
245
return RPC_S_FP_UNDERFLOW;
246
case nca_s_fault_fp_overflow:
247
return RPC_S_FP_OVERFLOW;
248
case nca_s_fault_invalid_tag:
249
return RPC_S_INVALID_TAG;
250
case nca_s_fault_invalid_bound:
251
return RPC_S_INVALID_BOUND;
252
case nca_s_rpc_version_mismatch:
253
return RPC_S_PROTOCOL_ERROR;
254
case nca_s_unspec_reject:
255
return RPC_S_CALL_FAILED;
256
case nca_s_bad_actid:
257
return RPC_S_CALL_FAILED_DNE;
258
case nca_s_who_are_you_failed:
259
return RPC_S_CALL_FAILED;
260
case nca_s_manager_not_entered:
261
return RPC_S_CALL_FAILED_DNE;
262
case nca_s_fault_cancel:
263
return RPC_S_CALL_CANCELLED;
264
case nca_s_fault_ill_inst:
265
return RPC_S_ADDRESS_ERROR;
266
case nca_s_fault_fp_error:
267
return RPC_S_FP_OVERFLOW;
268
case nca_s_fault_int_overflow:
269
return RPC_S_ADDRESS_ERROR;
270
case nca_s_fault_unspec:
271
return RPC_S_CALL_FAILED;
272
case nca_s_fault_remote_comm_failure:
273
return nca_s_fault_remote_comm_failure;
274
case nca_s_fault_pipe_empty:
275
return RPC_X_PIPE_EMPTY;
276
case nca_s_fault_pipe_closed:
277
return RPC_X_PIPE_CLOSED;
278
case nca_s_fault_pipe_order:
279
return RPC_X_WRONG_PIPE_ORDER;
280
case nca_s_fault_pipe_discipline:
281
return RPC_X_PIPE_DISCIPLINE_ERROR;
282
case nca_s_fault_pipe_comm_error:
283
return RPC_S_COMM_FAILURE;
284
case nca_s_fault_pipe_memory:
285
return RPC_S_OUT_OF_MEMORY;
286
case nca_s_fault_context_mismatch:
287
return RPC_X_SS_CONTEXT_MISMATCH;
288
case nca_s_fault_remote_no_memory:
289
return RPC_S_SERVER_OUT_OF_MEMORY;
290
case nca_s_invalid_pres_context_id:
291
return RPC_S_PROTOCOL_ERROR;
292
case nca_s_unsupported_authn_level:
293
return RPC_S_UNSUPPORTED_AUTHN_LEVEL;
294
case nca_s_invalid_checksum:
295
return RPC_S_CALL_FAILED_DNE;
296
case nca_s_invalid_crc:
297
return RPC_S_CALL_FAILED_DNE;
298
case nca_s_fault_user_defined:
299
return nca_s_fault_user_defined;
300
case nca_s_fault_tx_open_failed:
301
return nca_s_fault_tx_open_failed;
302
case nca_s_fault_codeset_conv_error:
303
return nca_s_fault_codeset_conv_error;
304
case nca_s_fault_object_not_found:
305
return nca_s_fault_object_not_found;
306
case nca_s_fault_no_client_stub:
307
return nca_s_fault_no_client_stub;
313
int rpc_recv_fault_pdu(rpcconn_hdr_t* header)
318
fprintf(stderr, "RPC Fault PDU:\n");
320
code = rpc_map_status_code_to_win32_error_code(header->fault.status);
322
for (index = 0; RPC_FAULT_CODES[index].name != NULL; index++)
324
if (RPC_FAULT_CODES[index].code == code)
326
fprintf(stderr, "status: %s (0x%08X)\n", RPC_FAULT_CODES[index].name, code);
331
for (index = 0; RPC_TSG_FAULT_CODES[index].name != NULL; index++)
333
if (RPC_TSG_FAULT_CODES[index].code == code)
335
fprintf(stderr, "status: %s (0x%08X)\n", RPC_TSG_FAULT_CODES[index].name, code);
340
fprintf(stderr, "status: %s (0x%08X)\n", "UNKNOWN", code);