summaryrefslogtreecommitdiff
path: root/libcli/util/werror.h
blob: c04ffd8031e6a0d179aef47043909e3f84e2c749 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
/* 
   Unix SMB/CIFS implementation.
   SMB parameters and setup, plus a whole lot more.
   
   Copyright (C) Andrew Tridgell              2001
   
   This program is free software; you can redistribute it and/or modify
   it under the terms of the GNU General Public License as published by
   the Free Software Foundation; either version 3 of the License, or
   (at your option) any later version.
   
   This program is distributed in the hope that it will be useful,
   but WITHOUT ANY WARRANTY; without even the implied warranty of
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
   GNU General Public License for more details.
   
   You should have received a copy of the GNU General Public License
   along with this program.  If not, see <http://www.gnu.org/licenses/>.
*/

#ifndef _WERROR_H_
#define _WERROR_H_

#include <stdint.h>

/* the following rather strange looking definitions of NTSTATUS and WERROR
   and there in order to catch common coding errors where different error types
   are mixed up. This is especially important as we slowly convert Samba
   from using bool for internal functions 
*/

#if defined(HAVE_IMMEDIATE_STRUCTURES)
typedef struct {uint32_t v;} WERROR;
#define W_ERROR(x) ((WERROR) { x })
#define W_ERROR_V(x) ((x).v)
#else
typedef uint32_t WERROR;
#define W_ERROR(x) (x)
#define W_ERROR_V(x) (x)
#endif

#define W_ERROR_IS_OK(x) (W_ERROR_V(x) == 0)
#define W_ERROR_EQUAL(x,y) (W_ERROR_V(x) == W_ERROR_V(y))

#define W_ERROR_HAVE_NO_MEMORY(x) do { \
	if (!(x)) {\
		return WERR_NOMEM;\
	}\
} while (0)

#define W_ERROR_IS_OK_RETURN(x) do { \
	if (W_ERROR_IS_OK(x)) {\
		return x;\
	}\
} while (0)

#define W_ERROR_NOT_OK_RETURN(x) do { \
	if (!W_ERROR_IS_OK(x)) {\
		return x;\
	}\
} while (0)

#define W_ERROR_NOT_OK_GOTO_DONE(x) do { \
	if (!W_ERROR_IS_OK(x)) {\
		goto done;\
	}\
} while (0)

#define W_ERROR_NOT_OK_GOTO(x, y) do {\
	if (!W_ERROR_IS_OK(x)) {\
		goto y;\
	}\
} while(0)

/* these are win32 error codes. There are only a few places where
   these matter for Samba, primarily in the NT printing code */
