xref: /freebsd/contrib/sendmail/libsm/errstring.c (revision e2c0e292e8a7ca00ba99bcfccc9e637f45c3e8b1)
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