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 * $P4: //depot/projects/trustedbsd/openbsm/libbsm/bsm_errno.c#12 $ 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. 487a0a89d2SRobert Watson */ 497a0a89d2SRobert Watson 507a0a89d2SRobert Watson struct bsm_errors { 517a0a89d2SRobert Watson int be_bsm_error; 527a0a89d2SRobert Watson int be_os_error; 537a0a89d2SRobert Watson const char *be_strerror; 547a0a89d2SRobert Watson }; 557a0a89d2SRobert Watson 567a0a89d2SRobert Watson #define ERRNO_NO_LOCAL_MAPPING -600 577a0a89d2SRobert Watson 587a0a89d2SRobert Watson /* 597a0a89d2SRobert Watson * Mapping table -- please maintain in numeric sorted order with respect to 607a0a89d2SRobert Watson * the BSM constant. Today we do a linear lookup, but could switch to a 617a0a89d2SRobert Watson * binary search if it makes sense. We only ifdef errors that aren't 627a0a89d2SRobert Watson * generally available, but it does make the table a lot more ugly. 637a0a89d2SRobert Watson * 647a0a89d2SRobert Watson * XXXRW: It would be nice to have a similar ordered table mapping to BSM 657a0a89d2SRobert Watson * constant from local constant, but the order of local constants varies by 667a0a89d2SRobert Watson * OS. Really we need to build that table at compile-time but don't do that 677a0a89d2SRobert Watson * yet. 687a0a89d2SRobert Watson * 697a0a89d2SRobert Watson * XXXRW: We currently embed English-language error strings here, but should 707a0a89d2SRobert Watson * support catalogues; these are only used if the OS doesn't have an error 717a0a89d2SRobert Watson * string using strerror(3). 727a0a89d2SRobert Watson */ 737a0a89d2SRobert Watson static const struct bsm_errors bsm_errors[] = { 747a0a89d2SRobert Watson { BSM_ESUCCESS, 0, "Success" }, 757a0a89d2SRobert Watson { BSM_EPERM, EPERM, "Operation not permitted" }, 767a0a89d2SRobert Watson { BSM_ENOENT, ENOENT, "No such file or directory" }, 777a0a89d2SRobert Watson { BSM_ESRCH, ESRCH, "No such process" }, 787a0a89d2SRobert Watson { BSM_EINTR, EINTR, "Interrupted system call" }, 797a0a89d2SRobert Watson { BSM_EIO, EIO, "Input/output error" }, 807a0a89d2SRobert Watson { BSM_ENXIO, ENXIO, "Device not configured" }, 817a0a89d2SRobert Watson { BSM_E2BIG, E2BIG, "Argument list too long" }, 827a0a89d2SRobert Watson { BSM_ENOEXEC, ENOEXEC, "Exec format error" }, 837a0a89d2SRobert Watson { BSM_EBADF, EBADF, "BAd file descriptor" }, 847a0a89d2SRobert Watson { BSM_ECHILD, ECHILD, "No child processes" }, 857a0a89d2SRobert Watson { BSM_EAGAIN, EAGAIN, "Resource temporarily unavailable" }, 867a0a89d2SRobert Watson { BSM_ENOMEM, ENOMEM, "Cannot allocate memory" }, 877a0a89d2SRobert Watson { BSM_EACCES, EACCES, "Permission denied" }, 887a0a89d2SRobert Watson { BSM_EFAULT, EFAULT, "Bad address" }, 897a0a89d2SRobert Watson { BSM_ENOTBLK, ENOTBLK, "Block device required" }, 907a0a89d2SRobert Watson { BSM_EBUSY, EBUSY, "Device busy" }, 917a0a89d2SRobert Watson { BSM_EEXIST, EEXIST, "File exists" }, 927a0a89d2SRobert Watson { BSM_EXDEV, EXDEV, "Cross-device link" }, 937a0a89d2SRobert Watson { BSM_ENODEV, ENODEV, "Operation not supported by device" }, 947a0a89d2SRobert Watson { BSM_ENOTDIR, ENOTDIR, "Not a directory" }, 957a0a89d2SRobert Watson { BSM_EISDIR, EISDIR, "Is a directory" }, 967a0a89d2SRobert Watson { BSM_EINVAL, EINVAL, "Invalid argument" }, 977a0a89d2SRobert Watson { BSM_ENFILE, ENFILE, "Too many open files in system" }, 987a0a89d2SRobert Watson { BSM_EMFILE, EMFILE, "Too many open files" }, 997a0a89d2SRobert Watson { BSM_ENOTTY, ENOTTY, "Inappropriate ioctl for device" }, 1007a0a89d2SRobert Watson { BSM_ETXTBSY, ETXTBSY, "Text file busy" }, 1017a0a89d2SRobert Watson { BSM_EFBIG, EFBIG, "File too large" }, 1027a0a89d2SRobert Watson { BSM_ENOSPC, ENOSPC, "No space left on device" }, 1037a0a89d2SRobert Watson { BSM_ESPIPE, ESPIPE, "Illegal seek" }, 1047a0a89d2SRobert Watson { BSM_EROFS, EROFS, "Read-only file system" }, 1057a0a89d2SRobert Watson { BSM_EMLINK, EMLINK, "Too many links" }, 1067a0a89d2SRobert Watson { BSM_EPIPE, EPIPE, "Broken pipe" }, 1077a0a89d2SRobert Watson { BSM_EDOM, EDOM, "Numerical argument out of domain" }, 1087a0a89d2SRobert Watson { BSM_ERANGE, ERANGE, "Result too large" }, 1097a0a89d2SRobert Watson { BSM_ENOMSG, ENOMSG, "No message of desired type" }, 1107a0a89d2SRobert Watson { BSM_EIDRM, EIDRM, "Identifier removed" }, 1117a0a89d2SRobert Watson { BSM_ECHRNG, 1127a0a89d2SRobert Watson #ifdef ECHRNG 1137a0a89d2SRobert Watson ECHRNG, 1147a0a89d2SRobert Watson #else 1157a0a89d2SRobert Watson ERRNO_NO_LOCAL_MAPPING, 1167a0a89d2SRobert Watson #endif 1177a0a89d2SRobert Watson "Channel number out of range" }, 1187a0a89d2SRobert Watson { BSM_EL2NSYNC, 1197a0a89d2SRobert Watson #ifdef EL2NSYNC 1207a0a89d2SRobert Watson EL2NSYNC, 1217a0a89d2SRobert Watson #else 1227a0a89d2SRobert Watson ERRNO_NO_LOCAL_MAPPING, 1237a0a89d2SRobert Watson #endif 1247a0a89d2SRobert Watson "Level 2 not synchronized" }, 1257a0a89d2SRobert Watson { BSM_EL3HLT, 1267a0a89d2SRobert Watson #ifdef EL3HLT 1277a0a89d2SRobert Watson EL3HLT, 1287a0a89d2SRobert Watson #else 1297a0a89d2SRobert Watson ERRNO_NO_LOCAL_MAPPING, 1307a0a89d2SRobert Watson #endif 1317a0a89d2SRobert Watson "Level 3 halted" }, 1327a0a89d2SRobert Watson { BSM_EL3RST, 1337a0a89d2SRobert Watson #ifdef EL3RST 1347a0a89d2SRobert Watson EL3RST, 1357a0a89d2SRobert Watson #else 1367a0a89d2SRobert Watson ERRNO_NO_LOCAL_MAPPING, 1377a0a89d2SRobert Watson #endif 1387a0a89d2SRobert Watson "Level 3 reset" }, 1397a0a89d2SRobert Watson { BSM_ELNRNG, 1407a0a89d2SRobert Watson #ifdef ELNRNG 1417a0a89d2SRobert Watson ELNRNG, 1427a0a89d2SRobert Watson #else 1437a0a89d2SRobert Watson ERRNO_NO_LOCAL_MAPPING, 1447a0a89d2SRobert Watson #endif 1457a0a89d2SRobert Watson "Link number out of range" }, 1467a0a89d2SRobert Watson { BSM_EUNATCH, 1477a0a89d2SRobert Watson #ifdef EUNATCH 1487a0a89d2SRobert Watson EUNATCH, 1497a0a89d2SRobert Watson #else 1507a0a89d2SRobert Watson ERRNO_NO_LOCAL_MAPPING, 1517a0a89d2SRobert Watson #endif 1527a0a89d2SRobert Watson "Protocol driver not attached" }, 1537a0a89d2SRobert Watson { BSM_ENOCSI, 1547a0a89d2SRobert Watson #ifdef ENOCSI 1557a0a89d2SRobert Watson ENOCSI, 1567a0a89d2SRobert Watson #else 1577a0a89d2SRobert Watson ERRNO_NO_LOCAL_MAPPING, 1587a0a89d2SRobert Watson #endif 1597a0a89d2SRobert Watson "No CSI structure available" }, 1607a0a89d2SRobert Watson { BSM_EL2HLT, 1617a0a89d2SRobert Watson #ifdef EL2HLT 1627a0a89d2SRobert Watson EL2HLT, 1637a0a89d2SRobert Watson #else 1647a0a89d2SRobert Watson ERRNO_NO_LOCAL_MAPPING, 1657a0a89d2SRobert Watson #endif 1667a0a89d2SRobert Watson "Level 2 halted" }, 1677a0a89d2SRobert Watson { BSM_EDEADLK, EDEADLK, "Resource deadlock avoided" }, 1687a0a89d2SRobert Watson { BSM_ENOLCK, ENOLCK, "No locks available" }, 1697a0a89d2SRobert Watson { BSM_ECANCELED, ECANCELED, "Operation canceled" }, 1707a0a89d2SRobert Watson { BSM_ENOTSUP, ENOTSUP, "Operation not supported" }, 1717a0a89d2SRobert Watson { BSM_EDQUOT, EDQUOT, "Disc quota exceeded" }, 1727a0a89d2SRobert Watson { BSM_EBADE, 1737a0a89d2SRobert Watson #ifdef EBADE 1747a0a89d2SRobert Watson EBADE, 1757a0a89d2SRobert Watson #else 1767a0a89d2SRobert Watson ERRNO_NO_LOCAL_MAPPING, 1777a0a89d2SRobert Watson #endif 1787a0a89d2SRobert Watson "Invalid exchange" }, 1797a0a89d2SRobert Watson { BSM_EBADR, 1807a0a89d2SRobert Watson #ifdef EBADR 1817a0a89d2SRobert Watson EBADR, 1827a0a89d2SRobert Watson #else 1837a0a89d2SRobert Watson ERRNO_NO_LOCAL_MAPPING, 1847a0a89d2SRobert Watson #endif 1857a0a89d2SRobert Watson "Invalid request descriptor" }, 1867a0a89d2SRobert Watson { BSM_EXFULL, 1877a0a89d2SRobert Watson #ifdef EXFULL 1887a0a89d2SRobert Watson EXFULL, 1897a0a89d2SRobert Watson #else 1907a0a89d2SRobert Watson ERRNO_NO_LOCAL_MAPPING, 1917a0a89d2SRobert Watson #endif 1927a0a89d2SRobert Watson "Exchange full" }, 1937a0a89d2SRobert Watson { BSM_ENOANO, 1947a0a89d2SRobert Watson #ifdef ENOANO 1957a0a89d2SRobert Watson ENOANO, 1967a0a89d2SRobert Watson #else 1977a0a89d2SRobert Watson ERRNO_NO_LOCAL_MAPPING, 1987a0a89d2SRobert Watson #endif 1997a0a89d2SRobert Watson "No anode" }, 2007a0a89d2SRobert Watson { BSM_EBADRQC, 2017a0a89d2SRobert Watson #ifdef EBADRQC 2027a0a89d2SRobert Watson EBADRQC, 2037a0a89d2SRobert Watson #else 2047a0a89d2SRobert Watson ERRNO_NO_LOCAL_MAPPING, 2057a0a89d2SRobert Watson #endif 2067a0a89d2SRobert Watson "Invalid request descriptor" }, 2077a0a89d2SRobert Watson { BSM_EBADSLT, 2087a0a89d2SRobert Watson #ifdef EBADSLT 2097a0a89d2SRobert Watson EBADSLT, 2107a0a89d2SRobert Watson #else 2117a0a89d2SRobert Watson ERRNO_NO_LOCAL_MAPPING, 2127a0a89d2SRobert Watson #endif 2137a0a89d2SRobert Watson "Invalid slot" }, 2147a0a89d2SRobert Watson { BSM_EDEADLOCK, 2157a0a89d2SRobert Watson #ifdef EDEADLOCK 2167a0a89d2SRobert Watson EDEADLOCK, 2177a0a89d2SRobert Watson #else 2187a0a89d2SRobert Watson ERRNO_NO_LOCAL_MAPPING, 2197a0a89d2SRobert Watson #endif 2207a0a89d2SRobert Watson "Resource deadlock avoided" }, 2217a0a89d2SRobert Watson { BSM_EBFONT, 2227a0a89d2SRobert Watson #ifdef EBFONT 2237a0a89d2SRobert Watson EBFONT, 2247a0a89d2SRobert Watson #else 2257a0a89d2SRobert Watson ERRNO_NO_LOCAL_MAPPING, 2267a0a89d2SRobert Watson #endif 2277a0a89d2SRobert Watson "Bad font file format" }, 2287a0a89d2SRobert Watson { BSM_EOWNERDEAD, 2297a0a89d2SRobert Watson #ifdef EOWNERDEAD 2307a0a89d2SRobert Watson EOWNERDEAD, 2317a0a89d2SRobert Watson #else 2327a0a89d2SRobert Watson ERRNO_NO_LOCAL_MAPPING, 2337a0a89d2SRobert Watson #endif 2347a0a89d2SRobert Watson "Process died with the lock" }, 2357a0a89d2SRobert Watson { BSM_ENOTRECOVERABLE, 2367a0a89d2SRobert Watson #ifdef ENOTRECOVERABLE 2377a0a89d2SRobert Watson ENOTRECOVERABLE, 2387a0a89d2SRobert Watson #else 2397a0a89d2SRobert Watson ERRNO_NO_LOCAL_MAPPING, 2407a0a89d2SRobert Watson #endif 2417a0a89d2SRobert Watson "Lock is not recoverable" }, 2427a0a89d2SRobert Watson { BSM_ENOSTR, 2437a0a89d2SRobert Watson #ifdef ENOSTR 2447a0a89d2SRobert Watson ENOSTR, 2457a0a89d2SRobert Watson #else 2467a0a89d2SRobert Watson ERRNO_NO_LOCAL_MAPPING, 2477a0a89d2SRobert Watson #endif 2487a0a89d2SRobert Watson "Device not a stream" }, 2497a0a89d2SRobert Watson { BSM_ENONET, 2507a0a89d2SRobert Watson #ifdef ENONET 2517a0a89d2SRobert Watson ENONET, 2527a0a89d2SRobert Watson #else 2537a0a89d2SRobert Watson ERRNO_NO_LOCAL_MAPPING, 2547a0a89d2SRobert Watson #endif 2557a0a89d2SRobert Watson "Machine is not on the network" }, 2567a0a89d2SRobert Watson { BSM_ENOPKG, 2577a0a89d2SRobert Watson #ifdef ENOPKG 2587a0a89d2SRobert Watson ENOPKG, 2597a0a89d2SRobert Watson #else 2607a0a89d2SRobert Watson ERRNO_NO_LOCAL_MAPPING, 2617a0a89d2SRobert Watson #endif 2627a0a89d2SRobert Watson "Package not installed" }, 2637a0a89d2SRobert Watson { BSM_EREMOTE, EREMOTE, "Too many levels of remote in path" }, 2647a0a89d2SRobert Watson { BSM_ENOLINK, 2657a0a89d2SRobert Watson #ifdef ENOLINK 2667a0a89d2SRobert Watson ENOLINK, 2677a0a89d2SRobert Watson #else 2687a0a89d2SRobert Watson ERRNO_NO_LOCAL_MAPPING, 2697a0a89d2SRobert Watson #endif 2707a0a89d2SRobert Watson "Link has been severed" }, 2717a0a89d2SRobert Watson { BSM_EADV, 2727a0a89d2SRobert Watson #ifdef EADV 2737a0a89d2SRobert Watson EADV, 2747a0a89d2SRobert Watson #else 2757a0a89d2SRobert Watson ERRNO_NO_LOCAL_MAPPING, 2767a0a89d2SRobert Watson #endif 2777a0a89d2SRobert Watson "Advertise error" }, 2787a0a89d2SRobert Watson { BSM_ESRMNT, 2797a0a89d2SRobert Watson #ifdef ESRMNT 2807a0a89d2SRobert Watson ESRMNT, 2817a0a89d2SRobert Watson #else 2827a0a89d2SRobert Watson ERRNO_NO_LOCAL_MAPPING, 2837a0a89d2SRobert Watson #endif 2847a0a89d2SRobert Watson "srmount error" }, 2857a0a89d2SRobert Watson { BSM_ECOMM, 2867a0a89d2SRobert Watson #ifdef ECOMM 2877a0a89d2SRobert Watson ECOMM, 2887a0a89d2SRobert Watson #else 2897a0a89d2SRobert Watson ERRNO_NO_LOCAL_MAPPING, 2907a0a89d2SRobert Watson #endif 2917a0a89d2SRobert Watson "Communication error on send" }, 2927a0a89d2SRobert Watson { BSM_EPROTO, 2937a0a89d2SRobert Watson #ifdef EPROTO 2947a0a89d2SRobert Watson EPROTO, 2957a0a89d2SRobert Watson #else 2967a0a89d2SRobert Watson ERRNO_NO_LOCAL_MAPPING, 2977a0a89d2SRobert Watson #endif 2987a0a89d2SRobert Watson "Protocol error" }, 2997a0a89d2SRobert Watson { BSM_ELOCKUNMAPPED, 3007a0a89d2SRobert Watson #ifdef ELOCKUNMAPPED 3017a0a89d2SRobert Watson ELOCKUNMAPPED, 3027a0a89d2SRobert Watson #else 3037a0a89d2SRobert Watson ERRNO_NO_LOCAL_MAPPING, 3047a0a89d2SRobert Watson #endif 3057a0a89d2SRobert Watson "Locked lock was unmapped" }, 3067a0a89d2SRobert Watson { BSM_ENOTACTIVE, 3077a0a89d2SRobert Watson #ifdef ENOTACTIVE 3087a0a89d2SRobert Watson ENOTACTIVE, 3097a0a89d2SRobert Watson #else 3107a0a89d2SRobert Watson ERRNO_NO_LOCAL_MAPPING, 3117a0a89d2SRobert Watson #endif 3127a0a89d2SRobert Watson "Facility is not active" }, 3137a0a89d2SRobert Watson { BSM_EMULTIHOP, 3147a0a89d2SRobert Watson #ifdef EMULTIHOP 3157a0a89d2SRobert Watson EMULTIHOP, 3167a0a89d2SRobert Watson #else 3177a0a89d2SRobert Watson ERRNO_NO_LOCAL_MAPPING, 3187a0a89d2SRobert Watson #endif 3197a0a89d2SRobert Watson "Multihop attempted" }, 3207a0a89d2SRobert Watson { BSM_EBADMSG, 3217a0a89d2SRobert Watson #ifdef EBADMSG 3227a0a89d2SRobert Watson EBADMSG, 3237a0a89d2SRobert Watson #else 3247a0a89d2SRobert Watson ERRNO_NO_LOCAL_MAPPING, 3257a0a89d2SRobert Watson #endif 3267a0a89d2SRobert Watson "Bad message" }, 3277a0a89d2SRobert Watson { BSM_ENAMETOOLONG, ENAMETOOLONG, "File name too long" }, 3287a0a89d2SRobert Watson { BSM_EOVERFLOW, EOVERFLOW, "Value too large to be stored in data type" }, 3297a0a89d2SRobert Watson { BSM_ENOTUNIQ, 3307a0a89d2SRobert Watson #ifdef ENOTUNIQ 3317a0a89d2SRobert Watson ENOTUNIQ, 3327a0a89d2SRobert Watson #else 3337a0a89d2SRobert Watson ERRNO_NO_LOCAL_MAPPING, 3347a0a89d2SRobert Watson #endif 3357a0a89d2SRobert Watson "Given log name not unique" }, 3367a0a89d2SRobert Watson { BSM_EBADFD, 3377a0a89d2SRobert Watson #ifdef EBADFD 3387a0a89d2SRobert Watson EBADFD, 3397a0a89d2SRobert Watson #else 3407a0a89d2SRobert Watson ERRNO_NO_LOCAL_MAPPING, 3417a0a89d2SRobert Watson #endif 3427a0a89d2SRobert Watson "Given f.d. invalid for this operation" }, 3437a0a89d2SRobert Watson { BSM_EREMCHG, 3447a0a89d2SRobert Watson #ifdef EREMCHG 3457a0a89d2SRobert Watson EREMCHG, 3467a0a89d2SRobert Watson #else 3477a0a89d2SRobert Watson ERRNO_NO_LOCAL_MAPPING, 3487a0a89d2SRobert Watson #endif 3497a0a89d2SRobert Watson "Remote address changed" }, 3507a0a89d2SRobert Watson { BSM_ELIBACC, 3517a0a89d2SRobert Watson #ifdef ELIBACC 3527a0a89d2SRobert Watson ELIBACC, 3537a0a89d2SRobert Watson #else 3547a0a89d2SRobert Watson ERRNO_NO_LOCAL_MAPPING, 3557a0a89d2SRobert Watson #endif 3567a0a89d2SRobert Watson "Can't access a needed shared lib" }, 3577a0a89d2SRobert Watson { BSM_ELIBBAD, 3587a0a89d2SRobert Watson #ifdef ELIBBAD 3597a0a89d2SRobert Watson ELIBBAD, 3607a0a89d2SRobert Watson #else 3617a0a89d2SRobert Watson ERRNO_NO_LOCAL_MAPPING, 3627a0a89d2SRobert Watson #endif 3637a0a89d2SRobert Watson "Accessing a corrupted shared lib" }, 3647a0a89d2SRobert Watson { BSM_ELIBSCN, 3657a0a89d2SRobert Watson #ifdef ELIBSCN 3667a0a89d2SRobert Watson ELIBSCN, 3677a0a89d2SRobert Watson #else 3687a0a89d2SRobert Watson ERRNO_NO_LOCAL_MAPPING, 3697a0a89d2SRobert Watson #endif 3707a0a89d2SRobert Watson ".lib section in a.out corrupted" }, 3717a0a89d2SRobert Watson { BSM_ELIBMAX, 3727a0a89d2SRobert Watson #ifdef ELIBMAX 3737a0a89d2SRobert Watson ELIBMAX, 3747a0a89d2SRobert Watson #else 3757a0a89d2SRobert Watson ERRNO_NO_LOCAL_MAPPING, 3767a0a89d2SRobert Watson #endif 3777a0a89d2SRobert Watson "Attempting to link in too many libs" }, 3787a0a89d2SRobert Watson { BSM_ELIBEXEC, 3797a0a89d2SRobert Watson #ifdef ELIBEXEC 3807a0a89d2SRobert Watson ELIBEXEC, 3817a0a89d2SRobert Watson #else 3827a0a89d2SRobert Watson ERRNO_NO_LOCAL_MAPPING, 3837a0a89d2SRobert Watson #endif 3847a0a89d2SRobert Watson "Attempting to exec a shared library" }, 3857a0a89d2SRobert Watson { BSM_EILSEQ, EILSEQ, "Illegal byte sequence" }, 3867a0a89d2SRobert Watson { BSM_ENOSYS, ENOSYS, "Function not implemented" }, 3877a0a89d2SRobert Watson { BSM_ELOOP, ELOOP, "Too many levels of symbolic links" }, 3887a0a89d2SRobert Watson { BSM_ERESTART, 3897a0a89d2SRobert Watson #ifdef ERESTART 3907a0a89d2SRobert Watson ERESTART, 3917a0a89d2SRobert Watson #else 3927a0a89d2SRobert Watson ERRNO_NO_LOCAL_MAPPING, 3937a0a89d2SRobert Watson #endif 3947a0a89d2SRobert Watson "Restart syscall" }, 3957a0a89d2SRobert Watson { BSM_ESTRPIPE, 3967a0a89d2SRobert Watson #ifdef ESTRPIPE 3977a0a89d2SRobert Watson ESTRPIPE, 3987a0a89d2SRobert Watson #else 3997a0a89d2SRobert Watson ERRNO_NO_LOCAL_MAPPING, 4007a0a89d2SRobert Watson #endif 4017a0a89d2SRobert Watson "If pipe/FIFO, don't sleep in stream head" }, 4027a0a89d2SRobert Watson { BSM_ENOTEMPTY, ENOTEMPTY, "Directory not empty" }, 4037a0a89d2SRobert Watson { BSM_EUSERS, EUSERS, "Too many users" }, 4047a0a89d2SRobert Watson { BSM_ENOTSOCK, ENOTSOCK, "Socket operation on non-socket" }, 4057a0a89d2SRobert Watson { BSM_EDESTADDRREQ, EDESTADDRREQ, "Destination address required" }, 4067a0a89d2SRobert Watson { BSM_EMSGSIZE, EMSGSIZE, "Message too long" }, 4077a0a89d2SRobert Watson { BSM_EPROTOTYPE, EPROTOTYPE, "Protocol wrong type for socket" }, 4087a0a89d2SRobert Watson { BSM_ENOPROTOOPT, ENOPROTOOPT, "Protocol not available" }, 4097a0a89d2SRobert Watson { BSM_EPROTONOSUPPORT, EPROTONOSUPPORT, "Protocol not supported" }, 4107a0a89d2SRobert Watson { BSM_ESOCKTNOSUPPORT, ESOCKTNOSUPPORT, "Socket type not supported" }, 4117a0a89d2SRobert Watson { BSM_EOPNOTSUPP, EOPNOTSUPP, "Operation not supported" }, 4127a0a89d2SRobert Watson { BSM_EPFNOSUPPORT, EPFNOSUPPORT, "Protocol family not supported" }, 4137a0a89d2SRobert Watson { BSM_EAFNOSUPPORT, EAFNOSUPPORT, "Address family not supported by protocol family" }, 4147a0a89d2SRobert Watson { BSM_EADDRINUSE, EADDRINUSE, "Address already in use" }, 4157a0a89d2SRobert Watson { BSM_EADDRNOTAVAIL, EADDRNOTAVAIL, "Can't assign requested address" }, 4167a0a89d2SRobert Watson { BSM_ENETDOWN, ENETDOWN, "Network is down" }, 4177a0a89d2SRobert Watson { BSM_ENETRESET, ENETRESET, "Network dropped connection on reset" }, 4187a0a89d2SRobert Watson { BSM_ECONNABORTED, ECONNABORTED, "Software caused connection abort" }, 4197a0a89d2SRobert Watson { BSM_ECONNRESET, ECONNRESET, "Connection reset by peer" }, 4207a0a89d2SRobert Watson { BSM_ENOBUFS, ENOBUFS, "No buffer space available" }, 4217a0a89d2SRobert Watson { BSM_EISCONN, EISCONN, "Socket is already connected" }, 4227a0a89d2SRobert Watson { BSM_ENOTCONN, ENOTCONN, "Socket is not connected" }, 4237a0a89d2SRobert Watson { BSM_ESHUTDOWN, ESHUTDOWN, "Can't send after socket shutdown" }, 4247a0a89d2SRobert Watson { BSM_ETOOMANYREFS, ETOOMANYREFS, "Too many references: can't splice" }, 4257a0a89d2SRobert Watson { BSM_ETIMEDOUT, ETIMEDOUT, "Operation timed out" }, 4267a0a89d2SRobert Watson { BSM_ECONNREFUSED, ECONNREFUSED, "Connection refused" }, 4277a0a89d2SRobert Watson { BSM_EHOSTDOWN, EHOSTDOWN, "Host is down" }, 4287a0a89d2SRobert Watson { BSM_EHOSTUNREACH, EHOSTUNREACH, "No route to host" }, 4297a0a89d2SRobert Watson { BSM_EALREADY, EALREADY, "Operation already in progress" }, 4307a0a89d2SRobert Watson { BSM_EINPROGRESS, EINPROGRESS, "Operation now in progress" }, 4317a0a89d2SRobert Watson { BSM_ESTALE, ESTALE, "Stale NFS file handle" }, 4327a0a89d2SRobert Watson { BSM_EPWROFF, 4337a0a89d2SRobert Watson #ifdef EPWROFF 4347a0a89d2SRobert Watson EPWROFF, 4357a0a89d2SRobert Watson #else 4367a0a89d2SRobert Watson ERRNO_NO_LOCAL_MAPPING, 4377a0a89d2SRobert Watson #endif 4387a0a89d2SRobert Watson "Device power is off" }, 4397a0a89d2SRobert Watson { BSM_EDEVERR, 4407a0a89d2SRobert Watson #ifdef EDEVERR 4417a0a89d2SRobert Watson EDEVERR, 4427a0a89d2SRobert Watson #else 4437a0a89d2SRobert Watson ERRNO_NO_LOCAL_MAPPING, 4447a0a89d2SRobert Watson #endif 4457a0a89d2SRobert Watson "Device error" }, 4467a0a89d2SRobert Watson { BSM_EBADEXEC, 4477a0a89d2SRobert Watson #ifdef EBADEXEC 4487a0a89d2SRobert Watson EBADEXEC, 4497a0a89d2SRobert Watson #else 4507a0a89d2SRobert Watson ERRNO_NO_LOCAL_MAPPING, 4517a0a89d2SRobert Watson #endif 4527a0a89d2SRobert Watson "Bad executable" }, 4537a0a89d2SRobert Watson { BSM_EBADARCH, 4547a0a89d2SRobert Watson #ifdef EBADARCH 4557a0a89d2SRobert Watson EBADARCH, 4567a0a89d2SRobert Watson #else 4577a0a89d2SRobert Watson ERRNO_NO_LOCAL_MAPPING, 4587a0a89d2SRobert Watson #endif 4597a0a89d2SRobert Watson "Bad CPU type in executable" }, 4607a0a89d2SRobert Watson { BSM_ESHLIBVERS, 4617a0a89d2SRobert Watson #ifdef ESHLIBVERS 4627a0a89d2SRobert Watson ESHLIBVERS, 4637a0a89d2SRobert Watson #else 4647a0a89d2SRobert Watson ERRNO_NO_LOCAL_MAPPING, 4657a0a89d2SRobert Watson #endif 4667a0a89d2SRobert Watson "Shared library version mismatch" }, 4677a0a89d2SRobert Watson { BSM_EBADMACHO, 4687a0a89d2SRobert Watson #ifdef EBADMACHO 4697a0a89d2SRobert Watson EBADMACHO, 4707a0a89d2SRobert Watson #else 4717a0a89d2SRobert Watson ERRNO_NO_LOCAL_MAPPING, 4727a0a89d2SRobert Watson #endif 4737a0a89d2SRobert Watson "Malfored Macho file" }, 4747a0a89d2SRobert Watson { BSM_EPOLICY, 4757a0a89d2SRobert Watson #ifdef EPOLICY 4767a0a89d2SRobert Watson EPOLICY, 4777a0a89d2SRobert Watson #else 4787a0a89d2SRobert Watson ERRNO_NO_LOCAL_MAPPING, 4797a0a89d2SRobert Watson #endif 4807a0a89d2SRobert Watson "Operation failed by policy" }, 4817a0a89d2SRobert Watson { BSM_EDOTDOT, 4827a0a89d2SRobert Watson #ifdef EDOTDOT 4837a0a89d2SRobert Watson EDOTDOT, 4847a0a89d2SRobert Watson #else 4857a0a89d2SRobert Watson ERRNO_NO_LOCAL_MAPPING, 4867a0a89d2SRobert Watson #endif 4877a0a89d2SRobert Watson "RFS specific error" }, 4887a0a89d2SRobert Watson { BSM_EUCLEAN, 4897a0a89d2SRobert Watson #ifdef EUCLEAN 4907a0a89d2SRobert Watson EUCLEAN, 4917a0a89d2SRobert Watson #else 4927a0a89d2SRobert Watson ERRNO_NO_LOCAL_MAPPING, 4937a0a89d2SRobert Watson #endif 4947a0a89d2SRobert Watson "Structure needs cleaning" }, 4957a0a89d2SRobert Watson { BSM_ENOTNAM, 4967a0a89d2SRobert Watson #ifdef ENOTNAM 4977a0a89d2SRobert Watson ENOTNAM, 4987a0a89d2SRobert Watson #else 4997a0a89d2SRobert Watson ERRNO_NO_LOCAL_MAPPING, 5007a0a89d2SRobert Watson #endif 5017a0a89d2SRobert Watson "Not a XENIX named type file" }, 5027a0a89d2SRobert Watson { BSM_ENAVAIL, 5037a0a89d2SRobert Watson #ifdef ENAVAIL 5047a0a89d2SRobert Watson ENAVAIL, 5057a0a89d2SRobert Watson #else 5067a0a89d2SRobert Watson ERRNO_NO_LOCAL_MAPPING, 5077a0a89d2SRobert Watson #endif 5087a0a89d2SRobert Watson "No XENIX semaphores available" }, 5097a0a89d2SRobert Watson { BSM_EISNAM, 5107a0a89d2SRobert Watson #ifdef EISNAM 5117a0a89d2SRobert Watson EISNAM, 5127a0a89d2SRobert Watson #else 5137a0a89d2SRobert Watson ERRNO_NO_LOCAL_MAPPING, 5147a0a89d2SRobert Watson #endif 5157a0a89d2SRobert Watson "Is a named type file" }, 5167a0a89d2SRobert Watson { BSM_EREMOTEIO, 5177a0a89d2SRobert Watson #ifdef EREMOTEIO 5187a0a89d2SRobert Watson EREMOTEIO, 5197a0a89d2SRobert Watson #else 5207a0a89d2SRobert Watson ERRNO_NO_LOCAL_MAPPING, 5217a0a89d2SRobert Watson #endif 5227a0a89d2SRobert Watson "Remote I/O error" }, 5237a0a89d2SRobert Watson { BSM_ENOMEDIUM, 5247a0a89d2SRobert Watson #ifdef ENOMEDIUM 5257a0a89d2SRobert Watson ENOMEDIUM, 5267a0a89d2SRobert Watson #else 5277a0a89d2SRobert Watson ERRNO_NO_LOCAL_MAPPING, 5287a0a89d2SRobert Watson #endif 5297a0a89d2SRobert Watson "No medium found" }, 5307a0a89d2SRobert Watson { BSM_EMEDIUMTYPE, 5317a0a89d2SRobert Watson #ifdef EMEDIUMTYPE 5327a0a89d2SRobert Watson EMEDIUMTYPE, 5337a0a89d2SRobert Watson #else 5347a0a89d2SRobert Watson ERRNO_NO_LOCAL_MAPPING, 5357a0a89d2SRobert Watson #endif 5367a0a89d2SRobert Watson "Wrong medium type" }, 5377a0a89d2SRobert Watson { BSM_ENOKEY, 5387a0a89d2SRobert Watson #ifdef ENOKEY 5397a0a89d2SRobert Watson ENOKEY, 5407a0a89d2SRobert Watson #else 5417a0a89d2SRobert Watson ERRNO_NO_LOCAL_MAPPING, 5427a0a89d2SRobert Watson #endif 5437a0a89d2SRobert Watson "Required key not available" }, 5447a0a89d2SRobert Watson { BSM_EKEYEXPIRED, 5457a0a89d2SRobert Watson #ifdef EKEEXPIRED 5467a0a89d2SRobert Watson EKEYEXPIRED, 5477a0a89d2SRobert Watson #else 5487a0a89d2SRobert Watson ERRNO_NO_LOCAL_MAPPING, 5497a0a89d2SRobert Watson #endif 5507a0a89d2SRobert Watson "Key has expired" }, 5517a0a89d2SRobert Watson { BSM_EKEYREVOKED, 5527a0a89d2SRobert Watson #ifdef EKEYREVOKED 5537a0a89d2SRobert Watson EKEYREVOKED, 5547a0a89d2SRobert Watson #else 5557a0a89d2SRobert Watson ERRNO_NO_LOCAL_MAPPING, 5567a0a89d2SRobert Watson #endif 5577a0a89d2SRobert Watson "Key has been revoked" }, 5587a0a89d2SRobert Watson { BSM_EKEYREJECTED, 5597a0a89d2SRobert Watson #ifdef EKEREJECTED 5607a0a89d2SRobert Watson EKEYREJECTED, 5617a0a89d2SRobert Watson #else 5627a0a89d2SRobert Watson ERRNO_NO_LOCAL_MAPPING, 5637a0a89d2SRobert Watson #endif 5647a0a89d2SRobert Watson "Key was rejected by service" }, 5657a0a89d2SRobert Watson }; 5667a0a89d2SRobert Watson static const int bsm_errors_count = sizeof(bsm_errors) / sizeof(bsm_errors[0]); 5677a0a89d2SRobert Watson 5687a0a89d2SRobert Watson static const struct bsm_errors * 5697a0a89d2SRobert Watson au_bsm_error_lookup_errno(int error) 5707a0a89d2SRobert Watson { 5717a0a89d2SRobert Watson int i; 5727a0a89d2SRobert Watson 5737a0a89d2SRobert Watson if (error == ERRNO_NO_LOCAL_MAPPING) 5747a0a89d2SRobert Watson return (NULL); 5757a0a89d2SRobert Watson for (i = 0; i < bsm_errors_count; i++) { 5767a0a89d2SRobert Watson if (bsm_errors[i].be_os_error == error) 5777a0a89d2SRobert Watson return (&bsm_errors[i]); 5787a0a89d2SRobert Watson } 5797a0a89d2SRobert Watson return (NULL); 5807a0a89d2SRobert Watson } 5817a0a89d2SRobert Watson 5827a0a89d2SRobert Watson static const struct bsm_errors * 5837a0a89d2SRobert Watson au_bsm_error_lookup_bsm(u_char bsm_error) 5847a0a89d2SRobert Watson { 5857a0a89d2SRobert Watson int i; 5867a0a89d2SRobert Watson 5877a0a89d2SRobert Watson for (i = 0; i < bsm_errors_count; i++) { 5887a0a89d2SRobert Watson if (bsm_errors[i].be_bsm_error == bsm_error) 5897a0a89d2SRobert Watson return (&bsm_errors[i]); 5907a0a89d2SRobert Watson } 5917a0a89d2SRobert Watson return (NULL); 5927a0a89d2SRobert Watson } 5937a0a89d2SRobert Watson 5947a0a89d2SRobert Watson /* 5957a0a89d2SRobert Watson * Converstion from a BSM error to a local error number may fail if either 5967a0a89d2SRobert Watson * OpenBSM doesn't recognize the error on the wire, or because there is no 5977a0a89d2SRobert Watson * appropriate local mapping. However, we don't allow conversion to BSM to 5987a0a89d2SRobert Watson * fail, we just convert to BSM_UKNOWNERR. 5997a0a89d2SRobert Watson */ 6007a0a89d2SRobert Watson int 6017a0a89d2SRobert Watson au_bsm_to_errno(u_char bsm_error, int *errorp) 6027a0a89d2SRobert Watson { 6037a0a89d2SRobert Watson const struct bsm_errors *bsme; 6047a0a89d2SRobert Watson 6057a0a89d2SRobert Watson bsme = au_bsm_error_lookup_bsm(bsm_error); 6067a0a89d2SRobert Watson if (bsme == NULL || bsme->be_os_error == ERRNO_NO_LOCAL_MAPPING) 6077a0a89d2SRobert Watson return (-1); 6087a0a89d2SRobert Watson *errorp = bsme->be_os_error; 6097a0a89d2SRobert Watson return (0); 6107a0a89d2SRobert Watson } 6117a0a89d2SRobert Watson 6127a0a89d2SRobert Watson u_char 6137a0a89d2SRobert Watson au_errno_to_bsm(int error) 6147a0a89d2SRobert Watson { 6157a0a89d2SRobert Watson const struct bsm_errors *bsme; 6167a0a89d2SRobert Watson 6177a0a89d2SRobert Watson /* 6187a0a89d2SRobert Watson * We should never be passed this libbsm-internal constant, and 6197a0a89d2SRobert Watson * because it is ambiguous we just return an error. 6207a0a89d2SRobert Watson */ 6217a0a89d2SRobert Watson if (error == ERRNO_NO_LOCAL_MAPPING) 6227a0a89d2SRobert Watson return (BSM_UNKNOWNERR); 6237a0a89d2SRobert Watson bsme = au_bsm_error_lookup_errno(error); 6247a0a89d2SRobert Watson if (bsme == NULL) 6257a0a89d2SRobert Watson return (BSM_UNKNOWNERR); 6267a0a89d2SRobert Watson return (bsme->be_bsm_error); 6277a0a89d2SRobert Watson } 6287a0a89d2SRobert Watson 6297a0a89d2SRobert Watson #if !defined(KERNEL) && !defined(_KERNEL) 6307a0a89d2SRobert Watson const char * 6317a0a89d2SRobert Watson au_strerror(u_char bsm_error) 6327a0a89d2SRobert Watson { 6337a0a89d2SRobert Watson const struct bsm_errors *bsme; 6347a0a89d2SRobert Watson 6357a0a89d2SRobert Watson bsme = au_bsm_error_lookup_bsm(bsm_error); 6367a0a89d2SRobert Watson if (bsme == NULL) 6377a0a89d2SRobert Watson return ("Unrecognized BSM error"); 6387a0a89d2SRobert Watson if (bsme->be_os_error != ERRNO_NO_LOCAL_MAPPING) 6397a0a89d2SRobert Watson return (strerror(bsme->be_os_error)); 6407a0a89d2SRobert Watson return (bsme->be_strerror); 6417a0a89d2SRobert Watson } 6427a0a89d2SRobert Watson #endif 643