#define WERR_OK W_ERROR(0x00000000)
#define WERR_BADFUNC W_ERROR(0x00000001)
#define WERR_BADFILE W_ERROR(0x00000002)
#define WERR_ACCESS_DENIED W_ERROR(0x00000005)
#define WERR_BADFID W_ERROR(0x00000006)
#define WERR_NOMEM W_ERROR(0x00000008)
#define WERR_GENERAL_FAILURE W_ERROR(0x0000001F)
#define WERR_NOT_SUPPORTED W_ERROR(0x00000032)
#define WERR_DUP_NAME W_ERROR(0x00000034)
#define WERR_BAD_NETPATH W_ERROR(0x00000035)
#define WERR_BAD_NET_RESP W_ERROR(0x0000003A)
#define WERR_UNEXP_NET_ERR W_ERROR(0x0000003B)
#define WERR_DEVICE_NOT_EXIST W_ERROR(0x00000037)
#define WERR_PRINTQ_FULL W_ERROR(0x0000003D)
#define WERR_NO_SPOOL_SPACE W_ERROR(0x0000003E)
#define WERR_NO_SUCH_SHARE W_ERROR(0x00000043)
#define WERR_FILE_EXISTS W_ERROR(0x00000050)
#define WERR_BAD_PASSWORD W_ERROR(0x00000056)
#define WERR_INVALID_PARAM W_ERROR(0x00000057)
#define WERR_CALL_NOT_IMPLEMENTED W_ERROR(0x00000078)
#define WERR_SEM_TIMEOUT W_ERROR(0x00000079)
#define WERR_INSUFFICIENT_BUFFER W_ERROR(0x0000007A)
#define WERR_INVALID_NAME W_ERROR(0x0000007B)
#define WERR_UNKNOWN_LEVEL W_ERROR(0x0000007C)
#define WERR_OBJECT_PATH_INVALID W_ERROR(0x000000A1)
#define WERR_ALREADY_EXISTS W_ERROR(0x000000B7)
#define WERR_MORE_DATA W_ERROR(0x000000EA)
#define WERR_NO_MORE_ITEMS W_ERROR(0x00000103)
#define WERR_STATUS_MORE_ENTRIES W_ERROR(0x00000105)
#define WERR_IO_PENDING W_ERROR(0x000003E5)
#define WERR_CAN_NOT_COMPLETE W_ERROR(0x000003EB)
#define WERR_INVALID_FLAGS W_ERROR(0x000003EC)
#define WERR_REG_CORRUPT W_ERROR(0x000003F7)
#define WERR_REG_IO_FAILURE W_ERROR(0x000003F8)
#define WERR_REG_FILE_INVALID W_ERROR(0x000003F9)
#define WERR_INVALID_SERVICE_CONTROL W_ERROR(0x0000041C)
#define WERR_SERVICE_ALREADY_RUNNING W_ERROR(0x00000420)
#define WERR_SERVICE_DISABLED W_ERROR(0x00000422)
#define WERR_NO_SUCH_SERVICE W_ERROR(0x00000424)
#define WERR_SERVICE_MARKED_FOR_DELETE W_ERROR(0x00000430)
#define WERR_SERVICE_EXISTS W_ERROR(0x00000431)
#define WERR_SERVICE_NEVER_STARTED W_ERROR(0x00000435)
#define WERR_DUPLICATE_SERVICE_NAME W_ERROR(0x00000436)
#define WERR_DEVICE_NOT_CONNECTED W_ERROR(0x0000048F)
#define WERR_NOT_FOUND W_ERROR(0x00000490)
#define WERR_INVALID_COMPUTERNAME W_ERROR(0x000004BA)
#define WERR_INVALID_DOMAINNAME W_ERROR(0x000004BC)
#define WERR_NOT_AUTHENTICATED W_ERROR(0x000004DC)
#define WERR_MACHINE_LOCKED W_ERROR(0x000004F7)
#define WERR_UNKNOWN_REVISION W_ERROR(0x00000519)
#define WERR_INVALID_OWNER W_ERROR(0x0000051B)
#define WERR_REVISION_MISMATCH W_ERROR(0x0000051A)
#define WERR_INVALID_OWNER W_ERROR(0x0000051B)
#define WERR_INVALID_PRIMARY_GROUP W_ERROR(0x0000051C)
#define WERR_NO_LOGON_SERVERS W_ERROR(0x0000051F)
#define WERR_NO_SUCH_LOGON_SESSION W_ERROR(0x00000520)
#define WERR_NO_SUCH_PRIVILEGE W_ERROR(0x00000521)
#define WERR_PRIVILEGE_NOT_HELD W_ERROR(0x00000522)
#define WERR_USER_ALREADY_EXISTS W_ERROR(0x00000524)
#define WERR_NO_SUCH_USER W_ERROR(0x00000525)
#define WERR_GROUP_EXISTS W_ERROR(0x00000526)
#define WERR_NO_SUCH_GROUP W_ERROR(0x00000527)
#define WERR_MEMBER_IN_GROUP W_ERROR(0x00000528)
#define WERR_USER_NOT_IN_GROUP W_ERROR(0x00000529)
#define WERR_WRONG_PASSWORD W_ERROR(0x0000052B)
#define WERR_PASSWORD_RESTRICTION W_ERROR(0x0000052D)
#define WERR_LOGON_FAILURE W_ERROR(0x0000052E)
#define WERR_NONE_MAPPED W_ERROR(0x00000534)
#define WERR_INVALID_SECURITY_DESCRIPTOR W_ERROR(0x0000053A)
#define WERR_INVALID_DOMAIN_STATE W_ERROR(0x00000549)
#define WERR_INVALID_DOMAIN_ROLE W_ERROR(0x0000054A)
#define WERR_NO_SUCH_DOMAIN W_ERROR(0x0000054B)
#define WERR_SPECIAL_ACCOUNT W_ERROR(0x0000055B)
#define WERR_NO_SUCH_ALIAS W_ERROR(0x00000560)
#define WERR_MEMBER_IN_ALIAS W_ERROR(0x00000562)
#define WERR_ALIAS_EXISTS W_ERROR(0x00000563)
#define WERR_TIME_SKEW W_ERROR(0x00000576)
#define WERR_NO_SYSTEM_RESOURCES W_ERROR(0x000005AA)
#define WERR_EVENTLOG_FILE_CORRUPT W_ERROR(0x000005DC)
#define WERR_SERVER_UNAVAILABLE W_ERROR(0x000006BA)
#define WERR_INVALID_USER_BUFFER W_ERROR(0x000006F8)
#define WERR_NO_TRUST_SAM_ACCOUNT W_ERROR(0x000006FB)
#define WERR_INVALID_FORM_NAME W_ERROR(0x0000076E)
#define WERR_INVALID_FORM_SIZE W_ERROR(0x0000076F)
#define WERR_PASSWORD_MUST_CHANGE W_ERROR(0x00000773)
#define WERR_DOMAIN_CONTROLLER_NOT_FOUND W_ERROR(0x00000774)
#define WERR_ACCOUNT_LOCKED_OUT W_ERROR(0x00000775)


