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