diff options
| author | Gregory Neil Shapiro <gshapiro@FreeBSD.org> | 2002-04-20 19:51:37 +0000 | 
|---|---|---|
| committer | Gregory Neil Shapiro <gshapiro@FreeBSD.org> | 2002-04-20 19:51:37 +0000 | 
| commit | 6b7c9af44b73355e01755ac7a0fb8ffc608b25ab (patch) | |
| tree | 67b16f7f365847069d82f04ad573204f216feaee /contrib/sendmail/src | |
| parent | 605302a5c9939b7eeda0a31f38901d9a8348e8cb (diff) | |
Diffstat (limited to 'contrib/sendmail/src')
| -rwxr-xr-x | contrib/sendmail/src/Build | 13 | ||||
| -rw-r--r-- | contrib/sendmail/src/cdefs.h | 123 | ||||
| -rw-r--r-- | contrib/sendmail/src/ldap_map.h | 91 | ||||
| -rw-r--r-- | contrib/sendmail/src/mailstats.h | 34 | ||||
| -rwxr-xr-x | contrib/sendmail/src/makesendmail | 13 | ||||
| -rw-r--r-- | contrib/sendmail/src/pathnames.h | 32 | ||||
| -rw-r--r-- | contrib/sendmail/src/safefile.c | 751 | ||||
| -rw-r--r-- | contrib/sendmail/src/sendmail.hf | 124 | ||||
| -rw-r--r-- | contrib/sendmail/src/snprintf.c | 428 | ||||
| -rw-r--r-- | contrib/sendmail/src/useful.h | 58 | 
10 files changed, 0 insertions, 1667 deletions
| diff --git a/contrib/sendmail/src/Build b/contrib/sendmail/src/Build deleted file mode 100755 index 72db61a2bda9e..0000000000000 --- a/contrib/sendmail/src/Build +++ /dev/null @@ -1,13 +0,0 @@ -#!/bin/sh - -# Copyright (c) 1999-2000 Sendmail, Inc. and its suppliers. -#	All rights reserved. -# -# By using this file, you agree to the terms and conditions set -# forth in the LICENSE file which can be found at the top level of -# the sendmail distribution. -# -# -#	$Id: Build,v 8.5.2.1 2000/04/10 06:41:07 gshapiro Exp $ - -exec sh ../devtools/bin/Build $* diff --git a/contrib/sendmail/src/cdefs.h b/contrib/sendmail/src/cdefs.h deleted file mode 100644 index e586cbfaf7cb8..0000000000000 --- a/contrib/sendmail/src/cdefs.h +++ /dev/null @@ -1,123 +0,0 @@ -/* - * Copyright (c) 1991, 1993 - *	The Regents of the University of California.  All rights reserved. - * - * This code is derived from software contributed to Berkeley by - * Berkeley Software Design, Inc. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - *    notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - *    notice, this list of conditions and the following disclaimer in the - *    documentation and/or other materials provided with the distribution. - * 3. All advertising materials mentioning features or use of this software - *    must display the following acknowledgement: - *	This product includes software developed by the University of - *	California, Berkeley and its contributors. - * 4. Neither the name of the University nor the names of its contributors - *    may be used to endorse or promote products derived from this software - *    without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - *	@(#)cdefs.h	8.8 (Berkeley) 1/9/95 - */ - -#ifndef	_CDEFS_H_ -#define	_CDEFS_H_ - -#if defined(__cplusplus) -#define	__BEGIN_DECLS	extern "C" { -#define	__END_DECLS	}; -#else -#define	__BEGIN_DECLS -#define	__END_DECLS -#endif - -/* - * The __CONCAT macro is used to concatenate parts of symbol names, e.g. - * with "#define OLD(foo) __CONCAT(old,foo)", OLD(foo) produces oldfoo. - * The __CONCAT macro is a bit tricky -- make sure you don't put spaces - * in between its arguments.  __CONCAT can also concatenate double-quoted - * strings produced by the __STRING macro, but this only works with ANSI C. - */ -#if defined(__STDC__) || defined(__cplusplus) -#define	__P(protos)	protos		/* full-blown ANSI C */ -#define	__CONCAT(x,y)	x ## y -#define	__STRING(x)	#x - -#define	__const		const		/* define reserved names to standard */ -#define	__signed	signed -#define	__volatile	volatile -#if defined(__cplusplus) -#define	__inline	inline		/* convert to C++ keyword */ -#else -#ifndef __GNUC__ -#define	__inline			/* delete GCC keyword */ -#endif /* !__GNUC__ */ -#endif /* !__cplusplus */ - -#else	/* !(__STDC__ || __cplusplus) */ -#define	__P(protos)	()		/* traditional C preprocessor */ -#define	__CONCAT(x,y)	x/**/y -#define	__STRING(x)	"x" - -#ifndef __GNUC__ -#define	__const				/* delete pseudo-ANSI C keywords */ -#define	__inline -#define	__signed -#define	__volatile -/* - * In non-ANSI C environments, new programs will want ANSI-only C keywords - * deleted from the program and old programs will want them left alone. - * When using a compiler other than gcc, programs using the ANSI C keywords - * const, inline etc. as normal identifiers should define -DNO_ANSI_KEYWORDS. - * When using "gcc -traditional", we assume that this is the intent; if - * __GNUC__ is defined but __STDC__ is not, we leave the new keywords alone. - */ -#ifndef	NO_ANSI_KEYWORDS -#define	const				/* delete ANSI C keywords */ -#define	inline -#define	signed -#define	volatile -#endif -#endif	/* !__GNUC__ */ -#endif	/* !(__STDC__ || __cplusplus) */ - -/* - * GCC1 and some versions of GCC2 declare dead (non-returning) and - * pure (no side effects) functions using "volatile" and "const"; - * unfortunately, these then cause warnings under "-ansi -pedantic". - * GCC2 uses a new, peculiar __attribute__((attrs)) style.  All of - * these work for GNU C++ (modulo a slight glitch in the C++ grammar - * in the distribution version of 2.5.5). - */ -#if !defined(__GNUC__) || __GNUC__ < 2 || \ -	(__GNUC__ == 2 && __GNUC_MINOR__ < 5) -#define	__attribute__(x)	/* delete __attribute__ if non-gcc or gcc1 */ -#if defined(__GNUC__) && !defined(__STRICT_ANSI__) -#define	__dead		__volatile -#define	__pure		__const -#endif -#endif - -/* Delete pseudo-keywords wherever they are not available or needed. */ -#ifndef __dead -#define	__dead -#define	__pure -#endif - -#endif /* !_CDEFS_H_ */ diff --git a/contrib/sendmail/src/ldap_map.h b/contrib/sendmail/src/ldap_map.h deleted file mode 100644 index 7d40329e1b5ea..0000000000000 --- a/contrib/sendmail/src/ldap_map.h +++ /dev/null @@ -1,91 +0,0 @@ -/* - * Copyright (c) 1998 Sendmail, Inc.  All rights reserved. - * - * By using this file, you agree to the terms and conditions set - * forth in the LICENSE file which can be found at the top level of - * the sendmail distribution. - * - */ - -/* -**  Support for LDAP. -** -**	Contributed by Booker C. Bense <bbense+ldap@stanford.edu>. -**	Please go to him for support -- since I (Eric) don't run LDAP, I -**	can't help you at all. -** -**	@(#)ldap_map.h	8.12 (Berkeley) 2/2/1999 -*/ - -#ifndef _LDAP_MAP_H -#define _LDAP_MAP_H - -#include <sys/time.h> - -struct ldap_map_struct -{ -	/* needed for ldap_open */ -	char		*ldaphost; -	int		ldapport; - -	/* Options set in ld struct before ldap_bind_s */ -	int		deref; -	int		timelimit; -	int		sizelimit; -	int		ldap_options; - -	/* args for ldap_bind_s */ -	LDAP		*ld; -	char		*binddn; -	char		*passwd; -	int		method; - -	/* args for ldap_search_st */ -	char		*base; -	int		scope; -	char		*filter; -	char		*attr[2]; -	int		attrsonly; -	struct timeval	timeout; -	LDAPMessage	*res; -}; - -typedef struct ldap_map_struct	LDAP_MAP_STRUCT; - -#define DEFAULT_LDAP_MAP_PORT		LDAP_PORT -#define DEFAULT_LDAP_MAP_SCOPE		LDAP_SCOPE_SUBTREE -#define DEFAULT_LDAP_MAP_BINDDN		NULL -#define DEFAULT_LDAP_MAP_PASSWD		NULL -#define DEFAULT_LDAP_MAP_METHOD		LDAP_AUTH_SIMPLE -#define DEFAULT_LDAP_MAP_TIMELIMIT	5 -#define DEFAULT_LDAP_MAP_DEREF		LDAP_DEREF_NEVER -#define DEFAULT_LDAP_MAP_SIZELIMIT	0 -#define DEFAULT_LDAP_MAP_ATTRSONLY	0 -#define LDAP_MAP_MAX_FILTER		1024 -#ifdef LDAP_REFERRALS -# define DEFAULT_LDAP_MAP_LDAP_OPTIONS	LDAP_OPT_REFERRALS -#else /* LDAP_REFERRALS */ -# define DEFAULT_LDAP_MAP_LDAP_OPTIONS	0 -#endif /* LDAP_REFERRALS */ - -/* -**  ldap_init(3) is broken in Umich 3.x and OpenLDAP 1.0/1.1. -**  Use the lack of LDAP_OPT_SIZELIMIT to detect old API implementations -**  and assume (falsely) that all old API implementations are broken. -**  (OpenLDAP 1.2 and later have a working ldap_init(), add -DUSE_LDAP_INIT) -*/ - -#if defined(LDAP_OPT_SIZELIMIT) && !defined(USE_LDAP_INIT) -# define USE_LDAP_INIT	1 -#endif - -/* -**  LDAP_OPT_SIZELIMIT is not defined under Umich 3.x nor OpenLDAP 1.x, -**  hence ldap_set_option() must not exist. -*/ - -#if defined(LDAP_OPT_SIZELIMIT) && !defined(USE_LDAP_SET_OPTION) -# define USE_LDAP_SET_OPTION	1 -#endif - -#endif /* _LDAP_MAP_H */ diff --git a/contrib/sendmail/src/mailstats.h b/contrib/sendmail/src/mailstats.h deleted file mode 100644 index 86390b3911a30..0000000000000 --- a/contrib/sendmail/src/mailstats.h +++ /dev/null @@ -1,34 +0,0 @@ -/* - * Copyright (c) 1998 Sendmail, Inc.  All rights reserved. - * Copyright (c) 1983 Eric P. Allman.  All rights reserved. - * Copyright (c) 1988, 1993 - *	The Regents of the University of California.  All rights reserved. - * - * By using this file, you agree to the terms and conditions set - * forth in the LICENSE file which can be found at the top level of - * the sendmail distribution. - * - * - *	@(#)mailstats.h	8.8 (Berkeley) 5/19/1998 - */ - -#define STAT_VERSION	2 -#define STAT_MAGIC	0x1B1DE - -/* -**  Statistics structure. -*/ - -struct statistics -{ -	int	stat_magic;		/* magic number */ -	int	stat_version;		/* stat file version */ -	time_t	stat_itime;		/* file initialization time */ -	short	stat_size;		/* size of this structure */ -	long	stat_nf[MAXMAILERS];	/* # msgs from each mailer */ -	long	stat_bf[MAXMAILERS];	/* kbytes from each mailer */ -	long	stat_nt[MAXMAILERS];	/* # msgs to each mailer */ -	long	stat_bt[MAXMAILERS];	/* kbytes to each mailer */ -	long	stat_nr[MAXMAILERS];	/* # rejects by each mailer */ -	long	stat_nd[MAXMAILERS];	/* # discards by each mailer */ -}; diff --git a/contrib/sendmail/src/makesendmail b/contrib/sendmail/src/makesendmail deleted file mode 100755 index 9ca35206710f0..0000000000000 --- a/contrib/sendmail/src/makesendmail +++ /dev/null @@ -1,13 +0,0 @@ -#!/bin/sh - -# Copyright (c) 1999 Sendmail, Inc. and its suppliers. -#	All rights reserved. -# -# By using this file, you agree to the terms and conditions set -# forth in the LICENSE file which can be found at the top level of -# the sendmail distribution. -# -# -#	$Id: makesendmail,v 8.4 1999/04/04 07:01:42 gshapiro Exp $ - -exec ./Build $* diff --git a/contrib/sendmail/src/pathnames.h b/contrib/sendmail/src/pathnames.h deleted file mode 100644 index 7a06b120652c8..0000000000000 --- a/contrib/sendmail/src/pathnames.h +++ /dev/null @@ -1,32 +0,0 @@ -/*- - * Copyright (c) 1998 Sendmail, Inc.  All rights reserved. - * Copyright (c) 1990, 1993 - *	The Regents of the University of California.  All rights reserved. - * - * By using this file, you agree to the terms and conditions set - * forth in the LICENSE file which can be found at the top level of - * the sendmail distribution. - * - * - *	@(#)pathnames.h	8.8 (Berkeley) 5/19/1998 - */ - -#ifndef _PATH_SENDMAILCF -# if defined(USE_VENDOR_CF_PATH) && defined(_PATH_VENDOR_CF) -#  define _PATH_SENDMAILCF	_PATH_VENDOR_CF -# else -#  define _PATH_SENDMAILCF	"/etc/sendmail.cf" -# endif -#endif - -#ifndef _PATH_SENDMAILPID -# ifdef BSD4_4 -#  define _PATH_SENDMAILPID	"/var/run/sendmail.pid" -# else -#  define _PATH_SENDMAILPID	"/etc/sendmail.pid" -# endif -#endif - -#ifndef _PATH_HOSTS -# define _PATH_HOSTS		"/etc/hosts" -#endif diff --git a/contrib/sendmail/src/safefile.c b/contrib/sendmail/src/safefile.c deleted file mode 100644 index ff94b3d243bf4..0000000000000 --- a/contrib/sendmail/src/safefile.c +++ /dev/null @@ -1,751 +0,0 @@ -/* - * Copyright (c) 1998 Sendmail, Inc.  All rights reserved. - * Copyright (c) 1983, 1995-1997 Eric P. Allman.  All rights reserved. - * Copyright (c) 1988, 1993 - *	The Regents of the University of California.  All rights reserved. - * - * By using this file, you agree to the terms and conditions set - * forth in the LICENSE file which can be found at the top level of - * the sendmail distribution. - * - */ - -#ifndef lint -static char sccsid[] = "@(#)safefile.c	8.43 (Berkeley) 10/13/1998"; -#endif /* not lint */ - -# include "sendmail.h" -/* -**  SAFEFILE -- return true if a file exists and is safe for a user. -** -**	Parameters: -**		fn -- filename to check. -**		uid -- user id to compare against. -**		gid -- group id to compare against. -**		uname -- user name to compare against (used for group -**			sets). -**		flags -- modifiers: -**			SFF_MUSTOWN -- "uid" must own this file. -**			SFF_NOSLINK -- file cannot be a symbolic link. -**		mode -- mode bits that must match. -**		st -- if set, points to a stat structure that will -**			get the stat info for the file. -** -**	Returns: -**		0 if fn exists, is owned by uid, and matches mode. -**		An errno otherwise.  The actual errno is cleared. -** -**	Side Effects: -**		none. -*/ - -#include <grp.h> - -int -safefile(fn, uid, gid, uname, flags, mode, st) -	char *fn; -	UID_T uid; -	GID_T gid; -	char *uname; -	int flags; -	int mode; -	struct stat *st; -{ -	register char *p; -	register struct group *gr = NULL; -	int file_errno = 0; -	bool checkpath; -	struct stat stbuf; -	struct stat fstbuf; -	char fbuf[MAXPATHLEN + 1]; - -	if (tTd(44, 4)) -		printf("safefile(%s, uid=%d, gid=%d, flags=%x, mode=%o):\n", -			fn, (int) uid, (int) gid, flags, mode); -	errno = 0; -	if (st == NULL) -		st = &fstbuf; -	if (strlen(fn) > sizeof fbuf - 1) -	{ -		if (tTd(44, 4)) -			printf("\tpathname too long\n"); -		return ENAMETOOLONG; -	} -	strcpy(fbuf, fn); -	fn = fbuf; - -	/* ignore SFF_SAFEDIRPATH if we are debugging */ -	if (RealUid != 0 && RunAsUid == RealUid) -		flags &= ~SFF_SAFEDIRPATH; - -	/* first check to see if the file exists at all */ -#ifdef HASLSTAT -	if ((bitset(SFF_NOSLINK, flags) ? lstat(fn, st) -					: stat(fn, st)) < 0) -#else -	if (stat(fn, st) < 0) -#endif -	{ -		file_errno = errno; -	} -	else if (bitset(SFF_SETUIDOK, flags) && -		 !bitset(S_IXUSR|S_IXGRP|S_IXOTH, st->st_mode) && -		 S_ISREG(st->st_mode)) -	{ -		/* -		**  If final file is setuid, run as the owner of that -		**  file.  Gotta be careful not to reveal anything too -		**  soon here! -		*/ - -#ifdef SUID_ROOT_FILES_OK -		if (bitset(S_ISUID, st->st_mode)) -#else -		if (bitset(S_ISUID, st->st_mode) && st->st_uid != 0 && -		    st->st_uid != TrustedUid) -#endif -		{ -			uid = st->st_uid; -			uname = NULL; -		} -#ifdef SUID_ROOT_FILES_OK -		if (bitset(S_ISGID, st->st_mode)) -#else -		if (bitset(S_ISGID, st->st_mode) && st->st_gid != 0) -#endif -			gid = st->st_gid; -	} - -	checkpath = !bitset(SFF_NOPATHCHECK, flags) || -		    (uid == 0 && !bitset(SFF_ROOTOK|SFF_OPENASROOT, flags)); -	if (bitset(SFF_NOWLINK, flags) && !bitset(SFF_SAFEDIRPATH, flags)) -	{ -		int ret; - -		/* check the directory */ -		p = strrchr(fn, '/'); -		if (p == NULL) -		{ -			ret = safedirpath(".", uid, gid, uname, flags|SFF_SAFEDIRPATH); -		} -		else -		{ -			*p = '\0'; -			ret = safedirpath(fn, uid, gid, uname, flags|SFF_SAFEDIRPATH); -			*p = '/'; -		} -		if (ret == 0) -		{ -			/* directory is safe */ -			checkpath = FALSE; -		} -		else -		{ -#ifdef HASLSTAT -			/* Need lstat() information if called stat() before */ -			if (!bitset(SFF_NOSLINK, flags) && lstat(fn, st) < 0) -			{ -				ret = errno; -				if (tTd(44, 4)) -					printf("\t%s\n", errstring(ret)); -				return ret; -			} -#endif -			/* directory is writable: disallow links */ -			flags |= SFF_NOLINK; -		} -	} - -	if (checkpath) -	{ -		int ret; - -		p = strrchr(fn, '/'); -		if (p == NULL) -		{ -			ret = safedirpath(".", uid, gid, uname, flags); -		} -		else -		{ -			*p = '\0'; -			ret = safedirpath(fn, uid, gid, uname, flags); -			*p = '/'; -		} -		if (ret != 0) -			return ret; -	} - -	/* -	**  If the target file doesn't exist, check the directory to -	**  ensure that it is writable by this user. -	*/ - -	if (file_errno != 0) -	{ -		int ret = file_errno; -		char *dir = fn; - -		if (tTd(44, 4)) -			printf("\t%s\n", errstring(ret)); - -		errno = 0; -		if (!bitset(SFF_CREAT, flags) || file_errno != ENOENT) -			return ret; - -		/* check to see if legal to create the file */ -		p = strrchr(dir, '/'); -		if (p == NULL) -			dir = "."; -		else if (p == dir) -			dir = "/"; -		else -			*p = '\0'; -		if (stat(dir, &stbuf) >= 0) -		{ -			int md = S_IWRITE|S_IEXEC; - -			if (stbuf.st_uid == uid) -				; -			else if (uid == 0 && stbuf.st_uid == TrustedUid) -				; -			else -			{ -				md >>= 3; -				if (stbuf.st_gid == gid) -					; -#ifndef NO_GROUP_SET -				else if (uname != NULL && !DontInitGroups && -			 		 ((gr != NULL && -			 		   gr->gr_gid == stbuf.st_gid) || -			  		  (gr = getgrgid(stbuf.st_gid)) != NULL)) -				{ -					register char **gp; -		 -					for (gp = gr->gr_mem; *gp != NULL; gp++) -						if (strcmp(*gp, uname) == 0) -							break; -					if (*gp == NULL) -						md >>= 3; -				} -#endif -				else -					md >>= 3; -			} -			if ((stbuf.st_mode & md) != md) -				errno = EACCES; -		} -		ret = errno; -		if (tTd(44, 4)) -			printf("\t[final dir %s uid %d mode %lo] %s\n", -				dir, (int) stbuf.st_uid, (u_long) stbuf.st_mode, -				errstring(ret)); -		if (p != NULL) -			*p = '/'; -		st->st_mode = ST_MODE_NOFILE; -		return ret; -	} - -#ifdef S_ISLNK -	if (bitset(SFF_NOSLINK, flags) && S_ISLNK(st->st_mode)) -	{ -		if (tTd(44, 4)) -			printf("\t[slink mode %lo]\tE_SM_NOSLINK\n", -				(u_long) st->st_mode); -		return E_SM_NOSLINK; -	} -#endif -	if (bitset(SFF_REGONLY, flags) && !S_ISREG(st->st_mode)) -	{ -		if (tTd(44, 4)) -			printf("\t[non-reg mode %lo]\tE_SM_REGONLY\n", -				(u_long) st->st_mode); -		return E_SM_REGONLY; -	} -	if (bitset(SFF_NOGWFILES, flags) && -	    bitset(S_IWGRP, st->st_mode)) -	{ -		if (tTd(44, 4)) -			printf("\t[write bits %lo]\tE_SM_GWFILE\n", -			       (u_long) st->st_mode); -		return E_SM_GWFILE; -	} -	if (bitset(SFF_NOWWFILES, flags) && -	    bitset(S_IWOTH, st->st_mode)) -	{ -		if (tTd(44, 4)) -			printf("\t[write bits %lo]\tE_SM_WWFILE\n", -			       (u_long) st->st_mode); -		return E_SM_WWFILE; -	} -	if (bitset(S_IWUSR|S_IWGRP|S_IWOTH, mode) && -	    bitset(S_IXUSR|S_IXGRP|S_IXOTH, st->st_mode)) -	{ -		if (tTd(44, 4)) -			printf("\t[exec bits %lo]\tE_SM_ISEXEC]\n", -				(u_long) st->st_mode); -		return E_SM_ISEXEC; -	} -	if (bitset(SFF_NOHLINK, flags) && st->st_nlink != 1) -	{ -		if (tTd(44, 4)) -			printf("\t[link count %d]\tE_SM_NOHLINK\n", -				(int) st->st_nlink); -		return E_SM_NOHLINK; -	} - -	if (uid == 0 && bitset(SFF_OPENASROOT, flags)) -		; -	else if (uid == 0 && !bitset(SFF_ROOTOK, flags)) -		mode >>= 6; -	else if (st->st_uid == uid) -		; -	else if (uid == 0 && st->st_uid == TrustedUid) -		; -	else -	{ -		mode >>= 3; -		if (st->st_gid == gid) -			; -#ifndef NO_GROUP_SET -		else if (uname != NULL && !DontInitGroups && -			 ((gr != NULL && gr->gr_gid == st->st_gid) || -			  (gr = getgrgid(st->st_gid)) != NULL)) -		{ -			register char **gp; - -			for (gp = gr->gr_mem; *gp != NULL; gp++) -				if (strcmp(*gp, uname) == 0) -					break; -			if (*gp == NULL) -				mode >>= 3; -		} -#endif -		else -			mode >>= 3; -	} -	if (tTd(44, 4)) -		printf("\t[uid %d, nlink %d, stat %lo, mode %lo] ", -			(int) st->st_uid, (int) st->st_nlink, -			(u_long) st->st_mode, (u_long) mode); -	if ((st->st_uid == uid || st->st_uid == 0 || -	     st->st_uid == TrustedUid || -	     !bitset(SFF_MUSTOWN, flags)) && -	    (st->st_mode & mode) == mode) -	{ -		if (tTd(44, 4)) -			printf("\tOK\n"); -		return 0; -	} -	if (tTd(44, 4)) -		printf("\tEACCES\n"); -	return EACCES; -} -/* -**  SAFEDIRPATH -- check to make sure a path to a directory is safe -** -**	Safe means not writable and owned by the right folks. -** -**	Parameters: -**		fn -- filename to check. -**		uid -- user id to compare against. -**		gid -- group id to compare against. -**		uname -- user name to compare against (used for group -**			sets). -**		flags -- modifiers: -**			SFF_ROOTOK -- ok to use root permissions to open. -**			SFF_SAFEDIRPATH -- writable directories are considered -**				to be fatal errors. -** -**	Returns: -**		0 -- if the directory path is "safe". -**		else -- an error number associated with the path. -*/ - -int -safedirpath(fn, uid, gid, uname, flags) -	char *fn; -	UID_T uid; -	GID_T gid; -	char *uname; -	int flags; -{ -	char *p; -	register struct group *gr = NULL; -	int ret = 0; -	int mode = S_IWOTH; -	struct stat stbuf; - -	/* special case root directory */ -	if (*fn == '\0') -		fn = "/"; - -	if (tTd(44, 4)) -		printf("safedirpath(%s, uid=%ld, gid=%ld, flags=%x):\n", -			fn, (long) uid, (long) gid, flags); - -	if (!bitset(DBS_GROUPWRITABLEDIRPATHSAFE, DontBlameSendmail)) -		mode |= S_IWGRP; - -	p = fn; -	do -	{ -		if (*p == '\0') -			*p = '/'; -		p = strchr(++p, '/'); -		if (p != NULL) -			*p = '\0'; -		if (stat(fn, &stbuf) < 0) -		{ -			ret = errno; -			break; -		} -		if ((uid == 0 || bitset(SFF_SAFEDIRPATH, flags)) && -		    bitset(mode, stbuf.st_mode)) -		{ -			if (tTd(44, 4)) -				printf("\t[dir %s] mode %lo\n", -					fn, (u_long) stbuf.st_mode); -			if (bitset(SFF_SAFEDIRPATH, flags)) -			{ -				if (bitset(S_IWOTH, stbuf.st_mode)) -					ret = E_SM_WWDIR; -				else -					ret = E_SM_GWDIR; -				break; -			} -			if (Verbose > 1) -				message("051 WARNING: %s writable directory %s", -					bitset(S_IWOTH, stbuf.st_mode) -					   ? "World" -					   : "Group", -					fn); -		} -		if (uid == 0 && !bitset(SFF_ROOTOK|SFF_OPENASROOT, flags)) -		{ -			if (bitset(S_IXOTH, stbuf.st_mode)) -				continue; -			ret = EACCES; -			break; -		} - -		/* -		**  Let OS determine access to file if we are not -		**  running as a privileged user.  This allows ACLs -		**  to work. -		*/ -		if (geteuid() != 0) -			continue; - -		if (stbuf.st_uid == uid && -		    bitset(S_IXUSR, stbuf.st_mode)) -			continue; -		if (stbuf.st_gid == gid && -		    bitset(S_IXGRP, stbuf.st_mode)) -			continue; -#ifndef NO_GROUP_SET -		if (uname != NULL && !DontInitGroups && -		    ((gr != NULL && gr->gr_gid == stbuf.st_gid) || -		     (gr = getgrgid(stbuf.st_gid)) != NULL)) -		{ -			register char **gp; - -			for (gp = gr->gr_mem; gp != NULL && *gp != NULL; gp++) -				if (strcmp(*gp, uname) == 0) -					break; -			if (gp != NULL && *gp != NULL && -			    bitset(S_IXGRP, stbuf.st_mode)) -				continue; -		} -#endif -		if (!bitset(S_IXOTH, stbuf.st_mode)) -		{ -			ret = EACCES; -			break; -		} -	} while (p != NULL); -	if (ret != 0 && tTd(44, 4)) -		printf("\t[dir %s] %s\n", fn, errstring(ret)); -	if (p != NULL) -		*p = '/'; -	return ret; -} -/* -**  SAFEOPEN -- do a file open with extra checking -** -**	Parameters: -**		fn -- the file name to open. -**		omode -- the open-style mode flags. -**		cmode -- the create-style mode flags. -**		sff -- safefile flags. -** -**	Returns: -**		Same as open. -*/ - -#ifndef O_ACCMODE -# define O_ACCMODE	(O_RDONLY|O_WRONLY|O_RDWR) -#endif - -int -safeopen(fn, omode, cmode, sff) -	char *fn; -	int omode; -	int cmode; -	int sff; -{ -	int rval; -	int fd; -	int smode; -	struct stat stb; - -	if (bitset(O_CREAT, omode)) -		sff |= SFF_CREAT; -	omode &= ~O_CREAT; -	smode = 0; -	switch (omode & O_ACCMODE) -	{ -	  case O_RDONLY: -		smode = S_IREAD; -		break; - -	  case O_WRONLY: -		smode = S_IWRITE; -		break; - -	  case O_RDWR: -		smode = S_IREAD|S_IWRITE; -		break; - -	  default: -		smode = 0; -		break; -	} -	if (bitset(SFF_OPENASROOT, sff)) -		rval = safefile(fn, RunAsUid, RunAsGid, RunAsUserName, -				sff, smode, &stb); -	else -		rval = safefile(fn, RealUid, RealGid, RealUserName, -				sff, smode, &stb); -	if (rval != 0) -	{ -		errno = rval; -		return -1; -	} -	if (stb.st_mode == ST_MODE_NOFILE && bitset(SFF_CREAT, sff)) -		omode |= O_EXCL|O_CREAT; - -	fd = dfopen(fn, omode, cmode, sff); -	if (fd < 0) -		return fd; -	if (filechanged(fn, fd, &stb)) -	{ -		syserr("554 cannot open: file %s changed after open", fn); -		close(fd); -		errno = E_SM_FILECHANGE; -		return -1; -	} -	return fd; -} -/* -**  SAFEFOPEN -- do a file open with extra checking -** -**	Parameters: -**		fn -- the file name to open. -**		omode -- the open-style mode flags. -**		cmode -- the create-style mode flags. -**		sff -- safefile flags. -** -**	Returns: -**		Same as fopen. -*/ - -FILE * -safefopen(fn, omode, cmode, sff) -	char *fn; -	int omode; -	int cmode; -	int sff; -{ -	int fd; -	FILE *fp; -	char *fmode; - -	switch (omode & O_ACCMODE) -	{ -	  case O_RDONLY: -		fmode = "r"; -		break; - -	  case O_WRONLY: -		if (bitset(O_APPEND, omode)) -			fmode = "a"; -		else -			fmode = "w"; -		break; - -	  case O_RDWR: -		if (bitset(O_TRUNC, omode)) -			fmode = "w+"; -		else if (bitset(O_APPEND, omode)) -			fmode = "a+"; -		else -			fmode = "r+"; -		break; - -	  default: -		syserr("safefopen: unknown omode %o", omode); -		fmode = "x"; -	} -	fd = safeopen(fn, omode, cmode, sff); -	if (fd < 0) -	{ -		if (tTd(44, 10)) -			printf("safefopen: safeopen failed: %s\n", -				errstring(errno)); -		return NULL; -	} -	fp = fdopen(fd, fmode); -	if (fp != NULL) -		return fp; - -	if (tTd(44, 10)) -	{ -		printf("safefopen: fdopen(%s, %s) failed: omode=%x, sff=%x, err=%s\n", -			fn, fmode, omode, sff, errstring(errno)); -#ifndef NOT_SENDMAIL -		dumpfd(fd, TRUE, FALSE); -#endif -	} -	(void) close(fd); -	return NULL; -} -/* -**  FILECHANGED -- check to see if file changed after being opened -** -**	Parameters: -**		fn -- pathname of file to check. -**		fd -- file descriptor to check. -**		stb -- stat structure from before open. -** -**	Returns: -**		TRUE -- if a problem was detected. -**		FALSE -- if this file is still the same. -*/ - -bool -filechanged(fn, fd, stb) -	char *fn; -	int fd; -	struct stat *stb; -{ -	struct stat sta; - -	if (stb->st_mode == ST_MODE_NOFILE) -	{ -#if HASLSTAT && BOGUS_O_EXCL -		/* only necessary if exclusive open follows symbolic links */ -		if (lstat(fn, stb) < 0 || stb->st_nlink != 1) -			return TRUE; -#else -		return FALSE; -#endif -	} -	if (fstat(fd, &sta) < 0) -		return TRUE; - -	if (sta.st_nlink != stb->st_nlink || -	    sta.st_dev != stb->st_dev || -	    sta.st_ino != stb->st_ino || -#if HAS_ST_GEN && 0		/* AFS returns garbage in st_gen */ -	    sta.st_gen != stb->st_gen || -#endif -	    sta.st_uid != stb->st_uid || -	    sta.st_gid != stb->st_gid) -	{ -		if (tTd(44, 8)) -		{ -			printf("File changed after opening:\n"); -			printf(" nlink	= %ld/%ld\n", -				(long) stb->st_nlink, (long) sta.st_nlink); -			printf(" dev	= %ld/%ld\n", -				(long) stb->st_dev, (long) sta.st_dev); -			if (sizeof sta.st_ino > sizeof (long)) -			{ -				printf(" ino	= %s/",  -					quad_to_string(stb->st_ino)); -				printf("%s\n", -					quad_to_string(sta.st_ino)); -			} -			else -				printf(" ino	= %lu/%lu\n", -					(unsigned long) stb->st_ino, -					(unsigned long) sta.st_ino); -#if HAS_ST_GEN -			printf(" gen	= %ld/%ld\n", -				(long) stb->st_gen, (long) sta.st_gen); -#endif -			printf(" uid	= %ld/%ld\n", -				(long) stb->st_uid, (long) sta.st_uid); -			printf(" gid	= %ld/%ld\n", -				(long) stb->st_gid, (long) sta.st_gid); -		} -		return TRUE; -	} - -	return FALSE; -} -/* -**  DFOPEN -- determined file open -** -**	This routine has the semantics of open, except that it will -**	keep trying a few times to make this happen.  The idea is that -**	on very loaded systems, we may run out of resources (inodes, -**	whatever), so this tries to get around it. -*/ - -int -dfopen(filename, omode, cmode, sff) -	char *filename; -	int omode; -	int cmode; -	int sff; -{ -	register int tries; -	int fd; -	struct stat st; - -	for (tries = 0; tries < 10; tries++) -	{ -		sleep((unsigned) (10 * tries)); -		errno = 0; -		fd = open(filename, omode, cmode); -		if (fd >= 0) -			break; -		switch (errno) -		{ -		  case ENFILE:		/* system file table full */ -		  case EINTR:		/* interrupted syscall */ -#ifdef ETXTBSY -		  case ETXTBSY:		/* Apollo: net file locked */ -#endif -			continue; -		} -		break; -	} -	if (!bitset(SFF_NOLOCK, sff) && -	    fd >= 0 && -	    fstat(fd, &st) >= 0 && -	    S_ISREG(st.st_mode)) -	{ -		int locktype; - -		/* lock the file to avoid accidental conflicts */ -		if ((omode & O_ACCMODE) != O_RDONLY) -			locktype = LOCK_EX; -		else -			locktype = LOCK_SH; -		(void) lockfile(fd, filename, NULL, locktype); -		errno = 0; -	} -	return fd; -} diff --git a/contrib/sendmail/src/sendmail.hf b/contrib/sendmail/src/sendmail.hf deleted file mode 100644 index 0952963b8bd2d..0000000000000 --- a/contrib/sendmail/src/sendmail.hf +++ /dev/null @@ -1,124 +0,0 @@ -cpyr -cpyr	Copyright (c) 1998 Sendmail, Inc.  All rights reserved. -cpyr	Copyright (c) 1983, 1995-1997 Eric P. Allman.  All rights reserved. -cpyr	Copyright (c) 1988, 1993 -cpyr	    The Regents of the University of California.  All rights reserved. -cpyr	 -cpyr -cpyr	By using this file, you agree to the terms and conditions set -cpyr	forth in the LICENSE file which can be found at the top level of -cpyr	the sendmail distribution. -cpyr -cpyr	@(#)sendmail.hf	8.18 (Berkeley) 11/19/1998 -cpyr -smtp	Topics: -smtp		HELO	EHLO	MAIL	RCPT	DATA -smtp		RSET	NOOP	QUIT	HELP	VRFY -smtp		EXPN	VERB	ETRN	DSN -smtp	For more info use "HELP <topic>". -smtp	To report bugs in the implementation send email to -smtp		sendmail-bugs@sendmail.org. -smtp	For local information send email to Postmaster at your site. -help	HELP [ <topic> ] -help		The HELP command gives help info. -helo	HELO <hostname> -helo		Introduce yourself. -ehlo	EHLO <hostname> -ehlo		Introduce yourself, and request extended SMTP mode. -ehlo	Possible replies include: -ehlo		SEND		Send as mail			[RFC821] -ehlo		SOML		Send as mail or terminal	[RFC821] -ehlo		SAML		Send as mail and terminal	[RFC821] -ehlo		EXPN		Expand the mailing list		[RFC821] -ehlo		HELP		Supply helpful information	[RFC821] -ehlo		TURN		Turn the operation around	[RFC821] -ehlo		8BITMIME	Use 8-bit data			[RFC1652] -ehlo		SIZE		Message size declaration	[RFC1870] -ehlo		VERB		Verbose				[Allman] -ehlo		ONEX		One message transaction only	[Allman] -ehlo		CHUNKING	Chunking			[RFC1830] -ehlo		BINARYMIME	Binary MIME			[RFC1830] -ehlo		PIPELINING	Command Pipelining		[RFC1854] -ehlo		DSN		Delivery Status Notification	[RFC1891] -ehlo		ETRN		Remote Message Queue Starting	[RFC1985] -ehlo		XUSR		Initial (user) submission	[Allman] -mail	MAIL FROM: <sender> [ <parameters> ] -mail		Specifies the sender.  Parameters are ESMTP extensions. -mail		See "HELP DSN" for details. -rcpt	RCPT TO: <recipient> [ <parameters> ] -rcpt		Specifies the recipient.  Can be used any number of times. -rcpt		Parameters are ESMTP extensions.  See "HELP DSN" for details. -data	DATA -data		Following text is collected as the message. -data		End with a single dot. -rset	RSET -rset		Resets the system. -quit	QUIT -quit		Exit sendmail (SMTP). -verb	VERB -verb		Go into verbose mode.  This sends 0xy responses that are -verb		not RFC821 standard (but should be)  They are recognized -verb		by humans and other sendmail implementations. -vrfy	VRFY <recipient> -vrfy		Verify an address.  If you want to see what it aliases -vrfy		to, use EXPN instead. -expn	EXPN <recipient> -expn		Expand an address.  If the address indicates a mailing -expn		list, return the contents of that list. -noop	NOOP -noop		Do nothing. -send	SEND FROM: <sender> -send		replaces the MAIL command, and can be used to send -send		directly to a users terminal.  Not supported in this -send		implementation. -soml	SOML FROM: <sender> -soml		Send or mail.  If the user is logged in, send directly, -soml		otherwise mail.  Not supported in this implementation. -saml	SAML FROM: <sender> -saml		Send and mail.  Send directly to the user's terminal, -saml		and also mail a letter.  Not supported in this -saml		implementation. -turn	TURN -turn		Reverses the direction of the connection.  Not currently -turn		implemented. -etrn	ETRN [ <hostname> | @<domain> | #<queuename> ] -etrn		Run the queue for the specified <hostname>, or -etrn		all hosts within a given <domain>, or a specially-named -etrn		<queuename> (implementation-specific). -dsn	MAIL FROM: <sender> [ RET={ FULL | HDRS} ] [ ENVID=<envid> ] -dsn	RCPT TO: <recipient> [ NOTIFY={NEVER,SUCCESS,FAILURE,DELAY} ] -dsn	                     [ ORCPT=<recipient> ] -dsn		SMTP Delivery Status Notifications. -dsn	Descriptions: -dsn		RET	Return either the full message or only headers. -dsn		ENVID	Sender's "envelope identifier" for tracking. -dsn		NOTIFY	When to send a DSN. Multiple options are OK, comma- -dsn		        delimited. NEVER must appear by itself. -dsn		ORCPT	Original recipient. --bt	Help for test mode: --bt	?                :this help message. --bt	.Dmvalue         :define macro `m' to `value'. --bt	.Ccvalue         :add `value' to class `c'. --bt	=Sruleset        :dump the contents of the indicated ruleset. --bt	=M               :display the known mailers. --bt	-ddebug-spec     :equivalent to the command-line -d debug flag. --bt	$m               :print the value of macro $m. --bt	$=c              :print the contents of class $=c. --bt	/mx host         :returns the MX records for `host'. --bt	/parse address   :parse address, returning the value of crackaddr, and --bt	                  the parsed address (same as -bv). --bt	/try mailer addr :rewrite address into the form it will have when --bt	                  presented to the indicated mailer. --bt	/tryflags flags  :set flags used by parsing.  The flags can be `H' for --bt	                  Header or `E' for Envelope, and `S' for Sender or `R' --bt	                  for Recipient.  These can be combined, `HR' sets --bt			  flags for header recipients. --bt	/canon hostname  :try to canonify hostname. --bt	/map mapname key :look up `key' in the indicated `mapname'. --bt	rules addr	 :run the indicated address through the named rules. --bt			  Rules can be a comma separated list of rules. -control	Help for smcontrol: -control	help		This message. -control	restart		Restart sendmail. -control	shutdown	Shutdown sendmail. -control	status		Show sendmail status. diff --git a/contrib/sendmail/src/snprintf.c b/contrib/sendmail/src/snprintf.c deleted file mode 100644 index 3e07e1b9920f8..0000000000000 --- a/contrib/sendmail/src/snprintf.c +++ /dev/null @@ -1,428 +0,0 @@ -/* - * Copyright (c) 1998 Sendmail, Inc.  All rights reserved. - * Copyright (c) 1997 Eric P. Allman.  All rights reserved. - * Copyright (c) 1988, 1993 - *	The Regents of the University of California.  All rights reserved. - * - * By using this file, you agree to the terms and conditions set - * forth in the LICENSE file which can be found at the top level of - * the sendmail distribution. - * - */ - -#ifndef lint -static char sccsid[] = "@(#)snprintf.c	8.12 (Berkeley) 10/13/1998"; -#endif /* not lint */ - -#include "sendmail.h" - -/* -**  SNPRINTF, VSNPRINT -- counted versions of printf -** -**	These versions have been grabbed off the net.  They have been -**	cleaned up to compile properly and support for .precision and -**	%lx has been added. -*/ - -/************************************************************** - * Original: - * Patrick Powell Tue Apr 11 09:48:21 PDT 1995 - * A bombproof version of doprnt (sm_dopr) included. - * Sigh.  This sort of thing is always nasty do deal with.  Note that - * the version here does not include floating point... - * - * snprintf() is used instead of sprintf() as it does limit checks - * for string length.  This covers a nasty loophole. - * - * The other functions are there to prevent NULL pointers from - * causing nast effects. - **************************************************************/ - -/*static char _id[] = "$Id: snprintf.c,v 1.2 1995/10/09 11:19:47 roberto Exp $";*/ -void	sm_dopr(); -char	*DoprEnd; -int	SnprfOverflow; - -#if !HASSNPRINTF - -/* VARARGS3 */ -int -# ifdef __STDC__ -snprintf(char *str, size_t count, const char *fmt, ...) -# else -snprintf(str, count, fmt, va_alist) -	char *str; -	size_t count; -	const char *fmt; -	va_dcl -#endif -{ -	int len; -	VA_LOCAL_DECL - -	VA_START(fmt); -	len = vsnprintf(str, count, fmt, ap); -	VA_END; -	return len; -} - - -# ifndef luna2 -int -vsnprintf(str, count, fmt, args) -	char *str; -	size_t count; -	const char *fmt; -	va_list args; -{ -	str[0] = 0; -	DoprEnd = str + count - 1; -	SnprfOverflow = 0; -	sm_dopr( str, fmt, args ); -	if (count > 0) -		DoprEnd[0] = 0; -	if (SnprfOverflow && tTd(57, 2)) -		printf("\nvsnprintf overflow, len = %ld, str = %s", -			(long) count, shortenstring(str, MAXSHORTSTR)); -	return strlen(str); -} - -# endif /* !luna2 */ -#endif /* !HASSNPRINTF */ - -/* - * sm_dopr(): poor man's version of doprintf - */ - -void fmtstr __P((char *value, int ljust, int len, int zpad, int maxwidth)); -void fmtnum __P((long value, int base, int dosign, int ljust, int len, int zpad)); -void dostr __P(( char * , int )); -char *output; -void dopr_outch __P(( int c )); -int	SyslogErrno; - -void -sm_dopr( buffer, format, args ) -       char *buffer; -       const char *format; -       va_list args; -{ -       int ch; -       long value; -       int longflag  = 0; -       int pointflag = 0; -       int maxwidth  = 0; -       char *strvalue; -       int ljust; -       int len; -       int zpad; -# if !HASSTRERROR && !defined(ERRLIST_PREDEFINED) -	extern char *sys_errlist[]; -	extern int sys_nerr; -# endif - - -       output = buffer; -       while( (ch = *format++) != '\0' ){ -	       switch( ch ){ -	       case '%': -		       ljust = len = zpad = maxwidth = 0; -		       longflag = pointflag = 0; -	       nextch: -		       ch = *format++; -		       switch( ch ){ -		       case 0: -			       dostr( "**end of format**" , 0); -			       return; -		       case '-': ljust = 1; goto nextch; -		       case '0': /* set zero padding if len not set */ -			       if(len==0 && !pointflag) zpad = '0'; -		       case '1': case '2': case '3': -		       case '4': case '5': case '6': -		       case '7': case '8': case '9': -			       if (pointflag) -				 maxwidth = maxwidth*10 + ch - '0'; -			       else -				 len = len*10 + ch - '0'; -			       goto nextch; -		       case '*':  -			       if (pointflag) -				 maxwidth = va_arg( args, int ); -			       else -				 len = va_arg( args, int ); -			       goto nextch; -		       case '.': pointflag = 1; goto nextch; -		       case 'l': longflag = 1; goto nextch; -		       case 'u': case 'U': -			       /*fmtnum(value,base,dosign,ljust,len,zpad) */ -			       if( longflag ){ -				       value = va_arg( args, long ); -			       } else { -				       value = va_arg( args, int ); -			       } -			       fmtnum( value, 10,0, ljust, len, zpad ); break; -		       case 'o': case 'O': -			       /*fmtnum(value,base,dosign,ljust,len,zpad) */ -			       if( longflag ){ -				       value = va_arg( args, long ); -			       } else { -				       value = va_arg( args, int ); -			       } -			       fmtnum( value, 8,0, ljust, len, zpad ); break; -		       case 'd': case 'D': -			       if( longflag ){ -				       value = va_arg( args, long ); -			       } else { -				       value = va_arg( args, int ); -			       } -			       fmtnum( value, 10,1, ljust, len, zpad ); break; -		       case 'x': -			       if( longflag ){ -				       value = va_arg( args, long ); -			       } else { -				       value = va_arg( args, int ); -			       } -			       fmtnum( value, 16,0, ljust, len, zpad ); break; -		       case 'X': -			       if( longflag ){ -				       value = va_arg( args, long ); -			       } else { -				       value = va_arg( args, int ); -			       } -			       fmtnum( value,-16,0, ljust, len, zpad ); break; -		       case 's': -			       strvalue = va_arg( args, char *); -			       if (maxwidth > 0 || !pointflag) { -				 if (pointflag && len > maxwidth) -				   len = maxwidth; /* Adjust padding */ -				 fmtstr( strvalue,ljust,len,zpad, maxwidth); -			       } -			       break; -		       case 'c': -			       ch = va_arg( args, int ); -			       dopr_outch( ch ); break; -                       case 'm': -#if HASSTRERROR -                               dostr(strerror(SyslogErrno), 0); -#else -                               if (SyslogErrno < 0 || SyslogErrno >= sys_nerr)  -                               { -                                   dostr("Error ", 0); -                                   fmtnum(SyslogErrno, 10, 0, 0, 0, 0); -                               } -                               else  -                                   dostr((char *)sys_errlist[SyslogErrno], 0); -#endif -			       break; - -		       case '%': dopr_outch( ch ); continue; -		       default: -			       dostr(  "???????" , 0); -		       } -		       break; -	       default: -		       dopr_outch( ch ); -		       break; -	       } -       } -       *output = 0; -} - -void -fmtstr(  value, ljust, len, zpad, maxwidth ) -       char *value; -       int ljust, len, zpad, maxwidth; -{ -       int padlen, strlen;     /* amount to pad */ - -       if( value == 0 ){ -	       value = "<NULL>"; -       } -       for( strlen = 0; value[strlen]; ++ strlen ); /* strlen */ -       if (strlen > maxwidth && maxwidth) -	 strlen = maxwidth; -       padlen = len - strlen; -       if( padlen < 0 ) padlen = 0; -       if( ljust ) padlen = -padlen; -       while( padlen > 0 ) { -	       dopr_outch( ' ' ); -	       --padlen; -       } -       dostr( value, maxwidth ); -       while( padlen < 0 ) { -	       dopr_outch( ' ' ); -	       ++padlen; -       } -} - -void -fmtnum(  value, base, dosign, ljust, len, zpad ) -       long value; -       int base, dosign, ljust, len, zpad; -{ -       int signvalue = 0; -       unsigned long uvalue; -       char convert[20]; -       int place = 0; -       int padlen = 0; /* amount to pad */ -       int caps = 0; - -       /* DEBUGP(("value 0x%x, base %d, dosign %d, ljust %d, len %d, zpad %d\n", -	       value, base, dosign, ljust, len, zpad )); */ -       uvalue = value; -       if( dosign ){ -	       if( value < 0 ) { -		       signvalue = '-'; -		       uvalue = -value; -	       } -       } -       if( base < 0 ){ -	       caps = 1; -	       base = -base; -       } -       do{ -	       convert[place++] = -		       (caps? "0123456789ABCDEF":"0123456789abcdef") -			[uvalue % (unsigned)base  ]; -	       uvalue = (uvalue / (unsigned)base ); -       }while(uvalue); -       convert[place] = 0; -       padlen = len - place; -       if( padlen < 0 ) padlen = 0; -       if( ljust ) padlen = -padlen; -       /* DEBUGP(( "str '%s', place %d, sign %c, padlen %d\n", -	       convert,place,signvalue,padlen)); */ -       if( zpad && padlen > 0 ){ -	       if( signvalue ){ -		       dopr_outch( signvalue ); -		       --padlen; -		       signvalue = 0; -	       } -	       while( padlen > 0 ){ -		       dopr_outch( zpad ); -		       --padlen; -	       } -       } -       while( padlen > 0 ) { -	       dopr_outch( ' ' ); -	       --padlen; -       } -       if( signvalue ) dopr_outch( signvalue ); -       while( place > 0 ) dopr_outch( convert[--place] ); -       while( padlen < 0 ){ -	       dopr_outch( ' ' ); -	       ++padlen; -       } -} - -void -dostr( str , cut) -     char *str; -     int cut; -{ -  if (cut) { -    while(*str && cut-- > 0) dopr_outch(*str++); -  } else { -    while(*str) dopr_outch(*str++); -  } -} - -void -dopr_outch( c ) -       int c; -{ -#if 0 -       if( iscntrl(c) && c != '\n' && c != '\t' ){ -	       c = '@' + (c & 0x1F); -	       if( DoprEnd == 0 || output < DoprEnd ) -		       *output++ = '^'; -       } -#endif -       if( DoprEnd == 0 || output < DoprEnd ) -	       *output++ = c; -       else -		SnprfOverflow++; -} - -/* -**  QUAD_TO_STRING -- Convert a quad type to a string. -** -**	Convert a quad type to a string.  This must be done -**	separately as %lld/%qd are not supported by snprint() -**	and adding support would slow down systems which only -**	emulate the data type. -** -**	Parameters: -**		value -- number to convert to a string. -** -**	Returns: -**		pointer to a string. -*/ - -char * -quad_to_string(value) -	QUAD_T value; -{ -	char *fmtstr; -	static char buf[64]; - -	/* -	**  Use sprintf() instead of snprintf() since snprintf() -	**  does not support %qu or %llu.  The buffer is large enough -	**  to hold the string so there is no danger of buffer -	**  overflow. -	*/ - -#if NEED_PERCENTQ -	fmtstr = "%qu"; -#else -	fmtstr = "%llu"; -#endif -	sprintf(buf, fmtstr, value); -	return buf; -} -/* -**  SHORTENSTRING -- return short version of a string -** -**	If the string is already short, just return it.  If it is too -**	long, return the head and tail of the string. -** -**	Parameters: -**		s -- the string to shorten. -**		m -- the max length of the string. -** -**	Returns: -**		Either s or a short version of s. -*/ - -char * -shortenstring(s, m) -	register const char *s; -	int m; -{ -	int l; -	static char buf[MAXSHORTSTR + 1]; - -	l = strlen(s); -	if (l < m) -		return (char *) s; -	if (m > MAXSHORTSTR) -		m = MAXSHORTSTR; -	else if (m < 10) -	{ -		if (m < 5) -		{ -			strncpy(buf, s, m); -			buf[m] = '\0'; -			return buf; -		} -		strncpy(buf, s, m - 3); -		strcpy(buf + m - 3, "..."); -		return buf; -	} -	m = (m - 3) / 2; -	strncpy(buf, s, m); -	strcpy(buf + m, "..."); -	strcpy(buf + m + 3, s + l - m); -	return buf; -} diff --git a/contrib/sendmail/src/useful.h b/contrib/sendmail/src/useful.h deleted file mode 100644 index a19dd9e0305d6..0000000000000 --- a/contrib/sendmail/src/useful.h +++ /dev/null @@ -1,58 +0,0 @@ -/* - * Copyright (c) 1998 Sendmail, Inc.  All rights reserved. - * Copyright (c) 1995-1997 Eric P. Allman.  All rights reserved. - * Copyright (c) 1988, 1993 - *	The Regents of the University of California.  All rights reserved. - * - * By using this file, you agree to the terms and conditions set - * forth in the LICENSE file which can be found at the top level of - * the sendmail distribution. - * - * - *	@(#)useful.h	8.12 (Berkeley) 5/19/1998 - */ - -# include <sys/types.h> - -/* support for bool type */ -typedef int	bool; -#ifndef TRUE -# define TRUE	1 -# define FALSE	0 -#endif - -# ifndef NULL -# define NULL	0 -# endif /* NULL */ - -/* bit hacking */ -# define bitset(bit, word)	(((word) & (bit)) != 0) - -/* some simple functions */ -# ifndef max -# define max(a, b)	((a) > (b) ? (a) : (b)) -# define min(a, b)	((a) < (b) ? (a) : (b)) -# endif - -/* assertions */ -# ifndef NASSERT -# define ASSERT(expr, msg, parm)\ -	if (!(expr))\ -	{\ -		fprintf(stderr, "assertion botch: %s:%d: ", __FILE__, __LINE__);\ -		fprintf(stderr, msg, parm);\ -	} -# else /* NASSERT */ -# define ASSERT(expr, msg, parm) -# endif /* NASSERT */ - -/* sccs id's */ -# ifndef lint -#  ifdef __STDC__ -#   define SCCSID(arg)	static char SccsId[] = #arg; -#  else -#   define SCCSID(arg)	static char SccsId[] = "arg"; -#  endif -# else -#  define SCCSID(arg) -# endif | 