#define WERR_DEVICE_NOT_AVAILABLE W_ERROR(0x000010DF)

#define WERR_PRINTER_DRIVER_ALREADY_INSTALLED	W_ERROR(0x00000703)
#define WERR_UNKNOWN_PORT			W_ERROR(0x00000704)
#define WERR_UNKNOWN_PRINTER_DRIVER		W_ERROR(0x00000705)
#define WERR_UNKNOWN_PRINTPROCESSOR		W_ERROR(0x00000706)
#define WERR_INVALID_SEPARATOR_FILE		W_ERROR(0x00000707)
#define WERR_INVALID_PRIORITY			W_ERROR(0x00000708)
#define WERR_INVALID_PRINTER_NAME		W_ERROR(0x00000709)
#define WERR_PRINTER_ALREADY_EXISTS		W_ERROR(0x0000070A)
#define WERR_INVALID_PRINTER_COMMAND		W_ERROR(0x0000070B)
#define WERR_INVALID_DATATYPE			W_ERROR(0x0000070C)
#define WERR_INVALID_ENVIRONMENT		W_ERROR(0x0000070D)

#define WERR_UNKNOWN_PRINT_MONITOR		W_ERROR(0x00000BB8)
#define WERR_PRINTER_DRIVER_IN_USE		W_ERROR(0x00000BB9)
#define WERR_SPOOL_FILE_NOT_FOUND		W_ERROR(0x00000BBA)
#define WERR_SPL_NO_STARTDOC			W_ERROR(0x00000BBB)
#define WERR_SPL_NO_ADDJOB			W_ERROR(0x00000BBC)
#define WERR_PRINT_PROCESSOR_ALREADY_INSTALLED	W_ERROR(0x00000BBD)
#define WERR_PRINT_MONITOR_ALREADY_INSTALLED	W_ERROR(0x00000BBE)
#define WERR_INVALID_PRINT_MONITOR		W_ERROR(0x00000BBF)
#define WERR_PRINT_MONITOR_IN_USE		W_ERROR(0x00000BC0)
#define WERR_PRINTER_HAS_JOBS_QUEUED		W_ERROR(0x00000BC1)

#define WERR_NO_SHUTDOWN_IN_PROGRESS W_ERROR(0x0000045c)
#define WERR_SHUTDOWN_ALREADY_IN_PROGRESS W_ERROR(0x0000045b)

/* Configuration Manager Errors */
/* Basically Win32 errors meanings are specific to the \ntsvcs pipe */
#define WERR_CM_INVALID_POINTER W_ERROR(3)
#define WERR_CM_BUFFER_SMALL W_ERROR(26)
#define WERR_CM_NO_MORE_HW_PROFILES W_ERROR(35)
#define WERR_CM_NO_SUCH_VALUE W_ERROR(37)

/* DFS errors */

#ifndef NERR_BASE
#define NERR_BASE (2100)
#endif

#ifndef MAX_NERR
#define MAX_NERR (NERR_BASE+899)
#endif

