xref: /freebsd/contrib/sendmail/libsm/errstring.c (revision 4026605903c0ab8df33c4ae8c419acdb2b652af8)
140266059SGregory Neil Shapiro /*
240266059SGregory Neil Shapiro  * Copyright (c) 2001 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>
1440266059SGregory Neil Shapiro SM_RCSID("@(#)$Id: errstring.c,v 1.12 2001/10/03 16:09:32 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.
4540266059SGregory Neil Shapiro */
4640266059SGregory Neil Shapiro 
4740266059SGregory Neil Shapiro const char *
4840266059SGregory Neil Shapiro sm_errstring(errnum)
4940266059SGregory Neil Shapiro 	int errnum;
5040266059SGregory Neil Shapiro {
5140266059SGregory Neil Shapiro 	char *ret;
5240266059SGregory Neil Shapiro 
5340266059SGregory Neil Shapiro 	switch (errnum)
5440266059SGregory Neil Shapiro 	{
5540266059SGregory Neil Shapiro 	  case EPERM:
5640266059SGregory Neil Shapiro 		/* SunOS gives "Not owner" -- this is the POSIX message */
5740266059SGregory Neil Shapiro 		return "Operation not permitted";
5840266059SGregory Neil Shapiro 
5940266059SGregory Neil Shapiro 	/*
6040266059SGregory Neil Shapiro 	**  Error messages used internally in sendmail.
6140266059SGregory Neil Shapiro 	*/
6240266059SGregory Neil Shapiro 
6340266059SGregory Neil Shapiro 	  case E_SM_OPENTIMEOUT:
6440266059SGregory Neil Shapiro 		return "Timeout on file open";
6540266059SGregory Neil Shapiro 
6640266059SGregory Neil Shapiro 	  case E_SM_NOSLINK:
6740266059SGregory Neil Shapiro 		return "Symbolic links not allowed";
6840266059SGregory Neil Shapiro 
6940266059SGregory Neil Shapiro 	  case E_SM_NOHLINK:
7040266059SGregory Neil Shapiro 		return "Hard links not allowed";
7140266059SGregory Neil Shapiro 
7240266059SGregory Neil Shapiro 	  case E_SM_REGONLY:
7340266059SGregory Neil Shapiro 		return "Regular files only";
7440266059SGregory Neil Shapiro 
7540266059SGregory Neil Shapiro 	  case E_SM_ISEXEC:
7640266059SGregory Neil Shapiro 		return "Executable files not allowed";
7740266059SGregory Neil Shapiro 
7840266059SGregory Neil Shapiro 	  case E_SM_WWDIR:
7940266059SGregory Neil Shapiro 		return "World writable directory";
8040266059SGregory Neil Shapiro 
8140266059SGregory Neil Shapiro 	  case E_SM_GWDIR:
8240266059SGregory Neil Shapiro 		return "Group writable directory";
8340266059SGregory Neil Shapiro 
8440266059SGregory Neil Shapiro 	  case E_SM_FILECHANGE:
8540266059SGregory Neil Shapiro 		return "File changed after open";
8640266059SGregory Neil Shapiro 
8740266059SGregory Neil Shapiro 	  case E_SM_WWFILE:
8840266059SGregory Neil Shapiro 		return "World writable file";
8940266059SGregory Neil Shapiro 
9040266059SGregory Neil Shapiro 	  case E_SM_GWFILE:
9140266059SGregory Neil Shapiro 		return "Group writable file";
9240266059SGregory Neil Shapiro 
9340266059SGregory Neil Shapiro 	  case E_SM_GRFILE:
9440266059SGregory Neil Shapiro 		return "Group readable file";
9540266059SGregory Neil Shapiro 
9640266059SGregory Neil Shapiro 	  case E_SM_WRFILE:
9740266059SGregory Neil Shapiro 		return "World readable file";
9840266059SGregory Neil Shapiro 
9940266059SGregory Neil Shapiro 	/*
10040266059SGregory Neil Shapiro 	**  DNS error messages.
10140266059SGregory Neil Shapiro 	*/
10240266059SGregory Neil Shapiro 
10340266059SGregory Neil Shapiro #if NAMED_BIND
10440266059SGregory Neil Shapiro 	  case HOST_NOT_FOUND + E_DNSBASE:
10540266059SGregory Neil Shapiro 		return "Name server: host not found";
10640266059SGregory Neil Shapiro 
10740266059SGregory Neil Shapiro 	  case TRY_AGAIN + E_DNSBASE:
10840266059SGregory Neil Shapiro 		return "Name server: host name lookup failure";
10940266059SGregory Neil Shapiro 
11040266059SGregory Neil Shapiro 	  case NO_RECOVERY + E_DNSBASE:
11140266059SGregory Neil Shapiro 		return "Name server: non-recoverable error";
11240266059SGregory Neil Shapiro 
11340266059SGregory Neil Shapiro 	  case NO_DATA + E_DNSBASE:
11440266059SGregory Neil Shapiro 		return "Name server: no data known";
11540266059SGregory Neil Shapiro #endif /* NAMED_BIND */
11640266059SGregory Neil Shapiro 
11740266059SGregory Neil Shapiro 	/*
11840266059SGregory Neil Shapiro 	**  libsmdb error messages.
11940266059SGregory Neil Shapiro 	*/
12040266059SGregory Neil Shapiro 
12140266059SGregory Neil Shapiro 	  case SMDBE_MALLOC:
12240266059SGregory Neil Shapiro 		return "Memory allocation failed";
12340266059SGregory Neil Shapiro 
12440266059SGregory Neil Shapiro 	  case SMDBE_GDBM_IS_BAD:
12540266059SGregory Neil Shapiro 		return "GDBM is not supported";
12640266059SGregory Neil Shapiro 
12740266059SGregory Neil Shapiro 	  case SMDBE_UNSUPPORTED:
12840266059SGregory Neil Shapiro 		return "Unsupported action";
12940266059SGregory Neil Shapiro 
13040266059SGregory Neil Shapiro 	  case SMDBE_DUPLICATE:
13140266059SGregory Neil Shapiro 		return "Key already exists";
13240266059SGregory Neil Shapiro 
13340266059SGregory Neil Shapiro 	  case SMDBE_BAD_OPEN:
13440266059SGregory Neil Shapiro 		return "Database open failed";
13540266059SGregory Neil Shapiro 
13640266059SGregory Neil Shapiro 	  case SMDBE_NOT_FOUND:
13740266059SGregory Neil Shapiro 		return "Key not found";
13840266059SGregory Neil Shapiro 
13940266059SGregory Neil Shapiro 	  case SMDBE_UNKNOWN_DB_TYPE:
14040266059SGregory Neil Shapiro 		return "Unknown database type";
14140266059SGregory Neil Shapiro 
14240266059SGregory Neil Shapiro 	  case SMDBE_UNSUPPORTED_DB_TYPE:
14340266059SGregory Neil Shapiro 		return "Support for database type not compiled into this program";
14440266059SGregory Neil Shapiro 
14540266059SGregory Neil Shapiro 	  case SMDBE_INCOMPLETE:
14640266059SGregory Neil Shapiro 		return "DB sync did not finish";
14740266059SGregory Neil Shapiro 
14840266059SGregory Neil Shapiro 	  case SMDBE_KEY_EMPTY:
14940266059SGregory Neil Shapiro 		return "Key is empty";
15040266059SGregory Neil Shapiro 
15140266059SGregory Neil Shapiro 	  case SMDBE_KEY_EXIST:
15240266059SGregory Neil Shapiro 		return "Key already exists";
15340266059SGregory Neil Shapiro 
15440266059SGregory Neil Shapiro 	  case SMDBE_LOCK_DEADLOCK:
15540266059SGregory Neil Shapiro 		return "Locker killed to resolve deadlock";
15640266059SGregory Neil Shapiro 
15740266059SGregory Neil Shapiro 	  case SMDBE_LOCK_NOT_GRANTED:
15840266059SGregory Neil Shapiro 		return "Lock unavailable";
15940266059SGregory Neil Shapiro 
16040266059SGregory Neil Shapiro 	  case SMDBE_LOCK_NOT_HELD:
16140266059SGregory Neil Shapiro 		return "Lock not held by locker";
16240266059SGregory Neil Shapiro 
16340266059SGregory Neil Shapiro 	  case SMDBE_RUN_RECOVERY:
16440266059SGregory Neil Shapiro 		return "Database panic, run recovery";
16540266059SGregory Neil Shapiro 
16640266059SGregory Neil Shapiro 	  case SMDBE_IO_ERROR:
16740266059SGregory Neil Shapiro 		return "I/O error";
16840266059SGregory Neil Shapiro 
16940266059SGregory Neil Shapiro 	  case SMDBE_READ_ONLY:
17040266059SGregory Neil Shapiro 		return "Database opened read-only";
17140266059SGregory Neil Shapiro 
17240266059SGregory Neil Shapiro 	  case SMDBE_DB_NAME_TOO_LONG:
17340266059SGregory Neil Shapiro 		return "Name too long";
17440266059SGregory Neil Shapiro 
17540266059SGregory Neil Shapiro 	  case SMDBE_INVALID_PARAMETER:
17640266059SGregory Neil Shapiro 		return "Invalid parameter";
17740266059SGregory Neil Shapiro 
17840266059SGregory Neil Shapiro 	  case SMDBE_ONLY_SUPPORTS_ONE_CURSOR:
17940266059SGregory Neil Shapiro 		return "Only one cursor allowed";
18040266059SGregory Neil Shapiro 
18140266059SGregory Neil Shapiro 	  case SMDBE_NOT_A_VALID_CURSOR:
18240266059SGregory Neil Shapiro 		return "Invalid cursor";
18340266059SGregory Neil Shapiro 
18440266059SGregory Neil Shapiro 	  case SMDBE_OLD_VERSION:
18540266059SGregory Neil Shapiro 		return "Berkeley DB file is an old version, recreate it";
18640266059SGregory Neil Shapiro 	}
18740266059SGregory Neil Shapiro 
18840266059SGregory Neil Shapiro 	/*
18940266059SGregory Neil Shapiro 	**  LDAP error messages.
19040266059SGregory Neil Shapiro 	*/
19140266059SGregory Neil Shapiro 
19240266059SGregory Neil Shapiro #if LDAPMAP
19340266059SGregory Neil Shapiro 	if (errnum >= E_LDAPBASE)
19440266059SGregory Neil Shapiro 		return ldap_err2string(errnum - E_LDAPBASE);
19540266059SGregory Neil Shapiro #endif /* LDAPMAP */
19640266059SGregory Neil Shapiro 
19740266059SGregory Neil Shapiro 	ret = strerror(errnum);
19840266059SGregory Neil Shapiro 	if (ret == NULL)
19940266059SGregory Neil Shapiro 	{
20040266059SGregory Neil Shapiro 		static char buf[30];
20140266059SGregory Neil Shapiro 
20240266059SGregory Neil Shapiro 		(void) sm_snprintf(buf, sizeof buf, "Error %d", errnum);
20340266059SGregory Neil Shapiro 		return buf;
20440266059SGregory Neil Shapiro 	}
20540266059SGregory Neil Shapiro 	return ret;
20640266059SGregory Neil Shapiro }
207