xref: /freebsd/contrib/openbsm/libbsm/bsm_errno.c (revision 88640c0e)
17a0a89d2SRobert Watson /*-
27a0a89d2SRobert Watson  * Copyright (c) 2008 Apple Inc.
37a0a89d2SRobert Watson  * All rights reserved.
47a0a89d2SRobert Watson  *
57a0a89d2SRobert Watson  * Redistribution and use in source and binary forms, with or without
67a0a89d2SRobert Watson  * modification, are permitted provided that the following conditions
77a0a89d2SRobert Watson  * are met:
87a0a89d2SRobert Watson  * 1.  Redistributions of source code must retain the above copyright
97a0a89d2SRobert Watson  *     notice, this list of conditions and the following disclaimer.
107a0a89d2SRobert Watson  * 2.  Redistributions in binary form must reproduce the above copyright
117a0a89d2SRobert Watson  *     notice, this list of conditions and the following disclaimer in the
127a0a89d2SRobert Watson  *     documentation and/or other materials provided with the distribution.
137a0a89d2SRobert Watson  * 3.  Neither the name of Apple Inc. ("Apple") nor the names of
147a0a89d2SRobert Watson  *     its contributors may be used to endorse or promote products derived
157a0a89d2SRobert Watson  *     from this software without specific prior written permission.
167a0a89d2SRobert Watson  *
177a0a89d2SRobert Watson  * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND
187a0a89d2SRobert Watson  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
197a0a89d2SRobert Watson  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
207a0a89d2SRobert Watson  * ARE DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR
217a0a89d2SRobert Watson  * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
227a0a89d2SRobert Watson  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
237a0a89d2SRobert Watson  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
247a0a89d2SRobert Watson  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
257a0a89d2SRobert Watson  * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
267a0a89d2SRobert Watson  * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
277a0a89d2SRobert Watson  * POSSIBILITY OF SUCH DAMAGE.
287a0a89d2SRobert Watson  */
297a0a89d2SRobert Watson 
307a0a89d2SRobert Watson #include <sys/types.h>
317a0a89d2SRobert Watson 
327a0a89d2SRobert Watson #include <config/config.h>
337a0a89d2SRobert Watson 
347a0a89d2SRobert Watson #include <bsm/audit_errno.h>
357a0a89d2SRobert Watson #include <bsm/libbsm.h>
367a0a89d2SRobert Watson 
377a0a89d2SRobert Watson #include <errno.h>
387a0a89d2SRobert Watson #include <string.h>
397a0a89d2SRobert Watson 
407a0a89d2SRobert Watson /*
417a0a89d2SRobert Watson  * Different operating systems use different numeric constants for different
427a0a89d2SRobert Watson  * error numbers, and sometimes error numbers don't exist in more than one
437a0a89d2SRobert Watson  * operating system.  These routines convert between BSM and local error
447a0a89d2SRobert Watson  * number spaces, subject to the above realities.  BSM error numbers are
457a0a89d2SRobert Watson  * stored in a single 8-bit character, so don't have a byte order.
46c74c7b73SRobert Watson  *
47c74c7b73SRobert Watson  * Don't include string definitions when this code is compiled into a kernel.
487a0a89d2SRobert Watson  */
49c74c7b73SRobert Watson struct bsm_errno {
50c74c7b73SRobert Watson 	int		 be_bsm_errno;
51c74c7b73SRobert Watson 	int		 be_local_errno;
52c74c7b73SRobert Watson #if !defined(KERNEL) && !defined(_KERNEL)
537a0a89d2SRobert Watson 	const char	*be_strerror;
54c74c7b73SRobert Watson #endif
557a0a89d2SRobert Watson };
567a0a89d2SRobert Watson 
577a0a89d2SRobert Watson #define	ERRNO_NO_LOCAL_MAPPING	-600
587a0a89d2SRobert Watson 
59c74c7b73SRobert Watson #if !defined(KERNEL) && !defined(_KERNEL)
60c74c7b73SRobert Watson #define	ES(x)	x
61c74c7b73SRobert Watson #else
62c74c7b73SRobert Watson #define	ES(x)
63c74c7b73SRobert Watson #endif
64c74c7b73SRobert Watson 
657a0a89d2SRobert Watson /*
667a0a89d2SRobert Watson  * Mapping table -- please maintain in numeric sorted order with respect to
677a0a89d2SRobert Watson  * the BSM constant.  Today we do a linear lookup, but could switch to a
687a0a89d2SRobert Watson  * binary search if it makes sense.  We only ifdef errors that aren't
697a0a89d2SRobert Watson  * generally available, but it does make the table a lot more ugly.
707a0a89d2SRobert Watson  *
717a0a89d2SRobert Watson  * XXXRW: It would be nice to have a similar ordered table mapping to BSM
727a0a89d2SRobert Watson  * constant from local constant, but the order of local constants varies by
737a0a89d2SRobert Watson  * OS.  Really we need to build that table at compile-time but don't do that
747a0a89d2SRobert Watson  * yet.
757a0a89d2SRobert Watson  *
767a0a89d2SRobert Watson  * XXXRW: We currently embed English-language error strings here, but should
777a0a89d2SRobert Watson  * support catalogues; these are only used if the OS doesn't have an error
787a0a89d2SRobert Watson  * string using strerror(3).
797a0a89d2SRobert Watson  */
80c74c7b73SRobert Watson static const struct bsm_errno bsm_errnos[] = {
81c74c7b73SRobert Watson 	{ BSM_ERRNO_ESUCCESS, 0, ES("Success") },
82c74c7b73SRobert Watson 	{ BSM_ERRNO_EPERM, EPERM, ES("Operation not permitted") },
83c74c7b73SRobert Watson 	{ BSM_ERRNO_ENOENT, ENOENT, ES("No such file or directory") },
84c74c7b73SRobert Watson 	{ BSM_ERRNO_ESRCH, ESRCH, ES("No such process") },
85c74c7b73SRobert Watson 	{ BSM_ERRNO_EINTR, EINTR, ES("Interrupted system call") },
86c74c7b73SRobert Watson 	{ BSM_ERRNO_EIO, EIO, ES("Input/output error") },
87c74c7b73SRobert Watson 	{ BSM_ERRNO_ENXIO, ENXIO, ES("Device not configured") },
88c74c7b73SRobert Watson 	{ BSM_ERRNO_E2BIG, E2BIG, ES("Argument list too long") },
89c74c7b73SRobert Watson 	{ BSM_ERRNO_ENOEXEC, ENOEXEC, ES("Exec format error") },
90c74c7b73SRobert Watson 	{ BSM_ERRNO_EBADF, EBADF, ES("Bad file descriptor") },
91c74c7b73SRobert Watson 	{ BSM_ERRNO_ECHILD, ECHILD, ES("No child processes") },
92c74c7b73SRobert Watson 	{ BSM_ERRNO_EAGAIN, EAGAIN, ES("Resource temporarily unavailable") },
93c74c7b73SRobert Watson 	{ BSM_ERRNO_ENOMEM, ENOMEM, ES("Cannot allocate memory") },
94c74c7b73SRobert Watson 	{ BSM_ERRNO_EACCES, EACCES, ES("Permission denied") },
95c74c7b73SRobert Watson 	{ BSM_ERRNO_EFAULT, EFAULT, ES("Bad address") },
96c74c7b73SRobert Watson 	{ BSM_ERRNO_ENOTBLK, ENOTBLK, ES("Block device required") },
97c74c7b73SRobert Watson 	{ BSM_ERRNO_EBUSY, EBUSY, ES("Device busy") },
98c74c7b73SRobert Watson 	{ BSM_ERRNO_EEXIST, EEXIST, ES("File exists") },
99c74c7b73SRobert Watson 	{ BSM_ERRNO_EXDEV, EXDEV, ES("Cross-device link") },
100c74c7b73SRobert Watson 	{ BSM_ERRNO_ENODEV, ENODEV, ES("Operation not supported by device") },
101c74c7b73SRobert Watson 	{ BSM_ERRNO_ENOTDIR, ENOTDIR, ES("Not a directory") },
102c74c7b73SRobert Watson 	{ BSM_ERRNO_EISDIR, EISDIR, ES("Is a directory") },
103c74c7b73SRobert Watson 	{ BSM_ERRNO_EINVAL, EINVAL, ES("Invalid argument") },
104c74c7b73SRobert Watson 	{ BSM_ERRNO_ENFILE, ENFILE, ES("Too many open files in system") },
105c74c7b73SRobert Watson 	{ BSM_ERRNO_EMFILE, EMFILE, ES("Too many open files") },
106c74c7b73SRobert Watson 	{ BSM_ERRNO_ENOTTY, ENOTTY, ES("Inappropriate ioctl for device") },
107c74c7b73SRobert Watson 	{ BSM_ERRNO_ETXTBSY, ETXTBSY, ES("Text file busy") },
108c74c7b73SRobert Watson 	{ BSM_ERRNO_EFBIG, EFBIG, ES("File too large") },
109c74c7b73SRobert Watson 	{ BSM_ERRNO_ENOSPC, ENOSPC, ES("No space left on device") },
110c74c7b73SRobert Watson 	{ BSM_ERRNO_ESPIPE, ESPIPE, ES("Illegal seek") },
111c74c7b73SRobert Watson 	{ BSM_ERRNO_EROFS, EROFS, ES("Read-only file system") },
112c74c7b73SRobert Watson 	{ BSM_ERRNO_EMLINK, EMLINK, ES("Too many links") },
113c74c7b73SRobert Watson 	{ BSM_ERRNO_EPIPE, EPIPE, ES("Broken pipe") },
114c74c7b73SRobert Watson 	{ BSM_ERRNO_EDOM, EDOM, ES("Numerical argument out of domain") },
115c74c7b73SRobert Watson 	{ BSM_ERRNO_ERANGE, ERANGE, ES("Result too large") },
116c74c7b73SRobert Watson 	{ BSM_ERRNO_ENOMSG, ENOMSG, ES("No message of desired type") },
117c74c7b73SRobert Watson 	{ BSM_ERRNO_EIDRM, EIDRM, ES("Identifier removed") },
118c74c7b73SRobert Watson 	{ BSM_ERRNO_ECHRNG,
1197a0a89d2SRobert Watson #ifdef ECHRNG
1207a0a89d2SRobert Watson 	ECHRNG,
1217a0a89d2SRobert Watson #else
1227a0a89d2SRobert Watson 	ERRNO_NO_LOCAL_MAPPING,
1237a0a89d2SRobert Watson #endif
124c74c7b73SRobert Watson 	ES("Channel number out of range") },
125c74c7b73SRobert Watson 	{ BSM_ERRNO_EL2NSYNC,
1267a0a89d2SRobert Watson #ifdef EL2NSYNC
1277a0a89d2SRobert Watson 	EL2NSYNC,
1287a0a89d2SRobert Watson #else
1297a0a89d2SRobert Watson 	ERRNO_NO_LOCAL_MAPPING,
1307a0a89d2SRobert Watson #endif
131c74c7b73SRobert Watson 	ES("Level 2 not synchronized") },
132c74c7b73SRobert Watson 	{ BSM_ERRNO_EL3HLT,
1337a0a89d2SRobert Watson #ifdef EL3HLT
1347a0a89d2SRobert Watson 	EL3HLT,
1357a0a89d2SRobert Watson #else
1367a0a89d2SRobert Watson 	ERRNO_NO_LOCAL_MAPPING,
1377a0a89d2SRobert Watson #endif
138c74c7b73SRobert Watson 	ES("Level 3 halted") },
139c74c7b73SRobert Watson 	{ BSM_ERRNO_EL3RST,
1407a0a89d2SRobert Watson #ifdef EL3RST
1417a0a89d2SRobert Watson 	EL3RST,
1427a0a89d2SRobert Watson #else
1437a0a89d2SRobert Watson 	ERRNO_NO_LOCAL_MAPPING,
1447a0a89d2SRobert Watson #endif
145c74c7b73SRobert Watson 	ES("Level 3 reset") },
146c74c7b73SRobert Watson 	{ BSM_ERRNO_ELNRNG,
1477a0a89d2SRobert Watson #ifdef ELNRNG
1487a0a89d2SRobert Watson 	ELNRNG,
1497a0a89d2SRobert Watson #else
1507a0a89d2SRobert Watson 	ERRNO_NO_LOCAL_MAPPING,
1517a0a89d2SRobert Watson #endif
152c74c7b73SRobert Watson 	ES("Link number out of range") },
153c74c7b73SRobert Watson 	{ BSM_ERRNO_EUNATCH,
1547a0a89d2SRobert Watson #ifdef EUNATCH
1557a0a89d2SRobert Watson 	EUNATCH,
1567a0a89d2SRobert Watson #else
1577a0a89d2SRobert Watson 	ERRNO_NO_LOCAL_MAPPING,
1587a0a89d2SRobert Watson #endif
159c74c7b73SRobert Watson 	ES("Protocol driver not attached") },
160c74c7b73SRobert Watson 	{ BSM_ERRNO_ENOCSI,
1617a0a89d2SRobert Watson #ifdef ENOCSI
1627a0a89d2SRobert Watson 	ENOCSI,
1637a0a89d2SRobert Watson #else
1647a0a89d2SRobert Watson 	ERRNO_NO_LOCAL_MAPPING,
1657a0a89d2SRobert Watson #endif
166c74c7b73SRobert Watson 	ES("No CSI structure available") },
167c74c7b73SRobert Watson 	{ BSM_ERRNO_EL2HLT,
1687a0a89d2SRobert Watson #ifdef EL2HLT
1697a0a89d2SRobert Watson 	EL2HLT,
1707a0a89d2SRobert Watson #else
1717a0a89d2SRobert Watson 	ERRNO_NO_LOCAL_MAPPING,
1727a0a89d2SRobert Watson #endif
173c74c7b73SRobert Watson 	ES("Level 2 halted") },
174c74c7b73SRobert Watson 	{ BSM_ERRNO_EDEADLK, EDEADLK, ES("Resource deadlock avoided") },
175c74c7b73SRobert Watson 	{ BSM_ERRNO_ENOLCK, ENOLCK, ES("No locks available") },
176c74c7b73SRobert Watson 	{ BSM_ERRNO_ECANCELED, ECANCELED, ES("Operation canceled") },
177c74c7b73SRobert Watson 	{ BSM_ERRNO_ENOTSUP, ENOTSUP, ES("Operation not supported") },
178c74c7b73SRobert Watson 	{ BSM_ERRNO_EDQUOT, EDQUOT, ES("Disc quota exceeded") },
179c74c7b73SRobert Watson 	{ BSM_ERRNO_EBADE,
1807a0a89d2SRobert Watson #ifdef EBADE
1817a0a89d2SRobert Watson 	EBADE,
1827a0a89d2SRobert Watson #else
1837a0a89d2SRobert Watson 	ERRNO_NO_LOCAL_MAPPING,
1847a0a89d2SRobert Watson #endif
185c74c7b73SRobert Watson 	ES("Invalid exchange") },
186c74c7b73SRobert Watson 	{ BSM_ERRNO_EBADR,
1877a0a89d2SRobert Watson #ifdef EBADR
1887a0a89d2SRobert Watson 	EBADR,
1897a0a89d2SRobert Watson #else
1907a0a89d2SRobert Watson 	ERRNO_NO_LOCAL_MAPPING,
1917a0a89d2SRobert Watson #endif
192c74c7b73SRobert Watson 	ES("Invalid request descriptor") },
193c74c7b73SRobert Watson 	{ BSM_ERRNO_EXFULL,
1947a0a89d2SRobert Watson #ifdef EXFULL
1957a0a89d2SRobert Watson 	EXFULL,
1967a0a89d2SRobert Watson #else
1977a0a89d2SRobert Watson 	ERRNO_NO_LOCAL_MAPPING,
1987a0a89d2SRobert Watson #endif
199c74c7b73SRobert Watson 	ES("Exchange full") },
200c74c7b73SRobert Watson 	{ BSM_ERRNO_ENOANO,
2017a0a89d2SRobert Watson #ifdef ENOANO
2027a0a89d2SRobert Watson 	ENOANO,
2037a0a89d2SRobert Watson #else
2047a0a89d2SRobert Watson 	ERRNO_NO_LOCAL_MAPPING,
2057a0a89d2SRobert Watson #endif
206c74c7b73SRobert Watson 	ES("No anode") },
207c74c7b73SRobert Watson 	{ BSM_ERRNO_EBADRQC,
2087a0a89d2SRobert Watson #ifdef EBADRQC
2097a0a89d2SRobert Watson 	EBADRQC,
2107a0a89d2SRobert Watson #else
2117a0a89d2SRobert Watson 	ERRNO_NO_LOCAL_MAPPING,
2127a0a89d2SRobert Watson #endif
213c74c7b73SRobert Watson 	ES("Invalid request descriptor") },
214c74c7b73SRobert Watson 	{ BSM_ERRNO_EBADSLT,
2157a0a89d2SRobert Watson #ifdef EBADSLT
2167a0a89d2SRobert Watson 	EBADSLT,
2177a0a89d2SRobert Watson #else
2187a0a89d2SRobert Watson 	ERRNO_NO_LOCAL_MAPPING,
2197a0a89d2SRobert Watson #endif
220c74c7b73SRobert Watson 	ES("Invalid slot") },
221c74c7b73SRobert Watson 	{ BSM_ERRNO_EDEADLOCK,
2227a0a89d2SRobert Watson #ifdef EDEADLOCK
2237a0a89d2SRobert Watson 	EDEADLOCK,
2247a0a89d2SRobert Watson #else
2257a0a89d2SRobert Watson 	ERRNO_NO_LOCAL_MAPPING,
2267a0a89d2SRobert Watson #endif
227c74c7b73SRobert Watson 	ES("Resource deadlock avoided") },
228c74c7b73SRobert Watson 	{ BSM_ERRNO_EBFONT,
2297a0a89d2SRobert Watson #ifdef EBFONT
2307a0a89d2SRobert Watson 	EBFONT,
2317a0a89d2SRobert Watson #else
2327a0a89d2SRobert Watson 	ERRNO_NO_LOCAL_MAPPING,
2337a0a89d2SRobert Watson #endif
234c74c7b73SRobert Watson 	ES("Bad font file format") },
235c74c7b73SRobert Watson 	{ BSM_ERRNO_EOWNERDEAD,
2367a0a89d2SRobert Watson #ifdef EOWNERDEAD
2377a0a89d2SRobert Watson 	EOWNERDEAD,
2387a0a89d2SRobert Watson #else
2397a0a89d2SRobert Watson 	ERRNO_NO_LOCAL_MAPPING,
2407a0a89d2SRobert Watson #endif
241c74c7b73SRobert Watson 	ES("Process died with the lock") },
24288640c0eSKirk McKusick 	{ BSM_ERRNO_EINTEGRITY,
24388640c0eSKirk McKusick #ifdef EINTEGRITY
24488640c0eSKirk McKusick 	EINTEGRITY,
24588640c0eSKirk McKusick #else
24688640c0eSKirk McKusick 	ERRNO_NO_LOCAL_MAPPING,
24788640c0eSKirk McKusick #endif
24888640c0eSKirk McKusick 	ES("Integrity check failed") },
249c74c7b73SRobert Watson 	{ BSM_ERRNO_ENOTRECOVERABLE,
2507a0a89d2SRobert Watson #ifdef ENOTRECOVERABLE
2517a0a89d2SRobert Watson 	ENOTRECOVERABLE,
2527a0a89d2SRobert Watson #else
2537a0a89d2SRobert Watson 	ERRNO_NO_LOCAL_MAPPING,
2547a0a89d2SRobert Watson #endif
255c74c7b73SRobert Watson 	ES("Lock is not recoverable") },
256c74c7b73SRobert Watson 	{ BSM_ERRNO_ENOSTR,
2577a0a89d2SRobert Watson #ifdef ENOSTR
2587a0a89d2SRobert Watson 	ENOSTR,
2597a0a89d2SRobert Watson #else
2607a0a89d2SRobert Watson 	ERRNO_NO_LOCAL_MAPPING,
2617a0a89d2SRobert Watson #endif
262c74c7b73SRobert Watson 	ES("Device not a stream") },
263c74c7b73SRobert Watson 	{ BSM_ERRNO_ENONET,
2647a0a89d2SRobert Watson #ifdef ENONET
2657a0a89d2SRobert Watson 	ENONET,
2667a0a89d2SRobert Watson #else
2677a0a89d2SRobert Watson 	ERRNO_NO_LOCAL_MAPPING,
2687a0a89d2SRobert Watson #endif
269c74c7b73SRobert Watson 	ES("Machine is not on the network") },
270c74c7b73SRobert Watson 	{ BSM_ERRNO_ENOPKG,
2717a0a89d2SRobert Watson #ifdef ENOPKG
2727a0a89d2SRobert Watson 	ENOPKG,
2737a0a89d2SRobert Watson #else
2747a0a89d2SRobert Watson 	ERRNO_NO_LOCAL_MAPPING,
2757a0a89d2SRobert Watson #endif
276c74c7b73SRobert Watson 	ES("Package not installed") },
277c74c7b73SRobert Watson 	{ BSM_ERRNO_EREMOTE, EREMOTE,
278c74c7b73SRobert Watson 	    ES("Too many levels of remote in path") },
279c74c7b73SRobert Watson 	{ BSM_ERRNO_ENOLINK,
2807a0a89d2SRobert Watson #ifdef ENOLINK
2817a0a89d2SRobert Watson 	ENOLINK,
2827a0a89d2SRobert Watson #else
2837a0a89d2SRobert Watson 	ERRNO_NO_LOCAL_MAPPING,
2847a0a89d2SRobert Watson #endif
285c74c7b73SRobert Watson 	ES("Link has been severed") },
286c74c7b73SRobert Watson 	{ BSM_ERRNO_EADV,
2877a0a89d2SRobert Watson #ifdef EADV
2887a0a89d2SRobert Watson 	EADV,
2897a0a89d2SRobert Watson #else
2907a0a89d2SRobert Watson 	ERRNO_NO_LOCAL_MAPPING,
2917a0a89d2SRobert Watson #endif
292c74c7b73SRobert Watson 	ES("Advertise error") },
293c74c7b73SRobert Watson 	{ BSM_ERRNO_ESRMNT,
2947a0a89d2SRobert Watson #ifdef ESRMNT
2957a0a89d2SRobert Watson 	ESRMNT,
2967a0a89d2SRobert Watson #else
2977a0a89d2SRobert Watson 	ERRNO_NO_LOCAL_MAPPING,
2987a0a89d2SRobert Watson #endif
299c74c7b73SRobert Watson 	ES("srmount error") },
300c74c7b73SRobert Watson 	{ BSM_ERRNO_ECOMM,
3017a0a89d2SRobert Watson #ifdef ECOMM
3027a0a89d2SRobert Watson 	ECOMM,
3037a0a89d2SRobert Watson #else
3047a0a89d2SRobert Watson 	ERRNO_NO_LOCAL_MAPPING,
3057a0a89d2SRobert Watson #endif
306c74c7b73SRobert Watson 	ES("Communication error on send") },
307c74c7b73SRobert Watson 	{ BSM_ERRNO_EPROTO,
3087a0a89d2SRobert Watson #ifdef EPROTO
3097a0a89d2SRobert Watson 	EPROTO,
3107a0a89d2SRobert Watson #else
3117a0a89d2SRobert Watson 	ERRNO_NO_LOCAL_MAPPING,
3127a0a89d2SRobert Watson #endif
313c74c7b73SRobert Watson 	ES("Protocol error") },
314c74c7b73SRobert Watson 	{ BSM_ERRNO_ELOCKUNMAPPED,
3157a0a89d2SRobert Watson #ifdef ELOCKUNMAPPED
3167a0a89d2SRobert Watson 	ELOCKUNMAPPED,
3177a0a89d2SRobert Watson #else
3187a0a89d2SRobert Watson 	ERRNO_NO_LOCAL_MAPPING,
3197a0a89d2SRobert Watson #endif
320c74c7b73SRobert Watson 	ES("Locked lock was unmapped") },
321c74c7b73SRobert Watson 	{ BSM_ERRNO_ENOTACTIVE,
3227a0a89d2SRobert Watson #ifdef ENOTACTIVE
3237a0a89d2SRobert Watson 	ENOTACTIVE,
3247a0a89d2SRobert Watson #else
3257a0a89d2SRobert Watson 	ERRNO_NO_LOCAL_MAPPING,
3267a0a89d2SRobert Watson #endif
327c74c7b73SRobert Watson 	ES("Facility is not active") },
328c74c7b73SRobert Watson 	{ BSM_ERRNO_EMULTIHOP,
3297a0a89d2SRobert Watson #ifdef EMULTIHOP
3307a0a89d2SRobert Watson 	EMULTIHOP,
3317a0a89d2SRobert Watson #else
3327a0a89d2SRobert Watson 	ERRNO_NO_LOCAL_MAPPING,
3337a0a89d2SRobert Watson #endif
334c74c7b73SRobert Watson 	ES("Multihop attempted") },
335c74c7b73SRobert Watson 	{ BSM_ERRNO_EBADMSG,
3367a0a89d2SRobert Watson #ifdef EBADMSG
3377a0a89d2SRobert Watson 	EBADMSG,
3387a0a89d2SRobert Watson #else
3397a0a89d2SRobert Watson 	ERRNO_NO_LOCAL_MAPPING,
3407a0a89d2SRobert Watson #endif
341c74c7b73SRobert Watson 	ES("Bad message") },
342c74c7b73SRobert Watson 	{ BSM_ERRNO_ENAMETOOLONG, ENAMETOOLONG, ES("File name too long") },
343c74c7b73SRobert Watson 	{ BSM_ERRNO_EOVERFLOW, EOVERFLOW,
344c74c7b73SRobert Watson 	    ES("Value too large to be stored in data type") },
345c74c7b73SRobert Watson 	{ BSM_ERRNO_ENOTUNIQ,
3467a0a89d2SRobert Watson #ifdef ENOTUNIQ
3477a0a89d2SRobert Watson 	ENOTUNIQ,
3487a0a89d2SRobert Watson #else
3497a0a89d2SRobert Watson 	ERRNO_NO_LOCAL_MAPPING,
3507a0a89d2SRobert Watson #endif
351c74c7b73SRobert Watson 	ES("Given log name not unique") },
352c74c7b73SRobert Watson 	{ BSM_ERRNO_EBADFD,
3537a0a89d2SRobert Watson #ifdef EBADFD
3547a0a89d2SRobert Watson 	EBADFD,
3557a0a89d2SRobert Watson #else
3567a0a89d2SRobert Watson 	ERRNO_NO_LOCAL_MAPPING,
3577a0a89d2SRobert Watson #endif
358c74c7b73SRobert Watson 	ES("Given f.d. invalid for this operation") },
359c74c7b73SRobert Watson 	{ BSM_ERRNO_EREMCHG,
3607a0a89d2SRobert Watson #ifdef EREMCHG
3617a0a89d2SRobert Watson 	EREMCHG,
3627a0a89d2SRobert Watson #else
3637a0a89d2SRobert Watson 	ERRNO_NO_LOCAL_MAPPING,
3647a0a89d2SRobert Watson #endif
365c74c7b73SRobert Watson 	ES("Remote address changed") },
366c74c7b73SRobert Watson 	{ BSM_ERRNO_ELIBACC,
3677a0a89d2SRobert Watson #ifdef ELIBACC
3687a0a89d2SRobert Watson 	ELIBACC,
3697a0a89d2SRobert Watson #else
3707a0a89d2SRobert Watson 	ERRNO_NO_LOCAL_MAPPING,
3717a0a89d2SRobert Watson #endif
372c74c7b73SRobert Watson 	ES("Can't access a needed shared lib") },
373c74c7b73SRobert Watson 	{ BSM_ERRNO_ELIBBAD,
3747a0a89d2SRobert Watson #ifdef ELIBBAD
3757a0a89d2SRobert Watson 	ELIBBAD,
3767a0a89d2SRobert Watson #else
3777a0a89d2SRobert Watson 	ERRNO_NO_LOCAL_MAPPING,
3787a0a89d2SRobert Watson #endif
379c74c7b73SRobert Watson 	ES("Accessing a corrupted shared lib") },
380c74c7b73SRobert Watson 	{ BSM_ERRNO_ELIBSCN,
3817a0a89d2SRobert Watson #ifdef ELIBSCN
3827a0a89d2SRobert Watson 	ELIBSCN,
3837a0a89d2SRobert Watson #else
3847a0a89d2SRobert Watson 	ERRNO_NO_LOCAL_MAPPING,
3857a0a89d2SRobert Watson #endif
386c74c7b73SRobert Watson 	ES(".lib section in a.out corrupted") },
387c74c7b73SRobert Watson 	{ BSM_ERRNO_ELIBMAX,
3887a0a89d2SRobert Watson #ifdef ELIBMAX
3897a0a89d2SRobert Watson 	ELIBMAX,
3907a0a89d2SRobert Watson #else
3917a0a89d2SRobert Watson 	ERRNO_NO_LOCAL_MAPPING,
3927a0a89d2SRobert Watson #endif
393c74c7b73SRobert Watson 	ES("Attempting to link in too many libs") },
394c74c7b73SRobert Watson 	{ BSM_ERRNO_ELIBEXEC,
3957a0a89d2SRobert Watson #ifdef ELIBEXEC
3967a0a89d2SRobert Watson 	ELIBEXEC,
3977a0a89d2SRobert Watson #else
3987a0a89d2SRobert Watson 	ERRNO_NO_LOCAL_MAPPING,
3997a0a89d2SRobert Watson #endif
400c74c7b73SRobert Watson 	ES("Attempting to exec a shared library") },
401c74c7b73SRobert Watson 	{ BSM_ERRNO_EILSEQ, EILSEQ, ES("Illegal byte sequence") },
402c74c7b73SRobert Watson 	{ BSM_ERRNO_ENOSYS, ENOSYS, ES("Function not implemented") },
403c74c7b73SRobert Watson 	{ BSM_ERRNO_ELOOP, ELOOP, ES("Too many levels of symbolic links") },
404c74c7b73SRobert Watson 	{ BSM_ERRNO_ERESTART,
4057a0a89d2SRobert Watson #ifdef ERESTART
4067a0a89d2SRobert Watson 	ERESTART,
4077a0a89d2SRobert Watson #else
4087a0a89d2SRobert Watson 	ERRNO_NO_LOCAL_MAPPING,
4097a0a89d2SRobert Watson #endif
410c74c7b73SRobert Watson 	ES("Restart syscall") },
411c74c7b73SRobert Watson 	{ BSM_ERRNO_ESTRPIPE,
4127a0a89d2SRobert Watson #ifdef ESTRPIPE
4137a0a89d2SRobert Watson 	ESTRPIPE,
4147a0a89d2SRobert Watson #else
4157a0a89d2SRobert Watson 	ERRNO_NO_LOCAL_MAPPING,
4167a0a89d2SRobert Watson #endif
417c74c7b73SRobert Watson 	ES("If pipe/FIFO, don't sleep in stream head") },
418c74c7b73SRobert Watson 	{ BSM_ERRNO_ENOTEMPTY, ENOTEMPTY, ES("Directory not empty") },
419c74c7b73SRobert Watson 	{ BSM_ERRNO_EUSERS, EUSERS, ES("Too many users") },
420c74c7b73SRobert Watson 	{ BSM_ERRNO_ENOTSOCK, ENOTSOCK,
421c74c7b73SRobert Watson 	    ES("Socket operation on non-socket") },
422c74c7b73SRobert Watson 	{ BSM_ERRNO_EDESTADDRREQ, EDESTADDRREQ,
423c74c7b73SRobert Watson 	    ES("Destination address required") },
424c74c7b73SRobert Watson 	{ BSM_ERRNO_EMSGSIZE, EMSGSIZE, ES("Message too long") },
425c74c7b73SRobert Watson 	{ BSM_ERRNO_EPROTOTYPE, EPROTOTYPE,
426c74c7b73SRobert Watson 	    ES("Protocol wrong type for socket") },
427c74c7b73SRobert Watson 	{ BSM_ERRNO_ENOPROTOOPT, ENOPROTOOPT, ES("Protocol not available") },
428c74c7b73SRobert Watson 	{ BSM_ERRNO_EPROTONOSUPPORT, EPROTONOSUPPORT,
429c74c7b73SRobert Watson 	    ES("Protocol not supported") },
430c74c7b73SRobert Watson 	{ BSM_ERRNO_ESOCKTNOSUPPORT, ESOCKTNOSUPPORT,
431c74c7b73SRobert Watson 	    ES("Socket type not supported") },
432c74c7b73SRobert Watson 	{ BSM_ERRNO_EOPNOTSUPP, EOPNOTSUPP, ES("Operation not supported") },
433c74c7b73SRobert Watson 	{ BSM_ERRNO_EPFNOSUPPORT, EPFNOSUPPORT,
434c74c7b73SRobert Watson 	    ES("Protocol family not supported") },
435c74c7b73SRobert Watson 	{ BSM_ERRNO_EAFNOSUPPORT, EAFNOSUPPORT,
436c74c7b73SRobert Watson 	    ES("Address family not supported by protocol family") },
437c74c7b73SRobert Watson 	{ BSM_ERRNO_EADDRINUSE, EADDRINUSE, ES("Address already in use") },
438c74c7b73SRobert Watson 	{ BSM_ERRNO_EADDRNOTAVAIL, EADDRNOTAVAIL,
439c74c7b73SRobert Watson 	    ES("Can't assign requested address") },
440c74c7b73SRobert Watson 	{ BSM_ERRNO_ENETDOWN, ENETDOWN, ES("Network is down") },
441c74c7b73SRobert Watson 	{ BSM_ERRNO_ENETRESET, ENETRESET,
442c74c7b73SRobert Watson 	    ES("Network dropped connection on reset") },
443c74c7b73SRobert Watson 	{ BSM_ERRNO_ECONNABORTED, ECONNABORTED,
444c74c7b73SRobert Watson 	    ES("Software caused connection abort") },
445c74c7b73SRobert Watson 	{ BSM_ERRNO_ECONNRESET, ECONNRESET, ES("Connection reset by peer") },
446c74c7b73SRobert Watson 	{ BSM_ERRNO_ENOBUFS, ENOBUFS, ES("No buffer space available") },
447c74c7b73SRobert Watson 	{ BSM_ERRNO_EISCONN, EISCONN, ES("Socket is already connected") },
448c74c7b73SRobert Watson 	{ BSM_ERRNO_ENOTCONN, ENOTCONN, ES("Socket is not connected") },
449c74c7b73SRobert Watson 	{ BSM_ERRNO_ESHUTDOWN, ESHUTDOWN,
450c74c7b73SRobert Watson 	    ES("Can't send after socket shutdown") },
451c74c7b73SRobert Watson 	{ BSM_ERRNO_ETOOMANYREFS, ETOOMANYREFS,
452c74c7b73SRobert Watson 	    ES("Too many references: can't splice") },
453c74c7b73SRobert Watson 	{ BSM_ERRNO_ETIMEDOUT, ETIMEDOUT, ES("Operation timed out") },
454c74c7b73SRobert Watson 	{ BSM_ERRNO_ECONNREFUSED, ECONNREFUSED, ES("Connection refused") },
455c74c7b73SRobert Watson 	{ BSM_ERRNO_EHOSTDOWN, EHOSTDOWN, ES("Host is down") },
456c74c7b73SRobert Watson 	{ BSM_ERRNO_EHOSTUNREACH, EHOSTUNREACH, ES("No route to host") },
457c74c7b73SRobert Watson 	{ BSM_ERRNO_EALREADY, EALREADY, ES("Operation already in progress") },
458c74c7b73SRobert Watson 	{ BSM_ERRNO_EINPROGRESS, EINPROGRESS,
459c74c7b73SRobert Watson 	    ES("Operation now in progress") },
460c74c7b73SRobert Watson 	{ BSM_ERRNO_ESTALE, ESTALE, ES("Stale NFS file handle") },
461597df30eSRobert Watson 	{ BSM_ERRNO_EPROCLIM,
462597df30eSRobert Watson #ifdef EPROCLIM
463597df30eSRobert Watson 	EPROCLIM,
464597df30eSRobert Watson #else
465597df30eSRobert Watson 	ERRNO_NO_LOCAL_MAPPING,
466597df30eSRobert Watson #endif
467597df30eSRobert Watson 	ES("Too many processes") },
468597df30eSRobert Watson 	{ BSM_ERRNO_EBADRPC,
469597df30eSRobert Watson #ifdef EBADRPC
470597df30eSRobert Watson 	EBADRPC,
471597df30eSRobert Watson #else
472597df30eSRobert Watson 	ERRNO_NO_LOCAL_MAPPING,
473597df30eSRobert Watson #endif
474597df30eSRobert Watson 	ES("RPC struct is bad") },
475597df30eSRobert Watson 	{ BSM_ERRNO_ERPCMISMATCH,
476597df30eSRobert Watson #ifdef ERPCMISMATCH
477597df30eSRobert Watson 	ERPCMISMATCH,
478597df30eSRobert Watson #else
479597df30eSRobert Watson 	ERRNO_NO_LOCAL_MAPPING,
480597df30eSRobert Watson #endif
481597df30eSRobert Watson 	ES("RPC version wrong") },
482597df30eSRobert Watson 	{ BSM_ERRNO_EPROGUNAVAIL,
483597df30eSRobert Watson #ifdef EPROGUNAVAIL
484597df30eSRobert Watson 	EPROGUNAVAIL,
485597df30eSRobert Watson #else
486597df30eSRobert Watson 	ERRNO_NO_LOCAL_MAPPING,
487597df30eSRobert Watson #endif
488597df30eSRobert Watson 	ES("RPC prog. not avail") },
489597df30eSRobert Watson 	{ BSM_ERRNO_EPROGMISMATCH,
490597df30eSRobert Watson #ifdef EPROGMISMATCH
491597df30eSRobert Watson 	EPROGMISMATCH,
492597df30eSRobert Watson #else
493597df30eSRobert Watson 	ERRNO_NO_LOCAL_MAPPING,
494597df30eSRobert Watson #endif
495597df30eSRobert Watson 	ES("RPC version wrong") },
496597df30eSRobert Watson 	{ BSM_ERRNO_EPROCUNAVAIL,
497597df30eSRobert Watson #ifdef EPROCUNAVAIL
498597df30eSRobert Watson 	EPROCUNAVAIL,
499597df30eSRobert Watson #else
500597df30eSRobert Watson 	ERRNO_NO_LOCAL_MAPPING,
501597df30eSRobert Watson #endif
502597df30eSRobert Watson 	ES("Bad procedure for program") },
503597df30eSRobert Watson 	{ BSM_ERRNO_EFTYPE,
504597df30eSRobert Watson #ifdef EFTYPE
505597df30eSRobert Watson 	EFTYPE,
506597df30eSRobert Watson #else
507597df30eSRobert Watson 	ERRNO_NO_LOCAL_MAPPING,
508597df30eSRobert Watson #endif
509597df30eSRobert Watson 	ES("Inappropriate file type or format") },
510597df30eSRobert Watson 	{ BSM_ERRNO_EAUTH,
511597df30eSRobert Watson #ifdef EAUTH
512597df30eSRobert Watson 	EAUTH,
513597df30eSRobert Watson #else
514597df30eSRobert Watson 	ERRNO_NO_LOCAL_MAPPING,
515597df30eSRobert Watson #endif
516597df30eSRobert Watson 	ES("Authenticateion error") },
517597df30eSRobert Watson 	{ BSM_ERRNO_ENEEDAUTH,
518597df30eSRobert Watson #ifdef ENEEDAUTH
519597df30eSRobert Watson 	ENEEDAUTH,
520597df30eSRobert Watson #else
521597df30eSRobert Watson 	ERRNO_NO_LOCAL_MAPPING,
522597df30eSRobert Watson #endif
523597df30eSRobert Watson 	ES("Need authenticator") },
524597df30eSRobert Watson 	{ BSM_ERRNO_ENOATTR,
525597df30eSRobert Watson #ifdef ENOATTR
526597df30eSRobert Watson 	ENOATTR,
527597df30eSRobert Watson #else
528597df30eSRobert Watson 	ERRNO_NO_LOCAL_MAPPING,
529597df30eSRobert Watson #endif
530597df30eSRobert Watson 	ES("Attribute not found") },
531597df30eSRobert Watson 	{ BSM_ERRNO_EDOOFUS,
532597df30eSRobert Watson #ifdef EDOOFUS
533597df30eSRobert Watson 	EDOOFUS,
534597df30eSRobert Watson #else
535597df30eSRobert Watson 	ERRNO_NO_LOCAL_MAPPING,
536597df30eSRobert Watson #endif
537597df30eSRobert Watson 	ES("Programming error") },
538597df30eSRobert Watson 	{ BSM_ERRNO_EJUSTRETURN,
539597df30eSRobert Watson #ifdef EJUSTRETURN
540597df30eSRobert Watson 	EJUSTRETURN,
541597df30eSRobert Watson #else
542597df30eSRobert Watson 	ERRNO_NO_LOCAL_MAPPING,
543597df30eSRobert Watson #endif
544597df30eSRobert Watson 	ES("Just return") },
545597df30eSRobert Watson 	{ BSM_ERRNO_ENOIOCTL,
546597df30eSRobert Watson #ifdef ENOIOCTL
547597df30eSRobert Watson 	ENOIOCTL,
548597df30eSRobert Watson #else
549597df30eSRobert Watson 	ERRNO_NO_LOCAL_MAPPING,
550597df30eSRobert Watson #endif
551597df30eSRobert Watson 	ES("ioctl not handled by this layer") },
552597df30eSRobert Watson 	{ BSM_ERRNO_EDIRIOCTL,
553597df30eSRobert Watson #ifdef EDIRIOCTL
554597df30eSRobert Watson 	EDIRIOCTL,
555597df30eSRobert Watson #else
556597df30eSRobert Watson 	ERRNO_NO_LOCAL_MAPPING,
557597df30eSRobert Watson #endif
558597df30eSRobert Watson 	ES("do direct ioctl in GEOM") },
559c74c7b73SRobert Watson 	{ BSM_ERRNO_EPWROFF,
5607a0a89d2SRobert Watson #ifdef EPWROFF
5617a0a89d2SRobert Watson 	EPWROFF,
5627a0a89d2SRobert Watson #else
5637a0a89d2SRobert Watson 	ERRNO_NO_LOCAL_MAPPING,
5647a0a89d2SRobert Watson #endif
565c74c7b73SRobert Watson 	ES("Device power is off") },
566c74c7b73SRobert Watson 	{ BSM_ERRNO_EDEVERR,
5677a0a89d2SRobert Watson #ifdef EDEVERR
5687a0a89d2SRobert Watson 	EDEVERR,
5697a0a89d2SRobert Watson #else
5707a0a89d2SRobert Watson 	ERRNO_NO_LOCAL_MAPPING,
5717a0a89d2SRobert Watson #endif
572c74c7b73SRobert Watson 	ES("Device error") },
573c74c7b73SRobert Watson 	{ BSM_ERRNO_EBADEXEC,
5747a0a89d2SRobert Watson #ifdef EBADEXEC
5757a0a89d2SRobert Watson 	EBADEXEC,
5767a0a89d2SRobert Watson #else
5777a0a89d2SRobert Watson 	ERRNO_NO_LOCAL_MAPPING,
5787a0a89d2SRobert Watson #endif
579c74c7b73SRobert Watson 	ES("Bad executable") },
580c74c7b73SRobert Watson 	{ BSM_ERRNO_EBADARCH,
5817a0a89d2SRobert Watson #ifdef EBADARCH
5827a0a89d2SRobert Watson 	EBADARCH,
5837a0a89d2SRobert Watson #else
5847a0a89d2SRobert Watson 	ERRNO_NO_LOCAL_MAPPING,
5857a0a89d2SRobert Watson #endif
586c74c7b73SRobert Watson 	ES("Bad CPU type in executable") },
587c74c7b73SRobert Watson 	{ BSM_ERRNO_ESHLIBVERS,
5887a0a89d2SRobert Watson #ifdef ESHLIBVERS
5897a0a89d2SRobert Watson 	ESHLIBVERS,
5907a0a89d2SRobert Watson #else
5917a0a89d2SRobert Watson 	ERRNO_NO_LOCAL_MAPPING,
5927a0a89d2SRobert Watson #endif
593c74c7b73SRobert Watson 	ES("Shared library version mismatch") },
594c74c7b73SRobert Watson 	{ BSM_ERRNO_EBADMACHO,
5957a0a89d2SRobert Watson #ifdef EBADMACHO
5967a0a89d2SRobert Watson 	EBADMACHO,
5977a0a89d2SRobert Watson #else
5987a0a89d2SRobert Watson 	ERRNO_NO_LOCAL_MAPPING,
5997a0a89d2SRobert Watson #endif
60006edd2f1SRobert Watson 	ES("Malformed Macho file") },
601c74c7b73SRobert Watson 	{ BSM_ERRNO_EPOLICY,
6027a0a89d2SRobert Watson #ifdef EPOLICY
6037a0a89d2SRobert Watson 	EPOLICY,
6047a0a89d2SRobert Watson #else
6057a0a89d2SRobert Watson 	ERRNO_NO_LOCAL_MAPPING,
6067a0a89d2SRobert Watson #endif
607c74c7b73SRobert Watson 	ES("Operation failed by policy") },
608c74c7b73SRobert Watson 	{ BSM_ERRNO_EDOTDOT,
6097a0a89d2SRobert Watson #ifdef EDOTDOT
6107a0a89d2SRobert Watson 	EDOTDOT,
6117a0a89d2SRobert Watson #else
6127a0a89d2SRobert Watson 	ERRNO_NO_LOCAL_MAPPING,
6137a0a89d2SRobert Watson #endif
614c74c7b73SRobert Watson 	ES("RFS specific error") },
615c74c7b73SRobert Watson 	{ BSM_ERRNO_EUCLEAN,
6167a0a89d2SRobert Watson #ifdef EUCLEAN
6177a0a89d2SRobert Watson 	EUCLEAN,
6187a0a89d2SRobert Watson #else
6197a0a89d2SRobert Watson 	ERRNO_NO_LOCAL_MAPPING,
6207a0a89d2SRobert Watson #endif
621c74c7b73SRobert Watson 	ES("Structure needs cleaning") },
622c74c7b73SRobert Watson 	{ BSM_ERRNO_ENOTNAM,
6237a0a89d2SRobert Watson #ifdef ENOTNAM
6247a0a89d2SRobert Watson 	ENOTNAM,
6257a0a89d2SRobert Watson #else
6267a0a89d2SRobert Watson 	ERRNO_NO_LOCAL_MAPPING,
6277a0a89d2SRobert Watson #endif
628c74c7b73SRobert Watson 	ES("Not a XENIX named type file") },
629c74c7b73SRobert Watson 	{ BSM_ERRNO_ENAVAIL,
6307a0a89d2SRobert Watson #ifdef ENAVAIL
6317a0a89d2SRobert Watson 	ENAVAIL,
6327a0a89d2SRobert Watson #else
6337a0a89d2SRobert Watson 	ERRNO_NO_LOCAL_MAPPING,
6347a0a89d2SRobert Watson #endif
635c74c7b73SRobert Watson 	ES("No XENIX semaphores available") },
636c74c7b73SRobert Watson 	{ BSM_ERRNO_EISNAM,
6377a0a89d2SRobert Watson #ifdef EISNAM
6387a0a89d2SRobert Watson 	EISNAM,
6397a0a89d2SRobert Watson #else
6407a0a89d2SRobert Watson 	ERRNO_NO_LOCAL_MAPPING,
6417a0a89d2SRobert Watson #endif
642c74c7b73SRobert Watson 	ES("Is a named type file") },
643c74c7b73SRobert Watson 	{ BSM_ERRNO_EREMOTEIO,
6447a0a89d2SRobert Watson #ifdef EREMOTEIO
6457a0a89d2SRobert Watson 	EREMOTEIO,
6467a0a89d2SRobert Watson #else
6477a0a89d2SRobert Watson 	ERRNO_NO_LOCAL_MAPPING,
6487a0a89d2SRobert Watson #endif
649c74c7b73SRobert Watson 	ES("Remote I/O error") },
650c74c7b73SRobert Watson 	{ BSM_ERRNO_ENOMEDIUM,
6517a0a89d2SRobert Watson #ifdef ENOMEDIUM
6527a0a89d2SRobert Watson 	ENOMEDIUM,
6537a0a89d2SRobert Watson #else
6547a0a89d2SRobert Watson 	ERRNO_NO_LOCAL_MAPPING,
6557a0a89d2SRobert Watson #endif
656c74c7b73SRobert Watson 	ES("No medium found") },
657c74c7b73SRobert Watson 	{ BSM_ERRNO_EMEDIUMTYPE,
6587a0a89d2SRobert Watson #ifdef EMEDIUMTYPE
6597a0a89d2SRobert Watson 	EMEDIUMTYPE,
6607a0a89d2SRobert Watson #else
6617a0a89d2SRobert Watson 	ERRNO_NO_LOCAL_MAPPING,
6627a0a89d2SRobert Watson #endif
663c74c7b73SRobert Watson 	ES("Wrong medium type") },
664c74c7b73SRobert Watson 	{ BSM_ERRNO_ENOKEY,
6657a0a89d2SRobert Watson #ifdef ENOKEY
6667a0a89d2SRobert Watson 	ENOKEY,
6677a0a89d2SRobert Watson #else
6687a0a89d2SRobert Watson 	ERRNO_NO_LOCAL_MAPPING,
6697a0a89d2SRobert Watson #endif
670c74c7b73SRobert Watson 	ES("Required key not available") },
671c74c7b73SRobert Watson 	{ BSM_ERRNO_EKEYEXPIRED,
672aa772005SRobert Watson #ifdef EKEYEXPIRED
6737a0a89d2SRobert Watson 	EKEYEXPIRED,
6747a0a89d2SRobert Watson #else
6757a0a89d2SRobert Watson 	ERRNO_NO_LOCAL_MAPPING,
6767a0a89d2SRobert Watson #endif
677c74c7b73SRobert Watson 	ES("Key has expired") },
678c74c7b73SRobert Watson 	{ BSM_ERRNO_EKEYREVOKED,
6797a0a89d2SRobert Watson #ifdef EKEYREVOKED
6807a0a89d2SRobert Watson 	EKEYREVOKED,
6817a0a89d2SRobert Watson #else
6827a0a89d2SRobert Watson 	ERRNO_NO_LOCAL_MAPPING,
6837a0a89d2SRobert Watson #endif
684c74c7b73SRobert Watson 	ES("Key has been revoked") },
685c74c7b73SRobert Watson 	{ BSM_ERRNO_EKEYREJECTED,
686aa772005SRobert Watson #ifdef EKEYREJECTED
6877a0a89d2SRobert Watson 	EKEYREJECTED,
6887a0a89d2SRobert Watson #else
6897a0a89d2SRobert Watson 	ERRNO_NO_LOCAL_MAPPING,
6907a0a89d2SRobert Watson #endif
691c74c7b73SRobert Watson 	ES("Key was rejected by service") },
692aa772005SRobert Watson 	{ BSM_ERRNO_ENOTCAPABLE,
693aa772005SRobert Watson #ifdef ENOTCAPABLE
694aa772005SRobert Watson 	ENOTCAPABLE,
695aa772005SRobert Watson #else
696aa772005SRobert Watson 	ERRNO_NO_LOCAL_MAPPING,
697aa772005SRobert Watson #endif
698aa772005SRobert Watson 	ES("Capabilities insufficient") },
699aa772005SRobert Watson 	{ BSM_ERRNO_ECAPMODE,
700aa772005SRobert Watson #ifdef ECAPMODE
701aa772005SRobert Watson 	ECAPMODE,
702aa772005SRobert Watson #else
703aa772005SRobert Watson 	ERRNO_NO_LOCAL_MAPPING,
704aa772005SRobert Watson #endif
705aa772005SRobert Watson 	ES("Not permitted in capability mode") },
7067a0a89d2SRobert Watson };
707c74c7b73SRobert Watson static const int bsm_errnos_count = sizeof(bsm_errnos) / sizeof(bsm_errnos[0]);
7087a0a89d2SRobert Watson 
709c74c7b73SRobert Watson static const struct bsm_errno *
bsm_lookup_errno_local(int local_errno)710c74c7b73SRobert Watson bsm_lookup_errno_local(int local_errno)
7117a0a89d2SRobert Watson {
7127a0a89d2SRobert Watson 	int i;
7137a0a89d2SRobert Watson 
714c74c7b73SRobert Watson 	for (i = 0; i < bsm_errnos_count; i++) {
715c74c7b73SRobert Watson 		if (bsm_errnos[i].be_local_errno == local_errno)
716c74c7b73SRobert Watson 			return (&bsm_errnos[i]);
7177a0a89d2SRobert Watson 	}
7187a0a89d2SRobert Watson 	return (NULL);
7197a0a89d2SRobert Watson }
7207a0a89d2SRobert Watson 
721c74c7b73SRobert Watson /*
722c74c7b73SRobert Watson  * Conversion to the BSM errno space isn't allowed to fail; we simply map to
723c74c7b73SRobert Watson  * BSM_ERRNO_UNKNOWN and let the remote endpoint deal with it.
724c74c7b73SRobert Watson  */
725c74c7b73SRobert Watson u_char
au_errno_to_bsm(int local_errno)726c74c7b73SRobert Watson au_errno_to_bsm(int local_errno)
727c74c7b73SRobert Watson {
728c74c7b73SRobert Watson 	const struct bsm_errno *bsme;
729c74c7b73SRobert Watson 
730c74c7b73SRobert Watson 	bsme = bsm_lookup_errno_local(local_errno);
731c74c7b73SRobert Watson 	if (bsme == NULL)
732c74c7b73SRobert Watson 		return (BSM_ERRNO_UNKNOWN);
733c74c7b73SRobert Watson 	return (bsme->be_bsm_errno);
734c74c7b73SRobert Watson }
735c74c7b73SRobert Watson 
736c74c7b73SRobert Watson static const struct bsm_errno *
bsm_lookup_errno_bsm(u_char bsm_errno)737c74c7b73SRobert Watson bsm_lookup_errno_bsm(u_char bsm_errno)
7387a0a89d2SRobert Watson {
7397a0a89d2SRobert Watson 	int i;
7407a0a89d2SRobert Watson 
741c74c7b73SRobert Watson 	for (i = 0; i < bsm_errnos_count; i++) {
742c74c7b73SRobert Watson 		if (bsm_errnos[i].be_bsm_errno == bsm_errno)
743c74c7b73SRobert Watson 			return (&bsm_errnos[i]);
7447a0a89d2SRobert Watson 	}
7457a0a89d2SRobert Watson 	return (NULL);
7467a0a89d2SRobert Watson }
7477a0a89d2SRobert Watson 
7487a0a89d2SRobert Watson /*
7497a0a89d2SRobert Watson  * Converstion from a BSM error to a local error number may fail if either
7507a0a89d2SRobert Watson  * OpenBSM doesn't recognize the error on the wire, or because there is no
751c74c7b73SRobert Watson  * appropriate local mapping.
7527a0a89d2SRobert Watson  */
7537a0a89d2SRobert Watson int
au_bsm_to_errno(u_char bsm_errno,int * errorp)754c74c7b73SRobert Watson au_bsm_to_errno(u_char bsm_errno, int *errorp)
7557a0a89d2SRobert Watson {
756c74c7b73SRobert Watson 	const struct bsm_errno *bsme;
7577a0a89d2SRobert Watson 
758c74c7b73SRobert Watson 	bsme = bsm_lookup_errno_bsm(bsm_errno);
759c74c7b73SRobert Watson 	if (bsme == NULL || bsme->be_local_errno == ERRNO_NO_LOCAL_MAPPING)
7607a0a89d2SRobert Watson 		return (-1);
761c74c7b73SRobert Watson 	*errorp = bsme->be_local_errno;
7627a0a89d2SRobert Watson 	return (0);
7637a0a89d2SRobert Watson }
7647a0a89d2SRobert Watson 
7657a0a89d2SRobert Watson #if !defined(KERNEL) && !defined(_KERNEL)
7667a0a89d2SRobert Watson const char *
au_strerror(u_char bsm_errno)767c74c7b73SRobert Watson au_strerror(u_char bsm_errno)
7687a0a89d2SRobert Watson {
769c74c7b73SRobert Watson 	const struct bsm_errno *bsme;
7707a0a89d2SRobert Watson 
771c74c7b73SRobert Watson 	bsme = bsm_lookup_errno_bsm(bsm_errno);
7727a0a89d2SRobert Watson 	if (bsme == NULL)
7737a0a89d2SRobert Watson 		return ("Unrecognized BSM error");
774c74c7b73SRobert Watson 	if (bsme->be_local_errno != ERRNO_NO_LOCAL_MAPPING)
775c74c7b73SRobert Watson 		return (strerror(bsme->be_local_errno));
7767a0a89d2SRobert Watson 	return (bsme->be_strerror);
7777a0a89d2SRobert Watson }
7787a0a89d2SRobert Watson #endif
779