#define WERR_BUF_TOO_SMALL		W_ERROR(0x0000084B)
#define WERR_ALREADY_SHARED		W_ERROR(0x00000846)
#define WERR_JOB_NOT_FOUND		W_ERROR(0x00000867)
#define WERR_DEST_NOT_FOUND		W_ERROR(0x00000868)
#define WERR_GROUP_NOT_FOUND		W_ERROR(0x000008AC)
#define WERR_USER_NOT_FOUND		W_ERROR(0x000008AD)
#define WERR_USER_EXISTS		W_ERROR(0x000008B0)
#define WERR_NOT_CONNECTED		W_ERROR(0x000008CA)
#define WERR_NAME_NOT_FOUND		W_ERROR(0x000008E1)
#define WERR_NET_NAME_NOT_FOUND		W_ERROR(0x00000906)
#define WERR_SESSION_NOT_FOUND		W_ERROR(0x00000908)
#define WERR_DEVICE_NOT_SHARED		W_ERROR(0x00000907)
#define WERR_FID_NOT_FOUND		W_ERROR(0x0000090A)
#define WERR_NOT_LOCAL_DOMAIN		W_ERROR(0x00000910)
#define WERR_DC_NOT_FOUND		W_ERROR(0x00000995)
#define WERR_TIME_DIFF_AT_DC		W_ERROR(0x00000999)
#define WERR_DFS_NO_SUCH_VOL		W_ERROR(0x00000A66)
#define WERR_DFS_NO_SUCH_SHARE		W_ERROR(0x00000A69)
#define WERR_DFS_NO_SUCH_SERVER		W_ERROR(0x00000A71)
#define WERR_DFS_INTERNAL_ERROR		W_ERROR(0x00000A82)
#define WERR_DFS_CANT_CREATE_JUNCT	W_ERROR(0x00000A6D)
#define WERR_SETUP_ALREADY_JOINED	W_ERROR(0x00000A83)
#define WERR_SETUP_NOT_JOINED		W_ERROR(0x00000A84)
#define WERR_SETUP_DOMAIN_CONTROLLER	W_ERROR(0x00000A85)
#define WERR_DEFAULT_JOIN_REQUIRED	W_ERROR(0x00000A86)

