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 * 29*aa772005SRobert Watson * $P4: //depot/projects/trustedbsd/openbsm/libbsm/bsm_errno.c#22 $ 307a0a89d2SRobert Watson */ 317a0a89d2SRobert Watson 327a0a89d2SRobert Watson #include <sys/types.h> 337a0a89d2SRobert Watson 347a0a89d2SRobert Watson #include <config/config.h> 357a0a89d2SRobert Watson 367a0a89d2SRobert Watson #include <bsm/audit_errno.h> 377a0a89d2SRobert Watson #include <bsm/libbsm.h> 387a0a89d2SRobert Watson 397a0a89d2SRobert Watson #include <errno.h> 407a0a89d2SRobert Watson #include <string.h> 417a0a89d2SRobert Watson 427a0a89d2SRobert Watson /* 437a0a89d2SRobert Watson * Different operating systems use different numeric constants for different 447a0a89d2SRobert Watson * error numbers, and sometimes error numbers don't exist in more than one 457a0a89d2SRobert Watson * operating system. These routines convert between BSM and local error 467a0a89d2SRobert Watson * number spaces, subject to the above realities. BSM error numbers are 477a0a89d2SRobert Watson * stored in a single 8-bit character, so don't have a byte order. 48c74c7b73SRobert Watson * 49c74c7b73SRobert Watson * Don't include string definitions when this code is compiled into a kernel. 507a0a89d2SRobert Watson */ 51c74c7b73SRobert Watson struct bsm_errno { 52c74c7b73SRobert Watson int be_bsm_errno; 53c74c7b73SRobert Watson int be_local_errno; 54c74c7b73SRobert Watson #if !defined(KERNEL) && !defined(_KERNEL) 557a0a89d2SRobert Watson const char *be_strerror; 56c74c7b73SRobert Watson #endif 577a0a89d2SRobert Watson }; 587a0a89d2SRobert Watson 597a0a89d2SRobert Watson #define ERRNO_NO_LOCAL_MAPPING -600 607a0a89d2SRobert Watson 61c74c7b73SRobert Watson #if !defined(KERNEL) && !defined(_KERNEL) 62c74c7b73SRobert Watson #define ES(x) x 63c74c7b73SRobert Watson #else 64c74c7b73SRobert Watson #define ES(x) 65c74c7b73SRobert Watson #endif 66c74c7b73SRobert Watson 677a0a89d2SRobert Watson /* 687a0a89d2SRobert Watson * Mapping table -- please maintain in numeric sorted order with respect to 697a0a89d2SRobert Watson * the BSM constant. Today we do a linear lookup, but could switch to a 707a0a89d2SRobert Watson * binary search if it makes sense. We only ifdef errors that aren't 717a0a89d2SRobert Watson * generally available, but it does make the table a lot more ugly. 727a0a89d2SRobert Watson * 737a0a89d2SRobert Watson * XXXRW: It would be nice to have a similar ordered table mapping to BSM 747a0a89d2SRobert Watson * constant from local constant, but the order of local constants varies by 757a0a89d2SRobert Watson * OS. Really we need to build that table at compile-time but don't do that 767a0a89d2SRobert Watson * yet. 777a0a89d2SRobert Watson * 787a0a89d2SRobert Watson * XXXRW: We currently embed English-language error strings here, but should 797a0a89d2SRobert Watson * support catalogues; these are only used if the OS doesn't have an error 807a0a89d2SRobert Watson * string using strerror(3). 817a0a89d2SRobert Watson */ 82c74c7b73SRobert Watson static const struct bsm_errno bsm_errnos[] = { 83c74c7b73SRobert Watson { BSM_ERRNO_ESUCCESS, 0, ES("Success") }, 84c74c7b73SRobert Watson { BSM_ERRNO_EPERM, EPERM, ES("Operation not permitted") }, 85c74c7b73SRobert Watson { BSM_ERRNO_ENOENT, ENOENT, ES("No such file or directory") }, 86c74c7b73SRobert Watson { BSM_ERRNO_ESRCH, ESRCH, ES("No such process") }, 87c74c7b73SRobert Watson { BSM_ERRNO_EINTR, EINTR, ES("Interrupted system call") }, 88c74c7b73SRobert Watson { BSM_ERRNO_EIO, EIO, ES("Input/output error") }, 89c74c7b73SRobert Watson { BSM_ERRNO_ENXIO, ENXIO, ES("Device not configured") }, 90c74c7b73SRobert Watson { BSM_ERRNO_E2BIG, E2BIG, ES("Argument list too long") }, 91c74c7b73SRobert Watson { BSM_ERRNO_ENOEXEC, ENOEXEC, ES("Exec format error") }, 92c74c7b73SRobert Watson { BSM_ERRNO_EBADF, EBADF, ES("Bad file descriptor") }, 93c74c7b73SRobert Watson { BSM_ERRNO_ECHILD, ECHILD, ES("No child processes") }, 94c74c7b73SRobert Watson { BSM_ERRNO_EAGAIN, EAGAIN, ES("Resource temporarily unavailable") }, 95c74c7b73SRobert Watson { BSM_ERRNO_ENOMEM, ENOMEM, ES("Cannot allocate memory") }, 96c74c7b73SRobert Watson { BSM_ERRNO_EACCES, EACCES, ES("Permission denied") }, 97c74c7b73SRobert Watson { BSM_ERRNO_EFAULT, EFAULT, ES("Bad address") }, 98c74c7b73SRobert Watson { BSM_ERRNO_ENOTBLK, ENOTBLK, ES("Block device required") }, 99c74c7b73SRobert Watson { BSM_ERRNO_EBUSY, EBUSY, ES("Device busy") }, 100c74c7b73SRobert Watson { BSM_ERRNO_EEXIST, EEXIST, ES("File exists") }, 101c74c7b73SRobert Watson { BSM_ERRNO_EXDEV, EXDEV, ES("Cross-device link") }, 102c74c7b73SRobert Watson { BSM_ERRNO_ENODEV, ENODEV, ES("Operation not supported by device") }, 103c74c7b73SRobert Watson { BSM_ERRNO_ENOTDIR, ENOTDIR, ES("Not a directory") }, 104c74c7b73SRobert Watson { BSM_ERRNO_EISDIR, EISDIR, ES("Is a directory") }, 105c74c7b73SRobert Watson { BSM_ERRNO_EINVAL, EINVAL, ES("Invalid argument") }, 106c74c7b73SRobert Watson { BSM_ERRNO_ENFILE, ENFILE, ES("Too many open files in system") }, 107c74c7b73SRobert Watson { BSM_ERRNO_EMFILE, EMFILE, ES("Too many open files") }, 108c74c7b73SRobert Watson { BSM_ERRNO_ENOTTY, ENOTTY, ES("Inappropriate ioctl for device") }, 109c74c7b73SRobert Watson { BSM_ERRNO_ETXTBSY, ETXTBSY, ES("Text file busy") }, 110c74c7b73SRobert Watson { BSM_ERRNO_EFBIG, EFBIG, ES("File too large") }, 111c74c7b73SRobert Watson { BSM_ERRNO_ENOSPC, ENOSPC, ES("No space left on device") }, 112c74c7b73SRobert Watson { BSM_ERRNO_ESPIPE, ESPIPE, ES("Illegal seek") }, 113c74c7b73SRobert Watson { BSM_ERRNO_EROFS, EROFS, ES("Read-only file system") }, 114c74c7b73SRobert Watson { BSM_ERRNO_EMLINK, EMLINK, ES("Too many links") }, 115c74c7b73SRobert Watson { BSM_ERRNO_EPIPE, EPIPE, ES("Broken pipe") }, 116c74c7b73SRobert Watson { BSM_ERRNO_EDOM, EDOM, ES("Numerical argument out of domain") }, 117c74c7b73SRobert Watson { BSM_ERRNO_ERANGE, ERANGE, ES("Result too large") }, 118c74c7b73SRobert Watson { BSM_ERRNO_ENOMSG, ENOMSG, ES("No message of desired type") }, 119c74c7b73SRobert Watson { BSM_ERRNO_EIDRM, EIDRM, ES("Identifier removed") }, 120c74c7b73SRobert Watson { BSM_ERRNO_ECHRNG, 1217a0a89d2SRobert Watson #ifdef ECHRNG 1227a0a89d2SRobert Watson ECHRNG, 1237a0a89d2SRobert Watson #else 1247a0a89d2SRobert Watson ERRNO_NO_LOCAL_MAPPING, 1257a0a89d2SRobert Watson #endif 126c74c7b73SRobert Watson ES("Channel number out of range") }, 127c74c7b73SRobert Watson { BSM_ERRNO_EL2NSYNC, 1287a0a89d2SRobert Watson #ifdef EL2NSYNC 1297a0a89d2SRobert Watson EL2NSYNC, 1307a0a89d2SRobert Watson #else 1317a0a89d2SRobert Watson ERRNO_NO_LOCAL_MAPPING, 1327a0a89d2SRobert Watson #endif 133c74c7b73SRobert Watson ES("Level 2 not synchronized") }, 134c74c7b73SRobert Watson { BSM_ERRNO_EL3HLT, 1357a0a89d2SRobert Watson #ifdef EL3HLT 1367a0a89d2SRobert Watson EL3HLT, 1377a0a89d2SRobert Watson #else 1387a0a89d2SRobert Watson ERRNO_NO_LOCAL_MAPPING, 1397a0a89d2SRobert Watson #endif 140c74c7b73SRobert Watson ES("Level 3 halted") }, 141c74c7b73SRobert Watson { BSM_ERRNO_EL3RST, 1427a0a89d2SRobert Watson #ifdef EL3RST 1437a0a89d2SRobert Watson EL3RST, 1447a0a89d2SRobert Watson #else 1457a0a89d2SRobert Watson ERRNO_NO_LOCAL_MAPPING, 1467a0a89d2SRobert Watson #endif 147c74c7b73SRobert Watson ES("Level 3 reset") }, 148c74c7b73SRobert Watson { BSM_ERRNO_ELNRNG, 1497a0a89d2SRobert Watson #ifdef ELNRNG 1507a0a89d2SRobert Watson ELNRNG, 1517a0a89d2SRobert Watson #else 1527a0a89d2SRobert Watson ERRNO_NO_LOCAL_MAPPING, 1537a0a89d2SRobert Watson #endif 154c74c7b73SRobert Watson ES("Link number out of range") }, 155c74c7b73SRobert Watson { BSM_ERRNO_EUNATCH, 1567a0a89d2SRobert Watson #ifdef EUNATCH 1577a0a89d2SRobert Watson EUNATCH, 1587a0a89d2SRobert Watson #else 1597a0a89d2SRobert Watson ERRNO_NO_LOCAL_MAPPING, 1607a0a89d2SRobert Watson #endif 161c74c7b73SRobert Watson ES("Protocol driver not attached") }, 162c74c7b73SRobert Watson { BSM_ERRNO_ENOCSI, 1637a0a89d2SRobert Watson #ifdef ENOCSI 1647a0a89d2SRobert Watson ENOCSI, 1657a0a89d2SRobert Watson #else 1667a0a89d2SRobert Watson ERRNO_NO_LOCAL_MAPPING, 1677a0a89d2SRobert Watson #endif 168c74c7b73SRobert Watson ES("No CSI structure available") }, 169c74c7b73SRobert Watson { BSM_ERRNO_EL2HLT, 1707a0a89d2SRobert Watson #ifdef EL2HLT 1717a0a89d2SRobert Watson EL2HLT, 1727a0a89d2SRobert Watson #else 1737a0a89d2SRobert Watson ERRNO_NO_LOCAL_MAPPING, 1747a0a89d2SRobert Watson #endif 175c74c7b73SRobert Watson ES("Level 2 halted") }, 176c74c7b73SRobert Watson { BSM_ERRNO_EDEADLK, EDEADLK, ES("Resource deadlock avoided") }, 177c74c7b73SRobert Watson { BSM_ERRNO_ENOLCK, ENOLCK, ES("No locks available") }, 178c74c7b73SRobert Watson { BSM_ERRNO_ECANCELED, ECANCELED, ES("Operation canceled") }, 179c74c7b73SRobert Watson { BSM_ERRNO_ENOTSUP, ENOTSUP, ES("Operation not supported") }, 180c74c7b73SRobert Watson { BSM_ERRNO_EDQUOT, EDQUOT, ES("Disc quota exceeded") }, 181c74c7b73SRobert Watson { BSM_ERRNO_EBADE, 1827a0a89d2SRobert Watson #ifdef EBADE 1837a0a89d2SRobert Watson EBADE, 1847a0a89d2SRobert Watson #else 1857a0a89d2SRobert Watson ERRNO_NO_LOCAL_MAPPING, 1867a0a89d2SRobert Watson #endif 187c74c7b73SRobert Watson ES("Invalid exchange") }, 188c74c7b73SRobert Watson { BSM_ERRNO_EBADR, 1897a0a89d2SRobert Watson #ifdef EBADR 1907a0a89d2SRobert Watson EBADR, 1917a0a89d2SRobert Watson #else 1927a0a89d2SRobert Watson ERRNO_NO_LOCAL_MAPPING, 1937a0a89d2SRobert Watson #endif 194c74c7b73SRobert Watson ES("Invalid request descriptor") }, 195c74c7b73SRobert Watson { BSM_ERRNO_EXFULL, 1967a0a89d2SRobert Watson #ifdef EXFULL 1977a0a89d2SRobert Watson EXFULL, 1987a0a89d2SRobert Watson #else 1997a0a89d2SRobert Watson ERRNO_NO_LOCAL_MAPPING, 2007a0a89d2SRobert Watson #endif 201c74c7b73SRobert Watson ES("Exchange full") }, 202c74c7b73SRobert Watson { BSM_ERRNO_ENOANO, 2037a0a89d2SRobert Watson #ifdef ENOANO 2047a0a89d2SRobert Watson ENOANO, 2057a0a89d2SRobert Watson #else 2067a0a89d2SRobert Watson ERRNO_NO_LOCAL_MAPPING, 2077a0a89d2SRobert Watson #endif 208c74c7b73SRobert Watson ES("No anode") }, 209c74c7b73SRobert Watson { BSM_ERRNO_EBADRQC, 2107a0a89d2SRobert Watson #ifdef EBADRQC 2117a0a89d2SRobert Watson EBADRQC, 2127a0a89d2SRobert Watson #else 2137a0a89d2SRobert Watson ERRNO_NO_LOCAL_MAPPING, 2147a0a89d2SRobert Watson #endif 215c74c7b73SRobert Watson ES("Invalid request descriptor") }, 216c74c7b73SRobert Watson { BSM_ERRNO_EBADSLT, 2177a0a89d2SRobert Watson #ifdef EBADSLT 2187a0a89d2SRobert Watson EBADSLT, 2197a0a89d2SRobert Watson #else 2207a0a89d2SRobert Watson ERRNO_NO_LOCAL_MAPPING, 2217a0a89d2SRobert Watson #endif 222c74c7b73SRobert Watson ES("Invalid slot") }, 223c74c7b73SRobert Watson { BSM_ERRNO_EDEADLOCK, 2247a0a89d2SRobert Watson #ifdef EDEADLOCK 2257a0a89d2SRobert Watson EDEADLOCK, 2267a0a89d2SRobert Watson #else 2277a0a89d2SRobert Watson ERRNO_NO_LOCAL_MAPPING, 2287a0a89d2SRobert Watson #endif 229c74c7b73SRobert Watson ES("Resource deadlock avoided") }, 230c74c7b73SRobert Watson { BSM_ERRNO_EBFONT, 2317a0a89d2SRobert Watson #ifdef EBFONT 2327a0a89d2SRobert Watson EBFONT, 2337a0a89d2SRobert Watson #else 2347a0a89d2SRobert Watson ERRNO_NO_LOCAL_MAPPING, 2357a0a89d2SRobert Watson #endif 236c74c7b73SRobert Watson ES("Bad font file format") }, 237c74c7b73SRobert Watson { BSM_ERRNO_EOWNERDEAD, 2387a0a89d2SRobert Watson #ifdef EOWNERDEAD 2397a0a89d2SRobert Watson EOWNERDEAD, 2407a0a89d2SRobert Watson #else 2417a0a89d2SRobert Watson ERRNO_NO_LOCAL_MAPPING, 2427a0a89d2SRobert Watson #endif 243c74c7b73SRobert Watson ES("Process died with the lock") }, 244c74c7b73SRobert Watson { BSM_ERRNO_ENOTRECOVERABLE, 2457a0a89d2SRobert Watson #ifdef ENOTRECOVERABLE 2467a0a89d2SRobert Watson ENOTRECOVERABLE, 2477a0a89d2SRobert Watson #else 2487a0a89d2SRobert Watson ERRNO_NO_LOCAL_MAPPING, 2497a0a89d2SRobert Watson #endif 250c74c7b73SRobert Watson ES("Lock is not recoverable") }, 251c74c7b73SRobert Watson { BSM_ERRNO_ENOSTR, 2527a0a89d2SRobert Watson #ifdef ENOSTR 2537a0a89d2SRobert Watson ENOSTR, 2547a0a89d2SRobert Watson #else 2557a0a89d2SRobert Watson ERRNO_NO_LOCAL_MAPPING, 2567a0a89d2SRobert Watson #endif 257c74c7b73SRobert Watson ES("Device not a stream") }, 258c74c7b73SRobert Watson { BSM_ERRNO_ENONET, 2597a0a89d2SRobert Watson #ifdef ENONET 2607a0a89d2SRobert Watson ENONET, 2617a0a89d2SRobert Watson #else 2627a0a89d2SRobert Watson ERRNO_NO_LOCAL_MAPPING, 2637a0a89d2SRobert Watson #endif 264c74c7b73SRobert Watson ES("Machine is not on the network") }, 265c74c7b73SRobert Watson { BSM_ERRNO_ENOPKG, 2667a0a89d2SRobert Watson #ifdef ENOPKG 2677a0a89d2SRobert Watson ENOPKG, 2687a0a89d2SRobert Watson #else 2697a0a89d2SRobert Watson ERRNO_NO_LOCAL_MAPPING, 2707a0a89d2SRobert Watson #endif 271c74c7b73SRobert Watson ES("Package not installed") }, 272c74c7b73SRobert Watson { BSM_ERRNO_EREMOTE, EREMOTE, 273c74c7b73SRobert Watson ES("Too many levels of remote in path") }, 274c74c7b73SRobert Watson { BSM_ERRNO_ENOLINK, 2757a0a89d2SRobert Watson #ifdef ENOLINK 2767a0a89d2SRobert Watson ENOLINK, 2777a0a89d2SRobert Watson #else 2787a0a89d2SRobert Watson ERRNO_NO_LOCAL_MAPPING, 2797a0a89d2SRobert Watson #endif 280c74c7b73SRobert Watson ES("Link has been severed") }, 281c74c7b73SRobert Watson { BSM_ERRNO_EADV, 2827a0a89d2SRobert Watson #ifdef EADV 2837a0a89d2SRobert Watson EADV, 2847a0a89d2SRobert Watson #else 2857a0a89d2SRobert Watson ERRNO_NO_LOCAL_MAPPING, 2867a0a89d2SRobert Watson #endif 287c74c7b73SRobert Watson ES("Advertise error") }, 288c74c7b73SRobert Watson { BSM_ERRNO_ESRMNT, 2897a0a89d2SRobert Watson #ifdef ESRMNT 2907a0a89d2SRobert Watson ESRMNT, 2917a0a89d2SRobert Watson #else 2927a0a89d2SRobert Watson ERRNO_NO_LOCAL_MAPPING, 2937a0a89d2SRobert Watson #endif 294c74c7b73SRobert Watson ES("srmount error") }, 295c74c7b73SRobert Watson { BSM_ERRNO_ECOMM, 2967a0a89d2SRobert Watson #ifdef ECOMM 2977a0a89d2SRobert Watson ECOMM, 2987a0a89d2SRobert Watson #else 2997a0a89d2SRobert Watson ERRNO_NO_LOCAL_MAPPING, 3007a0a89d2SRobert Watson #endif 301c74c7b73SRobert Watson ES("Communication error on send") }, 302c74c7b73SRobert Watson { BSM_ERRNO_EPROTO, 3037a0a89d2SRobert Watson #ifdef EPROTO 3047a0a89d2SRobert Watson EPROTO, 3057a0a89d2SRobert Watson #else 3067a0a89d2SRobert Watson ERRNO_NO_LOCAL_MAPPING, 3077a0a89d2SRobert Watson #endif 308c74c7b73SRobert Watson ES("Protocol error") }, 309c74c7b73SRobert Watson { BSM_ERRNO_ELOCKUNMAPPED, 3107a0a89d2SRobert Watson #ifdef ELOCKUNMAPPED 3117a0a89d2SRobert Watson ELOCKUNMAPPED, 3127a0a89d2SRobert Watson #else 3137a0a89d2SRobert Watson ERRNO_NO_LOCAL_MAPPING, 3147a0a89d2SRobert Watson #endif 315c74c7b73SRobert Watson ES("Locked lock was unmapped") }, 316c74c7b73SRobert Watson { BSM_ERRNO_ENOTACTIVE, 3177a0a89d2SRobert Watson #ifdef ENOTACTIVE 3187a0a89d2SRobert Watson ENOTACTIVE, 3197a0a89d2SRobert Watson #else 3207a0a89d2SRobert Watson ERRNO_NO_LOCAL_MAPPING, 3217a0a89d2SRobert Watson #endif 322c74c7b73SRobert Watson ES("Facility is not active") }, 323c74c7b73SRobert Watson { BSM_ERRNO_EMULTIHOP, 3247a0a89d2SRobert Watson #ifdef EMULTIHOP 3257a0a89d2SRobert Watson EMULTIHOP, 3267a0a89d2SRobert Watson #else 3277a0a89d2SRobert Watson ERRNO_NO_LOCAL_MAPPING, 3287a0a89d2SRobert Watson #endif 329c74c7b73SRobert Watson ES("Multihop attempted") }, 330c74c7b73SRobert Watson { BSM_ERRNO_EBADMSG, 3317a0a89d2SRobert Watson #ifdef EBADMSG 3327a0a89d2SRobert Watson EBADMSG, 3337a0a89d2SRobert Watson #else 3347a0a89d2SRobert Watson ERRNO_NO_LOCAL_MAPPING, 3357a0a89d2SRobert Watson #endif 336c74c7b73SRobert Watson ES("Bad message") }, 337c74c7b73SRobert Watson { BSM_ERRNO_ENAMETOOLONG, ENAMETOOLONG, ES("File name too long") }, 338c74c7b73SRobert Watson { BSM_ERRNO_EOVERFLOW, EOVERFLOW, 339c74c7b73SRobert Watson ES("Value too large to be stored in data type") }, 340c74c7b73SRobert Watson { BSM_ERRNO_ENOTUNIQ, 3417a0a89d2SRobert Watson #ifdef ENOTUNIQ 3427a0a89d2SRobert Watson ENOTUNIQ, 3437a0a89d2SRobert Watson #else 3447a0a89d2SRobert Watson ERRNO_NO_LOCAL_MAPPING, 3457a0a89d2SRobert Watson #endif 346c74c7b73SRobert Watson ES("Given log name not unique") }, 347c74c7b73SRobert Watson { BSM_ERRNO_EBADFD, 3487a0a89d2SRobert Watson #ifdef EBADFD 3497a0a89d2SRobert Watson EBADFD, 3507a0a89d2SRobert Watson #else 3517a0a89d2SRobert Watson ERRNO_NO_LOCAL_MAPPING, 3527a0a89d2SRobert Watson #endif 353c74c7b73SRobert Watson ES("Given f.d. invalid for this operation") }, 354c74c7b73SRobert Watson { BSM_ERRNO_EREMCHG, 3557a0a89d2SRobert Watson #ifdef EREMCHG 3567a0a89d2SRobert Watson EREMCHG, 3577a0a89d2SRobert Watson #else 3587a0a89d2SRobert Watson ERRNO_NO_LOCAL_MAPPING, 3597a0a89d2SRobert Watson #endif 360c74c7b73SRobert Watson ES("Remote address changed") }, 361c74c7b73SRobert Watson { BSM_ERRNO_ELIBACC, 3627a0a89d2SRobert Watson #ifdef ELIBACC 3637a0a89d2SRobert Watson ELIBACC, 3647a0a89d2SRobert Watson #else 3657a0a89d2SRobert Watson ERRNO_NO_LOCAL_MAPPING, 3667a0a89d2SRobert Watson #endif 367c74c7b73SRobert Watson ES("Can't access a needed shared lib") }, 368c74c7b73SRobert Watson { BSM_ERRNO_ELIBBAD, 3697a0a89d2SRobert Watson #ifdef ELIBBAD 3707a0a89d2SRobert Watson ELIBBAD, 3717a0a89d2SRobert Watson #else 3727a0a89d2SRobert Watson ERRNO_NO_LOCAL_MAPPING, 3737a0a89d2SRobert Watson #endif 374c74c7b73SRobert Watson ES("Accessing a corrupted shared lib") }, 375c74c7b73SRobert Watson { BSM_ERRNO_ELIBSCN, 3767a0a89d2SRobert Watson #ifdef ELIBSCN 3777a0a89d2SRobert Watson ELIBSCN, 3787a0a89d2SRobert Watson #else 3797a0a89d2SRobert Watson ERRNO_NO_LOCAL_MAPPING, 3807a0a89d2SRobert Watson #endif 381c74c7b73SRobert Watson ES(".lib section in a.out corrupted") }, 382c74c7b73SRobert Watson { BSM_ERRNO_ELIBMAX, 3837a0a89d2SRobert Watson #ifdef ELIBMAX 3847a0a89d2SRobert Watson ELIBMAX, 3857a0a89d2SRobert Watson #else 3867a0a89d2SRobert Watson ERRNO_NO_LOCAL_MAPPING, 3877a0a89d2SRobert Watson #endif 388c74c7b73SRobert Watson ES("Attempting to link in too many libs") }, 389c74c7b73SRobert Watson { BSM_ERRNO_ELIBEXEC, 3907a0a89d2SRobert Watson #ifdef ELIBEXEC 3917a0a89d2SRobert Watson ELIBEXEC, 3927a0a89d2SRobert Watson #else 3937a0a89d2SRobert Watson ERRNO_NO_LOCAL_MAPPING, 3947a0a89d2SRobert Watson #endif 395c74c7b73SRobert Watson ES("Attempting to exec a shared library") }, 396c74c7b73SRobert Watson { BSM_ERRNO_EILSEQ, EILSEQ, ES("Illegal byte sequence") }, 397c74c7b73SRobert Watson { BSM_ERRNO_ENOSYS, ENOSYS, ES("Function not implemented") }, 398c74c7b73SRobert Watson { BSM_ERRNO_ELOOP, ELOOP, ES("Too many levels of symbolic links") }, 399c74c7b73SRobert Watson { BSM_ERRNO_ERESTART, 4007a0a89d2SRobert Watson #ifdef ERESTART 4017a0a89d2SRobert Watson ERESTART, 4027a0a89d2SRobert Watson #else 4037a0a89d2SRobert Watson ERRNO_NO_LOCAL_MAPPING, 4047a0a89d2SRobert Watson #endif 405c74c7b73SRobert Watson ES("Restart syscall") }, 406c74c7b73SRobert Watson { BSM_ERRNO_ESTRPIPE, 4077a0a89d2SRobert Watson #ifdef ESTRPIPE 4087a0a89d2SRobert Watson ESTRPIPE, 4097a0a89d2SRobert Watson #else 4107a0a89d2SRobert Watson ERRNO_NO_LOCAL_MAPPING, 4117a0a89d2SRobert Watson #endif 412c74c7b73SRobert Watson ES("If pipe/FIFO, don't sleep in stream head") }, 413c74c7b73SRobert Watson { BSM_ERRNO_ENOTEMPTY, ENOTEMPTY, ES("Directory not empty") }, 414c74c7b73SRobert Watson { BSM_ERRNO_EUSERS, EUSERS, ES("Too many users") }, 415c74c7b73SRobert Watson { BSM_ERRNO_ENOTSOCK, ENOTSOCK, 416c74c7b73SRobert Watson ES("Socket operation on non-socket") }, 417c74c7b73SRobert Watson { BSM_ERRNO_EDESTADDRREQ, EDESTADDRREQ, 418c74c7b73SRobert Watson ES("Destination address required") }, 419c74c7b73SRobert Watson { BSM_ERRNO_EMSGSIZE, EMSGSIZE, ES("Message too long") }, 420c74c7b73SRobert Watson { BSM_ERRNO_EPROTOTYPE, EPROTOTYPE, 421c74c7b73SRobert Watson ES("Protocol wrong type for socket") }, 422c74c7b73SRobert Watson { BSM_ERRNO_ENOPROTOOPT, ENOPROTOOPT, ES("Protocol not available") }, 423c74c7b73SRobert Watson { BSM_ERRNO_EPROTONOSUPPORT, EPROTONOSUPPORT, 424c74c7b73SRobert Watson ES("Protocol not supported") }, 425c74c7b73SRobert Watson { BSM_ERRNO_ESOCKTNOSUPPORT, ESOCKTNOSUPPORT, 426c74c7b73SRobert Watson ES("Socket type not supported") }, 427c74c7b73SRobert Watson { BSM_ERRNO_EOPNOTSUPP, EOPNOTSUPP, ES("Operation not supported") }, 428c74c7b73SRobert Watson { BSM_ERRNO_EPFNOSUPPORT, EPFNOSUPPORT, 429c74c7b73SRobert Watson ES("Protocol family not supported") }, 430c74c7b73SRobert Watson { BSM_ERRNO_EAFNOSUPPORT, EAFNOSUPPORT, 431c74c7b73SRobert Watson ES("Address family not supported by protocol family") }, 432c74c7b73SRobert Watson { BSM_ERRNO_EADDRINUSE, EADDRINUSE, ES("Address already in use") }, 433c74c7b73SRobert Watson { BSM_ERRNO_EADDRNOTAVAIL, EADDRNOTAVAIL, 434c74c7b73SRobert Watson ES("Can't assign requested address") }, 435c74c7b73SRobert Watson { BSM_ERRNO_ENETDOWN, ENETDOWN, ES("Network is down") }, 436c74c7b73SRobert Watson { BSM_ERRNO_ENETRESET, ENETRESET, 437c74c7b73SRobert Watson ES("Network dropped connection on reset") }, 438c74c7b73SRobert Watson { BSM_ERRNO_ECONNABORTED, ECONNABORTED, 439c74c7b73SRobert Watson ES("Software caused connection abort") }, 440c74c7b73SRobert Watson { BSM_ERRNO_ECONNRESET, ECONNRESET, ES("Connection reset by peer") }, 441c74c7b73SRobert Watson { BSM_ERRNO_ENOBUFS, ENOBUFS, ES("No buffer space available") }, 442c74c7b73SRobert Watson { BSM_ERRNO_EISCONN, EISCONN, ES("Socket is already connected") }, 443c74c7b73SRobert Watson { BSM_ERRNO_ENOTCONN, ENOTCONN, ES("Socket is not connected") }, 444c74c7b73SRobert Watson { BSM_ERRNO_ESHUTDOWN, ESHUTDOWN, 445c74c7b73SRobert Watson ES("Can't send after socket shutdown") }, 446c74c7b73SRobert Watson { BSM_ERRNO_ETOOMANYREFS, ETOOMANYREFS, 447c74c7b73SRobert Watson ES("Too many references: can't splice") }, 448c74c7b73SRobert Watson { BSM_ERRNO_ETIMEDOUT, ETIMEDOUT, ES("Operation timed out") }, 449c74c7b73SRobert Watson { BSM_ERRNO_ECONNREFUSED, ECONNREFUSED, ES("Connection refused") }, 450c74c7b73SRobert Watson { BSM_ERRNO_EHOSTDOWN, EHOSTDOWN, ES("Host is down") }, 451c74c7b73SRobert Watson { BSM_ERRNO_EHOSTUNREACH, EHOSTUNREACH, ES("No route to host") }, 452c74c7b73SRobert Watson { BSM_ERRNO_EALREADY, EALREADY, ES("Operation already in progress") }, 453c74c7b73SRobert Watson { BSM_ERRNO_EINPROGRESS, EINPROGRESS, 454c74c7b73SRobert Watson ES("Operation now in progress") }, 455c74c7b73SRobert Watson { BSM_ERRNO_ESTALE, ESTALE, ES("Stale NFS file handle") }, 456597df30eSRobert Watson { BSM_ERRNO_EPROCLIM, 457597df30eSRobert Watson #ifdef EPROCLIM 458597df30eSRobert Watson EPROCLIM, 459597df30eSRobert Watson #else 460597df30eSRobert Watson ERRNO_NO_LOCAL_MAPPING, 461597df30eSRobert Watson #endif 462597df30eSRobert Watson ES("Too many processes") }, 463597df30eSRobert Watson { BSM_ERRNO_EBADRPC, 464597df30eSRobert Watson #ifdef EBADRPC 465597df30eSRobert Watson EBADRPC, 466597df30eSRobert Watson #else 467597df30eSRobert Watson ERRNO_NO_LOCAL_MAPPING, 468597df30eSRobert Watson #endif 469597df30eSRobert Watson ES("RPC struct is bad") }, 470597df30eSRobert Watson { BSM_ERRNO_ERPCMISMATCH, 471597df30eSRobert Watson #ifdef ERPCMISMATCH 472597df30eSRobert Watson ERPCMISMATCH, 473597df30eSRobert Watson #else 474597df30eSRobert Watson ERRNO_NO_LOCAL_MAPPING, 475597df30eSRobert Watson #endif 476597df30eSRobert Watson ES("RPC version wrong") }, 477597df30eSRobert Watson { BSM_ERRNO_EPROGUNAVAIL, 478597df30eSRobert Watson #ifdef EPROGUNAVAIL 479597df30eSRobert Watson EPROGUNAVAIL, 480597df30eSRobert Watson #else 481597df30eSRobert Watson ERRNO_NO_LOCAL_MAPPING, 482597df30eSRobert Watson #endif 483597df30eSRobert Watson ES("RPC prog. not avail") }, 484597df30eSRobert Watson { BSM_ERRNO_EPROGMISMATCH, 485597df30eSRobert Watson #ifdef EPROGMISMATCH 486597df30eSRobert Watson EPROGMISMATCH, 487597df30eSRobert Watson #else 488597df30eSRobert Watson ERRNO_NO_LOCAL_MAPPING, 489597df30eSRobert Watson #endif 490597df30eSRobert Watson ES("RPC version wrong") }, 491597df30eSRobert Watson { BSM_ERRNO_EPROCUNAVAIL, 492597df30eSRobert Watson #ifdef EPROCUNAVAIL 493597df30eSRobert Watson EPROCUNAVAIL, 494597df30eSRobert Watson #else 495597df30eSRobert Watson ERRNO_NO_LOCAL_MAPPING, 496597df30eSRobert Watson #endif 497597df30eSRobert Watson ES("Bad procedure for program") }, 498597df30eSRobert Watson { BSM_ERRNO_EFTYPE, 499597df30eSRobert Watson #ifdef EFTYPE 500597df30eSRobert Watson EFTYPE, 501597df30eSRobert Watson #else 502597df30eSRobert Watson ERRNO_NO_LOCAL_MAPPING, 503597df30eSRobert Watson #endif 504597df30eSRobert Watson ES("Inappropriate file type or format") }, 505597df30eSRobert Watson { BSM_ERRNO_EAUTH, 506597df30eSRobert Watson #ifdef EAUTH 507597df30eSRobert Watson EAUTH, 508597df30eSRobert Watson #else 509597df30eSRobert Watson ERRNO_NO_LOCAL_MAPPING, 510597df30eSRobert Watson #endif 511597df30eSRobert Watson ES("Authenticateion error") }, 512597df30eSRobert Watson { BSM_ERRNO_ENEEDAUTH, 513597df30eSRobert Watson #ifdef ENEEDAUTH 514597df30eSRobert Watson ENEEDAUTH, 515597df30eSRobert Watson #else 516597df30eSRobert Watson ERRNO_NO_LOCAL_MAPPING, 517597df30eSRobert Watson #endif 518597df30eSRobert Watson ES("Need authenticator") }, 519597df30eSRobert Watson { BSM_ERRNO_ENOATTR, 520597df30eSRobert Watson #ifdef ENOATTR 521597df30eSRobert Watson ENOATTR, 522597df30eSRobert Watson #else 523597df30eSRobert Watson ERRNO_NO_LOCAL_MAPPING, 524597df30eSRobert Watson #endif 525597df30eSRobert Watson ES("Attribute not found") }, 526597df30eSRobert Watson { BSM_ERRNO_EDOOFUS, 527597df30eSRobert Watson #ifdef EDOOFUS 528597df30eSRobert Watson EDOOFUS, 529597df30eSRobert Watson #else 530597df30eSRobert Watson ERRNO_NO_LOCAL_MAPPING, 531597df30eSRobert Watson #endif 532597df30eSRobert Watson ES("Programming error") }, 533597df30eSRobert Watson { BSM_ERRNO_EJUSTRETURN, 534597df30eSRobert Watson #ifdef EJUSTRETURN 535597df30eSRobert Watson EJUSTRETURN, 536597df30eSRobert Watson #else 537597df30eSRobert Watson ERRNO_NO_LOCAL_MAPPING, 538597df30eSRobert Watson #endif 539597df30eSRobert Watson ES("Just return") }, 540597df30eSRobert Watson { BSM_ERRNO_ENOIOCTL, 541597df30eSRobert Watson #ifdef ENOIOCTL 542597df30eSRobert Watson ENOIOCTL, 543597df30eSRobert Watson #else 544597df30eSRobert Watson ERRNO_NO_LOCAL_MAPPING, 545597df30eSRobert Watson #endif 546597df30eSRobert Watson ES("ioctl not handled by this layer") }, 547597df30eSRobert Watson { BSM_ERRNO_EDIRIOCTL, 548597df30eSRobert Watson #ifdef EDIRIOCTL 549597df30eSRobert Watson EDIRIOCTL, 550597df30eSRobert Watson #else 551597df30eSRobert Watson ERRNO_NO_LOCAL_MAPPING, 552597df30eSRobert Watson #endif 553597df30eSRobert Watson ES("do direct ioctl in GEOM") }, 554c74c7b73SRobert Watson { BSM_ERRNO_EPWROFF, 5557a0a89d2SRobert Watson #ifdef EPWROFF 5567a0a89d2SRobert Watson EPWROFF, 5577a0a89d2SRobert Watson #else 5587a0a89d2SRobert Watson ERRNO_NO_LOCAL_MAPPING, 5597a0a89d2SRobert Watson #endif 560c74c7b73SRobert Watson ES("Device power is off") }, 561c74c7b73SRobert Watson { BSM_ERRNO_EDEVERR, 5627a0a89d2SRobert Watson #ifdef EDEVERR 5637a0a89d2SRobert Watson EDEVERR, 5647a0a89d2SRobert Watson #else 5657a0a89d2SRobert Watson ERRNO_NO_LOCAL_MAPPING, 5667a0a89d2SRobert Watson #endif 567c74c7b73SRobert Watson ES("Device error") }, 568c74c7b73SRobert Watson { BSM_ERRNO_EBADEXEC, 5697a0a89d2SRobert Watson #ifdef EBADEXEC 5707a0a89d2SRobert Watson EBADEXEC, 5717a0a89d2SRobert Watson #else 5727a0a89d2SRobert Watson ERRNO_NO_LOCAL_MAPPING, 5737a0a89d2SRobert Watson #endif 574c74c7b73SRobert Watson ES("Bad executable") }, 575c74c7b73SRobert Watson { BSM_ERRNO_EBADARCH, 5767a0a89d2SRobert Watson #ifdef EBADARCH 5777a0a89d2SRobert Watson EBADARCH, 5787a0a89d2SRobert Watson #else 5797a0a89d2SRobert Watson ERRNO_NO_LOCAL_MAPPING, 5807a0a89d2SRobert Watson #endif 581c74c7b73SRobert Watson ES("Bad CPU type in executable") }, 582c74c7b73SRobert Watson { BSM_ERRNO_ESHLIBVERS, 5837a0a89d2SRobert Watson #ifdef ESHLIBVERS 5847a0a89d2SRobert Watson ESHLIBVERS, 5857a0a89d2SRobert Watson #else 5867a0a89d2SRobert Watson ERRNO_NO_LOCAL_MAPPING, 5877a0a89d2SRobert Watson #endif 588c74c7b73SRobert Watson ES("Shared library version mismatch") }, 589c74c7b73SRobert Watson { BSM_ERRNO_EBADMACHO, 5907a0a89d2SRobert Watson #ifdef EBADMACHO 5917a0a89d2SRobert Watson EBADMACHO, 5927a0a89d2SRobert Watson #else 5937a0a89d2SRobert Watson ERRNO_NO_LOCAL_MAPPING, 5947a0a89d2SRobert Watson #endif 59506edd2f1SRobert Watson ES("Malformed Macho file") }, 596c74c7b73SRobert Watson { BSM_ERRNO_EPOLICY, 5977a0a89d2SRobert Watson #ifdef EPOLICY 5987a0a89d2SRobert Watson EPOLICY, 5997a0a89d2SRobert Watson #else 6007a0a89d2SRobert Watson ERRNO_NO_LOCAL_MAPPING, 6017a0a89d2SRobert Watson #endif 602c74c7b73SRobert Watson ES("Operation failed by policy") }, 603c74c7b73SRobert Watson { BSM_ERRNO_EDOTDOT, 6047a0a89d2SRobert Watson #ifdef EDOTDOT 6057a0a89d2SRobert Watson EDOTDOT, 6067a0a89d2SRobert Watson #else 6077a0a89d2SRobert Watson ERRNO_NO_LOCAL_MAPPING, 6087a0a89d2SRobert Watson #endif 609c74c7b73SRobert Watson ES("RFS specific error") }, 610c74c7b73SRobert Watson { BSM_ERRNO_EUCLEAN, 6117a0a89d2SRobert Watson #ifdef EUCLEAN 6127a0a89d2SRobert Watson EUCLEAN, 6137a0a89d2SRobert Watson #else 6147a0a89d2SRobert Watson ERRNO_NO_LOCAL_MAPPING, 6157a0a89d2SRobert Watson #endif 616c74c7b73SRobert Watson ES("Structure needs cleaning") }, 617c74c7b73SRobert Watson { BSM_ERRNO_ENOTNAM, 6187a0a89d2SRobert Watson #ifdef ENOTNAM 6197a0a89d2SRobert Watson ENOTNAM, 6207a0a89d2SRobert Watson #else 6217a0a89d2SRobert Watson ERRNO_NO_LOCAL_MAPPING, 6227a0a89d2SRobert Watson #endif 623c74c7b73SRobert Watson ES("Not a XENIX named type file") }, 624c74c7b73SRobert Watson { BSM_ERRNO_ENAVAIL, 6257a0a89d2SRobert Watson #ifdef ENAVAIL 6267a0a89d2SRobert Watson ENAVAIL, 6277a0a89d2SRobert Watson #else 6287a0a89d2SRobert Watson ERRNO_NO_LOCAL_MAPPING, 6297a0a89d2SRobert Watson #endif 630c74c7b73SRobert Watson ES("No XENIX semaphores available") }, 631c74c7b73SRobert Watson { BSM_ERRNO_EISNAM, 6327a0a89d2SRobert Watson #ifdef EISNAM 6337a0a89d2SRobert Watson EISNAM, 6347a0a89d2SRobert Watson #else 6357a0a89d2SRobert Watson ERRNO_NO_LOCAL_MAPPING, 6367a0a89d2SRobert Watson #endif 637c74c7b73SRobert Watson ES("Is a named type file") }, 638c74c7b73SRobert Watson { BSM_ERRNO_EREMOTEIO, 6397a0a89d2SRobert Watson #ifdef EREMOTEIO 6407a0a89d2SRobert Watson EREMOTEIO, 6417a0a89d2SRobert Watson #else 6427a0a89d2SRobert Watson ERRNO_NO_LOCAL_MAPPING, 6437a0a89d2SRobert Watson #endif 644c74c7b73SRobert Watson ES("Remote I/O error") }, 645c74c7b73SRobert Watson { BSM_ERRNO_ENOMEDIUM, 6467a0a89d2SRobert Watson #ifdef ENOMEDIUM 6477a0a89d2SRobert Watson ENOMEDIUM, 6487a0a89d2SRobert Watson #else 6497a0a89d2SRobert Watson ERRNO_NO_LOCAL_MAPPING, 6507a0a89d2SRobert Watson #endif 651c74c7b73SRobert Watson ES("No medium found") }, 652c74c7b73SRobert Watson { BSM_ERRNO_EMEDIUMTYPE, 6537a0a89d2SRobert Watson #ifdef EMEDIUMTYPE 6547a0a89d2SRobert Watson EMEDIUMTYPE, 6557a0a89d2SRobert Watson #else 6567a0a89d2SRobert Watson ERRNO_NO_LOCAL_MAPPING, 6577a0a89d2SRobert Watson #endif 658c74c7b73SRobert Watson ES("Wrong medium type") }, 659c74c7b73SRobert Watson { BSM_ERRNO_ENOKEY, 6607a0a89d2SRobert Watson #ifdef ENOKEY 6617a0a89d2SRobert Watson ENOKEY, 6627a0a89d2SRobert Watson #else 6637a0a89d2SRobert Watson ERRNO_NO_LOCAL_MAPPING, 6647a0a89d2SRobert Watson #endif 665c74c7b73SRobert Watson ES("Required key not available") }, 666c74c7b73SRobert Watson { BSM_ERRNO_EKEYEXPIRED, 667*aa772005SRobert Watson #ifdef EKEYEXPIRED 6687a0a89d2SRobert Watson EKEYEXPIRED, 6697a0a89d2SRobert Watson #else 6707a0a89d2SRobert Watson ERRNO_NO_LOCAL_MAPPING, 6717a0a89d2SRobert Watson #endif 672c74c7b73SRobert Watson ES("Key has expired") }, 673c74c7b73SRobert Watson { BSM_ERRNO_EKEYREVOKED, 6747a0a89d2SRobert Watson #ifdef EKEYREVOKED 6757a0a89d2SRobert Watson EKEYREVOKED, 6767a0a89d2SRobert Watson #else 6777a0a89d2SRobert Watson ERRNO_NO_LOCAL_MAPPING, 6787a0a89d2SRobert Watson #endif 679c74c7b73SRobert Watson ES("Key has been revoked") }, 680c74c7b73SRobert Watson { BSM_ERRNO_EKEYREJECTED, 681*aa772005SRobert Watson #ifdef EKEYREJECTED 6827a0a89d2SRobert Watson EKEYREJECTED, 6837a0a89d2SRobert Watson #else 6847a0a89d2SRobert Watson ERRNO_NO_LOCAL_MAPPING, 6857a0a89d2SRobert Watson #endif 686c74c7b73SRobert Watson ES("Key was rejected by service") }, 687*aa772005SRobert Watson { BSM_ERRNO_ENOTCAPABLE, 688*aa772005SRobert Watson #ifdef ENOTCAPABLE 689*aa772005SRobert Watson ENOTCAPABLE, 690*aa772005SRobert Watson #else 691*aa772005SRobert Watson ERRNO_NO_LOCAL_MAPPING, 692*aa772005SRobert Watson #endif 693*aa772005SRobert Watson ES("Capabilities insufficient") }, 694*aa772005SRobert Watson { BSM_ERRNO_ECAPMODE, 695*aa772005SRobert Watson #ifdef ECAPMODE 696*aa772005SRobert Watson ECAPMODE, 697*aa772005SRobert Watson #else 698*aa772005SRobert Watson ERRNO_NO_LOCAL_MAPPING, 699*aa772005SRobert Watson #endif 700*aa772005SRobert Watson ES("Not permitted in capability mode") }, 7017a0a89d2SRobert Watson }; 702c74c7b73SRobert Watson static const int bsm_errnos_count = sizeof(bsm_errnos) / sizeof(bsm_errnos[0]); 7037a0a89d2SRobert Watson 704c74c7b73SRobert Watson static const struct bsm_errno * 705c74c7b73SRobert Watson bsm_lookup_errno_local(int local_errno) 7067a0a89d2SRobert Watson { 7077a0a89d2SRobert Watson int i; 7087a0a89d2SRobert Watson 709c74c7b73SRobert Watson for (i = 0; i < bsm_errnos_count; i++) { 710c74c7b73SRobert Watson if (bsm_errnos[i].be_local_errno == local_errno) 711c74c7b73SRobert Watson return (&bsm_errnos[i]); 7127a0a89d2SRobert Watson } 7137a0a89d2SRobert Watson return (NULL); 7147a0a89d2SRobert Watson } 7157a0a89d2SRobert Watson 716c74c7b73SRobert Watson /* 717c74c7b73SRobert Watson * Conversion to the BSM errno space isn't allowed to fail; we simply map to 718c74c7b73SRobert Watson * BSM_ERRNO_UNKNOWN and let the remote endpoint deal with it. 719c74c7b73SRobert Watson */ 720c74c7b73SRobert Watson u_char 721c74c7b73SRobert Watson au_errno_to_bsm(int local_errno) 722c74c7b73SRobert Watson { 723c74c7b73SRobert Watson const struct bsm_errno *bsme; 724c74c7b73SRobert Watson 725c74c7b73SRobert Watson bsme = bsm_lookup_errno_local(local_errno); 726c74c7b73SRobert Watson if (bsme == NULL) 727c74c7b73SRobert Watson return (BSM_ERRNO_UNKNOWN); 728c74c7b73SRobert Watson return (bsme->be_bsm_errno); 729c74c7b73SRobert Watson } 730c74c7b73SRobert Watson 731c74c7b73SRobert Watson static const struct bsm_errno * 732c74c7b73SRobert Watson bsm_lookup_errno_bsm(u_char bsm_errno) 7337a0a89d2SRobert Watson { 7347a0a89d2SRobert Watson int i; 7357a0a89d2SRobert Watson 736c74c7b73SRobert Watson for (i = 0; i < bsm_errnos_count; i++) { 737c74c7b73SRobert Watson if (bsm_errnos[i].be_bsm_errno == bsm_errno) 738c74c7b73SRobert Watson return (&bsm_errnos[i]); 7397a0a89d2SRobert Watson } 7407a0a89d2SRobert Watson return (NULL); 7417a0a89d2SRobert Watson } 7427a0a89d2SRobert Watson 7437a0a89d2SRobert Watson /* 7447a0a89d2SRobert Watson * Converstion from a BSM error to a local error number may fail if either 7457a0a89d2SRobert Watson * OpenBSM doesn't recognize the error on the wire, or because there is no 746c74c7b73SRobert Watson * appropriate local mapping. 7477a0a89d2SRobert Watson */ 7487a0a89d2SRobert Watson int 749c74c7b73SRobert Watson au_bsm_to_errno(u_char bsm_errno, int *errorp) 7507a0a89d2SRobert Watson { 751c74c7b73SRobert Watson const struct bsm_errno *bsme; 7527a0a89d2SRobert Watson 753c74c7b73SRobert Watson bsme = bsm_lookup_errno_bsm(bsm_errno); 754c74c7b73SRobert Watson if (bsme == NULL || bsme->be_local_errno == ERRNO_NO_LOCAL_MAPPING) 7557a0a89d2SRobert Watson return (-1); 756c74c7b73SRobert Watson *errorp = bsme->be_local_errno; 7577a0a89d2SRobert Watson return (0); 7587a0a89d2SRobert Watson } 7597a0a89d2SRobert Watson 7607a0a89d2SRobert Watson #if !defined(KERNEL) && !defined(_KERNEL) 7617a0a89d2SRobert Watson const char * 762c74c7b73SRobert Watson au_strerror(u_char bsm_errno) 7637a0a89d2SRobert Watson { 764c74c7b73SRobert Watson const struct bsm_errno *bsme; 7657a0a89d2SRobert Watson 766c74c7b73SRobert Watson bsme = bsm_lookup_errno_bsm(bsm_errno); 7677a0a89d2SRobert Watson if (bsme == NULL) 7687a0a89d2SRobert Watson return ("Unrecognized BSM error"); 769c74c7b73SRobert Watson if (bsme->be_local_errno != ERRNO_NO_LOCAL_MAPPING) 770c74c7b73SRobert Watson return (strerror(bsme->be_local_errno)); 7717a0a89d2SRobert Watson return (bsme->be_strerror); 7727a0a89d2SRobert Watson } 7737a0a89d2SRobert Watson #endif 774