140266059SGregory Neil Shapiro /* 2a7ec597cSGregory Neil Shapiro * Copyright (c) 2001, 2003 Sendmail, Inc. and its suppliers. 340266059SGregory Neil Shapiro * All rights reserved. 440266059SGregory Neil Shapiro * Copyright (c) 1983, 1995-1997 Eric P. Allman. All rights reserved. 540266059SGregory Neil Shapiro * Copyright (c) 1988, 1993 640266059SGregory Neil Shapiro * The Regents of the University of California. All rights reserved. 740266059SGregory Neil Shapiro * 840266059SGregory Neil Shapiro * By using this file, you agree to the terms and conditions set 940266059SGregory Neil Shapiro * forth in the LICENSE file which can be found at the top level of 1040266059SGregory Neil Shapiro * the sendmail distribution. 1140266059SGregory Neil Shapiro */ 1240266059SGregory Neil Shapiro 1340266059SGregory Neil Shapiro #include <sm/gen.h> 14a7ec597cSGregory Neil Shapiro SM_RCSID("@(#)$Id: errstring.c,v 1.12.2.4 2003/06/24 17:16:09 ca Exp $") 1540266059SGregory Neil Shapiro 1640266059SGregory Neil Shapiro #include <errno.h> 1740266059SGregory Neil Shapiro #include <stdio.h> /* sys_errlist, on some platforms */ 1840266059SGregory Neil Shapiro 1940266059SGregory Neil Shapiro #include <sm/io.h> /* sm_snprintf */ 2040266059SGregory Neil Shapiro #include <sm/string.h> 2140266059SGregory Neil Shapiro #include <sm/errstring.h> 2240266059SGregory Neil Shapiro 2340266059SGregory Neil Shapiro #if NAMED_BIND 2440266059SGregory Neil Shapiro # include <netdb.h> 2540266059SGregory Neil Shapiro #endif 2640266059SGregory Neil Shapiro 2740266059SGregory Neil Shapiro #if LDAPMAP 2840266059SGregory Neil Shapiro # include <lber.h> 2940266059SGregory Neil Shapiro # include <ldap.h> /* for LDAP error codes */ 3040266059SGregory Neil Shapiro #endif /* LDAPMAP */ 3140266059SGregory Neil Shapiro 3240266059SGregory Neil Shapiro /* 3340266059SGregory Neil Shapiro ** Notice: this file is used by libmilter. Please try to avoid 3440266059SGregory Neil Shapiro ** using libsm specific functions. 3540266059SGregory Neil Shapiro */ 3640266059SGregory Neil Shapiro 3740266059SGregory Neil Shapiro /* 3840266059SGregory Neil Shapiro ** SM_ERRSTRING -- return string description of error code 3940266059SGregory Neil Shapiro ** 4040266059SGregory Neil Shapiro ** Parameters: 4140266059SGregory Neil Shapiro ** errnum -- the error number to translate 4240266059SGregory Neil Shapiro ** 4340266059SGregory Neil Shapiro ** Returns: 4440266059SGregory Neil Shapiro ** A string description of errnum. 45a7ec597cSGregory Neil Shapiro ** 46a7ec597cSGregory Neil Shapiro ** Note: this may point to a local (static) buffer. 4740266059SGregory Neil Shapiro */ 4840266059SGregory Neil Shapiro 4940266059SGregory Neil Shapiro const char * 5040266059SGregory Neil Shapiro sm_errstring(errnum) 5140266059SGregory Neil Shapiro int errnum; 5240266059SGregory Neil Shapiro { 5340266059SGregory Neil Shapiro char *ret; 5440266059SGregory Neil Shapiro 55a7ec597cSGregory Neil Shapiro 5640266059SGregory Neil Shapiro switch (errnum) 5740266059SGregory Neil Shapiro { 5840266059SGregory Neil Shapiro case EPERM: 5940266059SGregory Neil Shapiro /* SunOS gives "Not owner" -- this is the POSIX message */ 6040266059SGregory Neil Shapiro return "Operation not permitted"; 6140266059SGregory Neil Shapiro 6240266059SGregory Neil Shapiro /* 6340266059SGregory Neil Shapiro ** Error messages used internally in sendmail. 6440266059SGregory Neil Shapiro */ 6540266059SGregory Neil Shapiro 6640266059SGregory Neil Shapiro case E_SM_OPENTIMEOUT: 6740266059SGregory Neil Shapiro return "Timeout on file open"; 6840266059SGregory Neil Shapiro 6940266059SGregory Neil Shapiro case E_SM_NOSLINK: 7040266059SGregory Neil Shapiro return "Symbolic links not allowed"; 7140266059SGregory Neil Shapiro 7240266059SGregory Neil Shapiro case E_SM_NOHLINK: 7340266059SGregory Neil Shapiro return "Hard links not allowed"; 7440266059SGregory Neil Shapiro 7540266059SGregory Neil Shapiro case E_SM_REGONLY: 7640266059SGregory Neil Shapiro return "Regular files only"; 7740266059SGregory Neil Shapiro 7840266059SGregory Neil Shapiro case E_SM_ISEXEC: 7940266059SGregory Neil Shapiro return "Executable files not allowed"; 8040266059SGregory Neil Shapiro 8140266059SGregory Neil Shapiro case E_SM_WWDIR: 8240266059SGregory Neil Shapiro return "World writable directory"; 8340266059SGregory Neil Shapiro 8440266059SGregory Neil Shapiro case E_SM_GWDIR: 8540266059SGregory Neil Shapiro return "Group writable directory"; 8640266059SGregory Neil Shapiro 8740266059SGregory Neil Shapiro case E_SM_FILECHANGE: 8840266059SGregory Neil Shapiro return "File changed after open"; 8940266059SGregory Neil Shapiro 9040266059SGregory Neil Shapiro case E_SM_WWFILE: 9140266059SGregory Neil Shapiro return "World writable file"; 9240266059SGregory Neil Shapiro 9340266059SGregory Neil Shapiro case E_SM_GWFILE: 9440266059SGregory Neil Shapiro return "Group writable file"; 9540266059SGregory Neil Shapiro 9640266059SGregory Neil Shapiro case E_SM_GRFILE: 9740266059SGregory Neil Shapiro return "Group readable file"; 9840266059SGregory Neil Shapiro 9940266059SGregory Neil Shapiro case E_SM_WRFILE: 10040266059SGregory Neil Shapiro return "World readable file"; 10140266059SGregory Neil Shapiro 10240266059SGregory Neil Shapiro /* 10340266059SGregory Neil Shapiro ** DNS error messages. 10440266059SGregory Neil Shapiro */ 10540266059SGregory Neil Shapiro 10640266059SGregory Neil Shapiro #if NAMED_BIND 10740266059SGregory Neil Shapiro case HOST_NOT_FOUND + E_DNSBASE: 10840266059SGregory Neil Shapiro return "Name server: host not found"; 10940266059SGregory Neil Shapiro 11040266059SGregory Neil Shapiro case TRY_AGAIN + E_DNSBASE: 11140266059SGregory Neil Shapiro return "Name server: host name lookup failure"; 11240266059SGregory Neil Shapiro 11340266059SGregory Neil Shapiro case NO_RECOVERY + E_DNSBASE: 11440266059SGregory Neil Shapiro return "Name server: non-recoverable error"; 11540266059SGregory Neil Shapiro 11640266059SGregory Neil Shapiro case NO_DATA + E_DNSBASE: 11740266059SGregory Neil Shapiro return "Name server: no data known"; 11840266059SGregory Neil Shapiro #endif /* NAMED_BIND */ 11940266059SGregory Neil Shapiro 12040266059SGregory Neil Shapiro /* 12140266059SGregory Neil Shapiro ** libsmdb error messages. 12240266059SGregory Neil Shapiro */ 12340266059SGregory Neil Shapiro 12440266059SGregory Neil Shapiro case SMDBE_MALLOC: 12540266059SGregory Neil Shapiro return "Memory allocation failed"; 12640266059SGregory Neil Shapiro 12740266059SGregory Neil Shapiro case SMDBE_GDBM_IS_BAD: 12840266059SGregory Neil Shapiro return "GDBM is not supported"; 12940266059SGregory Neil Shapiro 13040266059SGregory Neil Shapiro case SMDBE_UNSUPPORTED: 13140266059SGregory Neil Shapiro return "Unsupported action"; 13240266059SGregory Neil Shapiro 13340266059SGregory Neil Shapiro case SMDBE_DUPLICATE: 13440266059SGregory Neil Shapiro return "Key already exists"; 13540266059SGregory Neil Shapiro 13640266059SGregory Neil Shapiro case SMDBE_BAD_OPEN: 13740266059SGregory Neil Shapiro return "Database open failed"; 13840266059SGregory Neil Shapiro 13940266059SGregory Neil Shapiro case SMDBE_NOT_FOUND: 14040266059SGregory Neil Shapiro return "Key not found"; 14140266059SGregory Neil Shapiro 14240266059SGregory Neil Shapiro case SMDBE_UNKNOWN_DB_TYPE: 14340266059SGregory Neil Shapiro return "Unknown database type"; 14440266059SGregory Neil Shapiro 14540266059SGregory Neil Shapiro case SMDBE_UNSUPPORTED_DB_TYPE: 14640266059SGregory Neil Shapiro return "Support for database type not compiled into this program"; 14740266059SGregory Neil Shapiro 14840266059SGregory Neil Shapiro case SMDBE_INCOMPLETE: 14940266059SGregory Neil Shapiro return "DB sync did not finish"; 15040266059SGregory Neil Shapiro 15140266059SGregory Neil Shapiro case SMDBE_KEY_EMPTY: 15240266059SGregory Neil Shapiro return "Key is empty"; 15340266059SGregory Neil Shapiro 15440266059SGregory Neil Shapiro case SMDBE_KEY_EXIST: 15540266059SGregory Neil Shapiro return "Key already exists"; 15640266059SGregory Neil Shapiro 15740266059SGregory Neil Shapiro case SMDBE_LOCK_DEADLOCK: 15840266059SGregory Neil Shapiro return "Locker killed to resolve deadlock"; 15940266059SGregory Neil Shapiro 16040266059SGregory Neil Shapiro case SMDBE_LOCK_NOT_GRANTED: 16140266059SGregory Neil Shapiro return "Lock unavailable"; 16240266059SGregory Neil Shapiro 16340266059SGregory Neil Shapiro case SMDBE_LOCK_NOT_HELD: 16440266059SGregory Neil Shapiro return "Lock not held by locker"; 16540266059SGregory Neil Shapiro 16640266059SGregory Neil Shapiro case SMDBE_RUN_RECOVERY: 16740266059SGregory Neil Shapiro return "Database panic, run recovery"; 16840266059SGregory Neil Shapiro 16940266059SGregory Neil Shapiro case SMDBE_IO_ERROR: 17040266059SGregory Neil Shapiro return "I/O error"; 17140266059SGregory Neil Shapiro 17240266059SGregory Neil Shapiro case SMDBE_READ_ONLY: 17340266059SGregory Neil Shapiro return "Database opened read-only"; 17440266059SGregory Neil Shapiro 17540266059SGregory Neil Shapiro case SMDBE_DB_NAME_TOO_LONG: 17640266059SGregory Neil Shapiro return "Name too long"; 17740266059SGregory Neil Shapiro 17840266059SGregory Neil Shapiro case SMDBE_INVALID_PARAMETER: 17940266059SGregory Neil Shapiro return "Invalid parameter"; 18040266059SGregory Neil Shapiro 18140266059SGregory Neil Shapiro case SMDBE_ONLY_SUPPORTS_ONE_CURSOR: 18240266059SGregory Neil Shapiro return "Only one cursor allowed"; 18340266059SGregory Neil Shapiro 18440266059SGregory Neil Shapiro case SMDBE_NOT_A_VALID_CURSOR: 18540266059SGregory Neil Shapiro return "Invalid cursor"; 18640266059SGregory Neil Shapiro 18740266059SGregory Neil Shapiro case SMDBE_OLD_VERSION: 18840266059SGregory Neil Shapiro return "Berkeley DB file is an old version, recreate it"; 189a7ec597cSGregory Neil Shapiro 190a7ec597cSGregory Neil Shapiro case SMDBE_VERSION_MISMATCH: 191a7ec597cSGregory Neil Shapiro return "Berkeley DB version mismatch between include file and library"; 19240266059SGregory Neil Shapiro } 19340266059SGregory Neil Shapiro 19440266059SGregory Neil Shapiro /* 19540266059SGregory Neil Shapiro ** LDAP error messages. 19640266059SGregory Neil Shapiro */ 19740266059SGregory Neil Shapiro 19840266059SGregory Neil Shapiro #if LDAPMAP 19940266059SGregory Neil Shapiro if (errnum >= E_LDAPBASE) 20040266059SGregory Neil Shapiro return ldap_err2string(errnum - E_LDAPBASE); 20140266059SGregory Neil Shapiro #endif /* LDAPMAP */ 20240266059SGregory Neil Shapiro 20340266059SGregory Neil Shapiro ret = strerror(errnum); 20440266059SGregory Neil Shapiro if (ret == NULL) 20540266059SGregory Neil Shapiro { 20640266059SGregory Neil Shapiro static char buf[30]; 20740266059SGregory Neil Shapiro 20840266059SGregory Neil Shapiro (void) sm_snprintf(buf, sizeof buf, "Error %d", errnum); 20940266059SGregory Neil Shapiro return buf; 21040266059SGregory Neil Shapiro } 21140266059SGregory Neil Shapiro return ret; 21240266059SGregory Neil Shapiro } 213