/* DS errors */
#define WERR_DS_NO_ATTRIBUTE_OR_VALUE W_ERROR(0x0000200A)
#define WERR_DS_INVALID_ATTRIBUTE_SYNTAX W_ERROR(0x0000200B)
#define WERR_DS_ATTRIBUTE_TYPE_UNDEFINED W_ERROR(0x0000200C)
#define WERR_DS_ATTRIBUTE_OR_VALUE_EXISTS W_ERROR(0x0000200D)
#define WERR_DS_BUSY W_ERROR(0x0000200E)
#define WERR_DS_UNAVAILABLE W_ERROR(0x0000200F)
#define WERR_DS_OBJ_CLASS_VIOLATION W_ERROR(0x00002014)
#define WERR_DS_CANT_ON_NON_LEAF W_ERROR(0x00002015)
#define WERR_DS_CANT_ON_RDN W_ERROR(0x00002016)
#define WERR_DS_CANT_MOD_OBJ_CLASS W_ERROR(0x00002017)
#define WERR_DS_OPERATIONS_ERROR W_ERROR(0x00002020)
#define WERR_DS_PROTOCOL_ERROR W_ERROR(0x00002021)
#define WERR_DS_TIMELIMIT_EXCEEDED W_ERROR(0x00002022)
#define WERR_DS_SIZE_LIMIT_EXCEEDED W_ERROR(0x00002023)
#define WERR_DS_ADMIN_LIMIT_EXCEEDED W_ERROR(0x00002024)
#define WERR_DS_COMPARE_FALSE W_ERROR(0x00002025)
#define WERR_DS_COMPARE_TRUE W_ERROR(0x00002026)
#define WERR_DS_AUTH_METHOD_NOT_SUPPORTED W_ERROR(0x00002027)
#define WERR_DS_STRONG_AUTH_REQUIRED W_ERROR(0x00002028)
#define WERR_DS_INAPPROPRIATE_AUTH W_ERROR(0x00002029)
#define WERR_DS_REFERRAL W_ERROR(0x0000202B)
#define WERR_DS_UNAVAILABLE_CRIT_EXTENSION W_ERROR(0x0000202C)
#define WERR_DS_CONFIDENTIALITY_REQUIRED W_ERROR(0x0000202D)
#define WERR_DS_INAPPROPRIATE_MATCHING W_ERROR(0x0000202E)
#define WERR_DS_CONSTRAINT_VIOLATION W_ERROR(0x0000202F)
#define WERR_DS_NO_SUCH_OBJECT W_ERROR(0x00002030)
#define WERR_DS_ALIAS_PROBLEM W_ERROR(0x00002031)
#define WERR_DS_INVALID_DN_SYNTAX W_ERROR(0x00002032)
#define WERR_DS_ALIAS_DEREF_PROBLEM W_ERROR(0x00002034)
#define WERR_DS_UNWILLING_TO_PERFORM W_ERROR(0x00002035)
#define WERR_DS_LOOP_DETECT W_ERROR(0x00002036)
#define WERR_DS_NAMING_VIOLATION W_ERROR(0x00002037)
#define WERR_DS_AFFECTS_MULTIPLE_DSAS W_ERROR(0x00002039)
#define WERR_DS_OBJ_STRING_NAME_EXISTS W_ERROR(0x00002071)
#define WERR_DS_OBJ_NOT_FOUND W_ERROR(0x0000208D)
#define WERR_DS_GENERIC_ERROR W_ERROR(0x00002095)
#define WERR_DS_INSUFF_ACCESS_RIGHTS W_ERROR(0x00002098)
#define WERR_DS_SCHEMA_NOT_LOADED W_ERROR(0x20DE)
#define WERR_DS_SCHEMA_ALLOC_FAILED W_ERROR(0x20DF)
#define WERR_DS_ATT_SCHEMA_REQ_SYNTAX W_ERROR(0x000020E0)
#define WERR_DS_DRA_SCHEMA_MISMATCH W_ERROR(0x000020E2)
#define WERR_DS_DRA_INVALID_PARAMETER W_ERROR(0x000020F5)
#define WERR_DS_DRA_BAD_DN W_ERROR(0x000020F7)
#define WERR_DS_DRA_BAD_NC W_ERROR(0x000020F8)
#define WERR_DS_DRA_INTERNAL_ERROR W_ERROR(0x000020FA)
#define WERR_DS_DRA_OUT_OF_MEM W_ERROR(0x000020FE)
#define WERR_DS_SINGLE_VALUE_CONSTRAINT W_ERROR(0x00002081)
#define WERR_DS_DRA_DB_ERROR W_ERROR(0x00002103)
#define WERR_DS_DRA_NO_REPLICA W_ERROR(0x00002104)
#define WERR_DS_DRA_ACCESS_DENIED W_ERROR(0x00002105)
#define WERR_DS_DRA_SOURCE_DISABLED W_ERROR(0x00002108)
#define WERR_DS_DNS_LOOKUP_FAILURE W_ERROR(0x0000214C)
#define WERR_DS_WRONG_LINKED_ATTRIBUTE_SYNTAX W_ERROR(0x00002150)
#define WERR_DS_NO_MSDS_INTID W_ERROR(0x00002194)
#define WERR_DS_DUP_MSDS_INTID W_ERROR(0x00002195)

/* FRS errors */
#define WERR_FRS_INSUFFICIENT_PRIV W_ERROR(0x00001F47)
#define WERR_FRS_SYSVOL_IS_BUSY W_ERROR(0x00001F4F)
#define WERR_FRS_INVALID_SERVICE_PARAMETER W_ERROR(0x00001F51)

/* RPC/COM/OLE HRESULT error codes */
/* RPC errors */
#define WERR_RPC_E_INVALID_HEADER	W_ERROR(0x80010111)
#define WERR_RPC_E_REMOTE_DISABLED	W_ERROR(0x8001011c)

/* SEC errors */
#define WERR_SEC_E_ENCRYPT_FAILURE	W_ERROR(0x80090329)
#define WERR_SEC_E_DECRYPT_FAILURE	W_ERROR(0x80090330)
#define WERR_SEC_E_ALGORITHM_MISMATCH	W_ERROR(0x80090331)

/* COM REGDB error codes */
#define WERR_CLASS_NOT_REGISTERED 	W_ERROR(0x80040154)	/* REGDB_E_CLASSNOTREG */

/* Generic error code aliases */
#define WERR_FOOBAR WERR_GENERAL_FAILURE

/*****************************************************************************
 returns a windows error message.  not amazingly helpful, but better than a number.
 *****************************************************************************/
const char *win_errstr(WERROR werror);

const char *get_friendly_werror_msg(WERROR werror);


#endif