2 * Unix SMB/CIFS implementation.
4 * Copyright (C) Tim Potter 2002.
6 * This program is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License as published by
8 * the Free Software Foundation; either version 3 of the License, or
9 * (at your option) any later version.
11 * This program is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 * GNU General Public License for more details.
16 * You should have received a copy of the GNU General Public License
17 * along with this program; if not, see <http://www.gnu.org/licenses/>.
20 /* DOS error codes. please read doserr.h */
23 #include "libcli/util/werror.h"
24 #include "libcli/util/hresult.h"
26 struct werror_code_struct
{
27 const char *dos_errstr
;
31 struct werror_str_struct
{
33 const char *friendly_errstr
;
36 static const struct werror_code_struct special_errs
[] =
38 { "WERR_DNS_ERROR_NOT_ALLOWED_ON_ACTIVE_SKD", WERR_DNS_ERROR_NOT_ALLOWED_ON_ACTIVE_SKD
},
39 { "WERR_DNS_ERROR_INVALID_NSEC3_PARAMETERS", WERR_DNS_ERROR_INVALID_NSEC3_PARAMETERS
},
40 { "WERR_DNS_ERROR_DNSSEC_IS_DISABLED", WERR_DNS_ERROR_DNSSEC_IS_DISABLED
},
41 { "WERR_DNS_ERROR_NOT_ALLOWED_ON_UNSIGNED_ZONE", WERR_DNS_ERROR_NOT_ALLOWED_ON_UNSIGNED_ZONE
},
42 { "WERR_DNS_ERROR_KSP_DOES_NOT_SUPPORT_PROTECTION", WERR_DNS_ERROR_KSP_DOES_NOT_SUPPORT_PROTECTION
},
43 { "WERR_DNS_ERROR_BAD_KEYMASTER", WERR_DNS_ERROR_BAD_KEYMASTER
},
44 { "WERR_USER_APC", WERR_USER_APC
},
45 { "WERR_DNS_ERROR_UNEXPECTED_DATA_PROTECTION_ERROR", WERR_DNS_ERROR_UNEXPECTED_DATA_PROTECTION_ERROR
},
46 { "WERR_WAIT_2", WERR_WAIT_2
},
47 { "WERR_WAIT_3", WERR_WAIT_3
},
48 { "WERR_WAIT_1", WERR_WAIT_1
},
49 { "WERR_DNS_ERROR_NSEC3_NAME_COLLISION", WERR_DNS_ERROR_NSEC3_NAME_COLLISION
},
50 { "WERR_DNS_ERROR_KSP_NOT_ACCESSIBLE", WERR_DNS_ERROR_KSP_NOT_ACCESSIBLE
},
51 { "WERR_DNS_ERROR_ROLLOVER_NOT_POKEABLE", WERR_DNS_ERROR_ROLLOVER_NOT_POKEABLE
},
52 { "WERR_DNS_ERROR_INVALID_KEY_SIZE", WERR_DNS_ERROR_INVALID_KEY_SIZE
},
53 { "WERR_DNS_ERROR_ROLLOVER_ALREADY_QUEUED", WERR_DNS_ERROR_ROLLOVER_ALREADY_QUEUED
},
54 { "WERR_DNS_ERROR_UNKNOWN_SIGNING_PARAMETER_VERSION", WERR_DNS_ERROR_UNKNOWN_SIGNING_PARAMETER_VERSION
},
55 { "WERR_DNS_ERROR_INVALID_INITIAL_ROLLOVER_OFFSET", WERR_DNS_ERROR_INVALID_INITIAL_ROLLOVER_OFFSET
},
56 { "WERR_DNS_ERROR_SIGNING_KEY_NOT_ACCESSIBLE", WERR_DNS_ERROR_SIGNING_KEY_NOT_ACCESSIBLE
},
57 { "WERR_DNS_REQUEST_PENDING", WERR_DNS_REQUEST_PENDING
},
58 { "WERR_LOG_HARD_ERROR", WERR_LOG_HARD_ERROR
},
59 { "WERR_DNS_ERROR_NOT_ALLOWED_ON_ZSK", WERR_DNS_ERROR_NOT_ALLOWED_ON_ZSK
},
60 { "WERR_OK", WERR_OK
},
61 { "WERR_DNS_ERROR_KEYMASTER_REQUIRED", WERR_DNS_ERROR_KEYMASTER_REQUIRED
},
62 { "WERR_STATUS_MORE_ENTRIES", WERR_STATUS_MORE_ENTRIES
},
63 { "WERR_DS_INVALID_ATTRIBUTE_SYNTAX", WERR_DS_INVALID_ATTRIBUTE_SYNTAX
},
64 { "WERR_ALERTED", WERR_ALERTED
},
65 { "WERR_DNS_ERROR_UNSUPPORTED_ALGORITHM", WERR_DNS_ERROR_UNSUPPORTED_ALGORITHM
},
66 { "WERR_DNS_ERROR_INVALID_NSEC3_ITERATION_COUNT", WERR_DNS_ERROR_INVALID_NSEC3_ITERATION_COUNT
},
67 { "WERR_DNS_ERROR_INVALID_XML", WERR_DNS_ERROR_INVALID_XML
},
68 { "WERR_DNS_ERROR_DELEGATION_REQUIRED", WERR_DNS_ERROR_DELEGATION_REQUIRED
},
69 { "WERR_ABANDONED_WAIT_63", WERR_ABANDONED_WAIT_63
},
70 { "WERR_DNS_ERROR_UNEXPECTED_CNG_ERROR", WERR_DNS_ERROR_UNEXPECTED_CNG_ERROR
},
71 { "WERR_DNS_ERROR_DNAME_COLLISION", WERR_DNS_ERROR_DNAME_COLLISION
},
72 { "WERR_DNS_ERROR_INVALID_POLICY_TABLE", WERR_DNS_ERROR_INVALID_POLICY_TABLE
},
73 { "WERR_DNS_ERROR_NO_VALID_TRUST_ANCHORS", WERR_DNS_ERROR_NO_VALID_TRUST_ANCHORS
},
74 { "WERR_MULTIPLE_FAULT_VIOLATION", WERR_MULTIPLE_FAULT_VIOLATION
},
75 { "WERR_DNS_ERROR_INVALID_ROLLOVER_PERIOD", WERR_DNS_ERROR_INVALID_ROLLOVER_PERIOD
},
76 { "WERR_DNS_ERROR_INVALID_SIGNATURE_VALIDITY_PERIOD", WERR_DNS_ERROR_INVALID_SIGNATURE_VALIDITY_PERIOD
},
77 { "WERR_DNS_ERROR_NOT_ENOUGH_SIGNING_KEY_DESCRIPTORS", WERR_DNS_ERROR_NOT_ENOUGH_SIGNING_KEY_DESCRIPTORS
},
78 { "WERR_INVALID_PRIMARY_GROUP", WERR_INVALID_PRIMARY_GROUP
},
79 { "WERR_KERNEL_APC", WERR_KERNEL_APC
},
80 { "WERR_DNS_ERROR_NOT_ALLOWED_UNDER_DNAME", WERR_DNS_ERROR_NOT_ALLOWED_UNDER_DNAME
},
81 { "WERR_DNS_ERROR_TOO_MANY_SKDS", WERR_DNS_ERROR_TOO_MANY_SKDS
},
82 { "WERR_DNS_ERROR_NODE_IS_DNMAE", WERR_DNS_ERROR_NODE_IS_DNAME
},
83 { "WERR_DNS_ERROR_NODE_IS_DNAME", WERR_DNS_ERROR_NODE_IS_DNAME
},
84 { "WERR_SERVICE_NOTIFICATION", WERR_SERVICE_NOTIFICATION
},
85 { "WERR_WAIT_63", WERR_WAIT_63
},
86 { "WERR_DNS_ERROR_STANDBY_KEY_NOT_PRESENT", WERR_DNS_ERROR_STANDBY_KEY_NOT_PRESENT
},
87 { "WERR_DNS_ERROR_ALIAS_LOOP", WERR_DNS_ERROR_ALIAS_LOOP
},
88 { "WERR_DNS_ERROR_ROLLOVER_IN_PROGRESS", WERR_DNS_ERROR_ROLLOVER_IN_PROGRESS
},
89 { "WERR_DNS_ERROR_NOT_ALLOWED_ON_SIGNED_ZONE", WERR_DNS_ERROR_NOT_ALLOWED_ON_SIGNED_ZONE
},
93 /*****************************************************************************
94 returns a windows error message. not amazingly helpful, but better than a number.
95 *****************************************************************************/
96 const char *win_errstr(WERROR werror
)
101 while (special_errs
[idx
].dos_errstr
!= NULL
) {
102 if (W_ERROR_V(special_errs
[idx
].werror
) ==
104 return special_errs
[idx
].dos_errstr
;
110 switch W_ERROR_V(werror
) {
111 #include "werror_gen.c"
117 * WERROR codes are 16-bit only, if the
118 * upper 16-bit are not 0, it's likely
121 * E.g. we should display HRES_SEC_E_WRONG_PRINCIPAL instead of
122 * 'DOS code 0x80090322'
124 if ((W_ERROR_V(werror
) & 0xFFFF0000) != 0) {
125 HRESULT hres
= HRES_ERROR(W_ERROR_V(werror
));
126 return hresult_errstr(hres
);
129 slprintf(msg
, sizeof(msg
), "DOS code 0x%08x", W_ERROR_V(werror
));
134 /*****************************************************************************
135 Get friendly error string for WERRORs
136 *****************************************************************************/
138 const char *get_friendly_werror_msg(WERROR werror
)
140 switch W_ERROR_V(werror
) {
141 #include "werror_friendly_gen.c"
146 return win_errstr(werror
);