140266059SGregory Neil Shapiro /* 25dd76dd0SGregory Neil Shapiro * Copyright (c) 2001, 2003 Proofpoint, 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> 144313cc83SGregory Neil Shapiro SM_RCSID("@(#)$Id: errstring.c,v 1.20 2013-11-22 20:51:42 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 */ 30*5b0945b5SGregory Neil Shapiro #endif 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"; 192e92d3f3fSGregory Neil Shapiro 193e92d3f3fSGregory Neil Shapiro #if LDAPMAP 194e92d3f3fSGregory Neil Shapiro 195e92d3f3fSGregory Neil Shapiro /* 196e92d3f3fSGregory Neil Shapiro ** LDAP URL error messages. 197e92d3f3fSGregory Neil Shapiro */ 198e92d3f3fSGregory Neil Shapiro 199e92d3f3fSGregory Neil Shapiro /* OpenLDAP errors */ 200e92d3f3fSGregory Neil Shapiro # ifdef LDAP_URL_ERR_MEM 201e92d3f3fSGregory Neil Shapiro case E_LDAPURLBASE + LDAP_URL_ERR_MEM: 202e92d3f3fSGregory Neil Shapiro return "LDAP URL can't allocate memory space"; 203*5b0945b5SGregory Neil Shapiro # endif 204e92d3f3fSGregory Neil Shapiro 205e92d3f3fSGregory Neil Shapiro # ifdef LDAP_URL_ERR_PARAM 206e92d3f3fSGregory Neil Shapiro case E_LDAPURLBASE + LDAP_URL_ERR_PARAM: 207e92d3f3fSGregory Neil Shapiro return "LDAP URL parameter is bad"; 208*5b0945b5SGregory Neil Shapiro # endif 209e92d3f3fSGregory Neil Shapiro 210e92d3f3fSGregory Neil Shapiro # ifdef LDAP_URL_ERR_BADSCHEME 211e92d3f3fSGregory Neil Shapiro case E_LDAPURLBASE + LDAP_URL_ERR_BADSCHEME: 212e92d3f3fSGregory Neil Shapiro return "LDAP URL doesn't begin with \"ldap[si]://\""; 213*5b0945b5SGregory Neil Shapiro # endif 214e92d3f3fSGregory Neil Shapiro 215e92d3f3fSGregory Neil Shapiro # ifdef LDAP_URL_ERR_BADENCLOSURE 216e92d3f3fSGregory Neil Shapiro case E_LDAPURLBASE + LDAP_URL_ERR_BADENCLOSURE: 217e92d3f3fSGregory Neil Shapiro return "LDAP URL is missing trailing \">\""; 218*5b0945b5SGregory Neil Shapiro # endif 219e92d3f3fSGregory Neil Shapiro 220e92d3f3fSGregory Neil Shapiro # ifdef LDAP_URL_ERR_BADURL 221e92d3f3fSGregory Neil Shapiro case E_LDAPURLBASE + LDAP_URL_ERR_BADURL: 222e92d3f3fSGregory Neil Shapiro return "LDAP URL is bad"; 223*5b0945b5SGregory Neil Shapiro # endif 224e92d3f3fSGregory Neil Shapiro 225e92d3f3fSGregory Neil Shapiro # ifdef LDAP_URL_ERR_BADHOST 226e92d3f3fSGregory Neil Shapiro case E_LDAPURLBASE + LDAP_URL_ERR_BADHOST: 227e92d3f3fSGregory Neil Shapiro return "LDAP URL host port is bad"; 228*5b0945b5SGregory Neil Shapiro # endif 229e92d3f3fSGregory Neil Shapiro 230e92d3f3fSGregory Neil Shapiro # ifdef LDAP_URL_ERR_BADATTRS 231e92d3f3fSGregory Neil Shapiro case E_LDAPURLBASE + LDAP_URL_ERR_BADATTRS: 232e92d3f3fSGregory Neil Shapiro return "LDAP URL bad (or missing) attributes"; 233*5b0945b5SGregory Neil Shapiro # endif 234e92d3f3fSGregory Neil Shapiro 235e92d3f3fSGregory Neil Shapiro # ifdef LDAP_URL_ERR_BADSCOPE 236e92d3f3fSGregory Neil Shapiro case E_LDAPURLBASE + LDAP_URL_ERR_BADSCOPE: 237e92d3f3fSGregory Neil Shapiro return "LDAP URL scope string is invalid (or missing)"; 238*5b0945b5SGregory Neil Shapiro # endif 239e92d3f3fSGregory Neil Shapiro 240e92d3f3fSGregory Neil Shapiro # ifdef LDAP_URL_ERR_BADFILTER 241e92d3f3fSGregory Neil Shapiro case E_LDAPURLBASE + LDAP_URL_ERR_BADFILTER: 242e92d3f3fSGregory Neil Shapiro return "LDAP URL bad or missing filter"; 243*5b0945b5SGregory Neil Shapiro # endif 244e92d3f3fSGregory Neil Shapiro 245e92d3f3fSGregory Neil Shapiro # ifdef LDAP_URL_ERR_BADEXTS 246e92d3f3fSGregory Neil Shapiro case E_LDAPURLBASE + LDAP_URL_ERR_BADEXTS: 247e92d3f3fSGregory Neil Shapiro return "LDAP URL bad or missing extensions"; 248*5b0945b5SGregory Neil Shapiro # endif 249e92d3f3fSGregory Neil Shapiro 250e92d3f3fSGregory Neil Shapiro /* Sun LDAP errors */ 251e92d3f3fSGregory Neil Shapiro # ifdef LDAP_URL_ERR_NOTLDAP 252e92d3f3fSGregory Neil Shapiro case E_LDAPURLBASE + LDAP_URL_ERR_NOTLDAP: 253e92d3f3fSGregory Neil Shapiro return "LDAP URL doesn't begin with \"ldap://\""; 254*5b0945b5SGregory Neil Shapiro # endif 255e92d3f3fSGregory Neil Shapiro 256e92d3f3fSGregory Neil Shapiro # ifdef LDAP_URL_ERR_NODN 257e92d3f3fSGregory Neil Shapiro case E_LDAPURLBASE + LDAP_URL_ERR_NODN: 258e92d3f3fSGregory Neil Shapiro return "LDAP URL has no DN (required)"; 259*5b0945b5SGregory Neil Shapiro # endif 260e92d3f3fSGregory Neil Shapiro 261e92d3f3fSGregory Neil Shapiro #endif /* LDAPMAP */ 26240266059SGregory Neil Shapiro } 26340266059SGregory Neil Shapiro 264e92d3f3fSGregory Neil Shapiro #if LDAPMAP 265e92d3f3fSGregory Neil Shapiro 26640266059SGregory Neil Shapiro /* 267da7d7b9cSGregory Neil Shapiro ** LDAP error messages. Handle small negative errors from 268da7d7b9cSGregory Neil Shapiro ** libldap (in the range -E_LDAP_SHIM to zero, offset by E_LDAPBASE) 269da7d7b9cSGregory Neil Shapiro ** as well. 27040266059SGregory Neil Shapiro */ 27140266059SGregory Neil Shapiro 272da7d7b9cSGregory Neil Shapiro if (errnum >= E_LDAPBASE - E_LDAP_SHIM) 27340266059SGregory Neil Shapiro return ldap_err2string(errnum - E_LDAPBASE); 27440266059SGregory Neil Shapiro #endif /* LDAPMAP */ 27540266059SGregory Neil Shapiro 27640266059SGregory Neil Shapiro ret = strerror(errnum); 27740266059SGregory Neil Shapiro if (ret == NULL) 27840266059SGregory Neil Shapiro { 27940266059SGregory Neil Shapiro static char buf[30]; 28040266059SGregory Neil Shapiro 28140266059SGregory Neil Shapiro (void) sm_snprintf(buf, sizeof buf, "Error %d", errnum); 28240266059SGregory Neil Shapiro return buf; 28340266059SGregory Neil Shapiro } 28440266059SGregory Neil Shapiro return ret; 28540266059SGregory Neil Shapiro } 286