⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 setproctitle.c

📁 sock protocol ,it is useful!
💻 C
字号:
/* $Id: setproctitle.c,v 1.4 1999/05/13 16:35:57 karls Exp $ */#ifdef HAVE_CONFIG_H#include "autoconf.h"#endif  /* HAVE_CONFIG_H */#include "common.h"#if !HAVE_SETPROCTITLE#if 0/* ---> minor changes were made to include some macros from other files   in the sendmail distribution and and remove others *//* * Copyright (c) 1983, 1995-1997 Eric P. Allman * Copyright (c) 1988, 1993 *	The Regents of the University of California.  All rights reserved. * * 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. */#if 0#ifndef lintstatic char sccsid[] = "@(#)conf.c	8.379 (Berkeley) 10/20/97";#endif /* not lint */#endif#if 0# include "sendmail.h"# include "pathnames.h"# include <sys/ioctl.h># include <sys/param.h>#endif# ifdef STDC_HEADERS#if 0# include <stdarg.h>#endif# define VA_LOCAL_DECL	va_list ap;# define VA_START(f)	va_start(ap, f)# define VA_END		va_end(ap)# else#if 0# include <varargs.h>#endif# define VA_LOCAL_DECL	va_list ap;# define VA_START(f)	va_start(ap)# define VA_END		va_end(ap)# endif/* return number of bytes left in a buffer */#define SPACELEFT(buf, ptr)	(sizeof buf - ((ptr) - buf))/***  SETPROCTITLE -- set process title for ps****	Parameters:**		fmt -- a printf style format string.**		a, b, c -- possible parameters to fmt.****	Returns:**		none.****	Side Effects:**		Clobbers argv of our main procedure so ps(1) will**		display the title.*/#define SPT_NONE	0	/* don't use it at all */#define SPT_REUSEARGV	1	/* cover argv with title information */#define SPT_BUILTIN	2	/* use libc builtin */#define SPT_PSTAT	3	/* use pstat(PSTAT_SETCMD, ...) */#define SPT_PSSTRINGS	4	/* use PS_STRINGS->... */#define SPT_SYSMIPS	5	/* use sysmips() supported by NEWS-OS 6 */#define SPT_SCO		6	/* write kernel u. area */#define SPT_CHANGEARGV	7	/* write our own strings into argv[] */# define MAXLINE	2048		/* max line length */#ifndef SPT_TYPE# define SPT_TYPE	SPT_REUSEARGV#endif#if SPT_TYPE != SPT_NONE && SPT_TYPE != SPT_BUILTIN# if SPT_TYPE == SPT_PSTAT#  include <sys/pstat.h># endif# if SPT_TYPE == SPT_PSSTRINGS#  include <machine/vmparam.h>#  include <sys/exec.h>#  ifndef PS_STRINGS	/* hmmmm....  apparently not available after all */#   undef SPT_TYPE#   define SPT_TYPE	SPT_REUSEARGV#  else#   ifndef NKPDE			/* FreeBSD 2.0 */#    define NKPDE 63typedef unsigned int	*pt_entry_t;#   endif#  endif# endif# if SPT_TYPE == SPT_PSSTRINGS || SPT_TYPE == SPT_CHANGEARGV#  define SETPROC_STATIC	static# else#  define SETPROC_STATIC# endif# if SPT_TYPE == SPT_SYSMIPS#  include <sys/sysmips.h>#  include <sys/sysnews.h># endif# if SPT_TYPE == SPT_SCO#  include <sys/immu.h>#  include <sys/dir.h>#  include <sys/user.h>#  include <sys/fs/s5param.h>#  if PSARGSZ > MAXLINE#   define SPT_BUFSIZE	PSARGSZ#  endif# endif# ifndef SPT_PADCHAR#  define SPT_PADCHAR	' '# endif# ifndef SPT_BUFSIZE#  define SPT_BUFSIZE	MAXLINE# endif#endif /* SPT_TYPE != SPT_NONE && SPT_TYPE != SPT_BUILTIN *//***  Pointers for setproctitle.**	This allows "ps" listings to give more useful information.*/char		**Argv = NULL;		/* pointer to argument vector */char		*LastArgv = NULL;	/* end of argv */intinitsetproctitle(argc, argv, envp)	int argc;	char **argv;	char **envp;{	register int i, envpsize = 0;	extern char **environ;	/*	**  Move the environment so setproctitle can use the space at	**  the top of memory.	*/	for (i = 0; envp[i] != NULL; i++)		envpsize += strlen(envp[i]) + 1;	environ = (char **) malloc(sizeof (char *) * (i + 1));	if (environ == NULL)		return -1;	/* ---> removed some macro calls */	for (i = 0; envp[i] != NULL; i++) {		size_t len = strlen(envp[i]) + 1;		char *p = malloc(len);		if (p == NULL)			return -1;		environ[i] = strncpy(p, envp[i], len);		p[len - 1] = NUL;	}	environ[i] = NULL;	/*	**  Save start and extent of argv for setproctitle.	*/	Argv = argv;	/*	**  Find the last environment variable within sendmail's	**  process memory area.	*/	while (i > 0 && (envp[i - 1] < argv[0] ||			 envp[i - 1] > (argv[argc - 1] +					strlen(argv[argc - 1]) + 1 + envpsize)))		i--;	if (i > 0)		LastArgv = envp[i - 1] + strlen(envp[i - 1]);	else		LastArgv = argv[argc - 1] + strlen(argv[argc - 1]);	return 0;}#if SPT_TYPE != SPT_BUILTIN/*VARARGS1*/void# ifdef STDC_HEADERSsetproctitle(const char *fmt, ...)# elsesetproctitle(fmt, va_alist)	const char *fmt;	va_dcl# endif /* STDC_HEADERS */{# if SPT_TYPE != SPT_NONE	register char *p;	register int i;	SETPROC_STATIC char buf[SPT_BUFSIZE];	VA_LOCAL_DECL#  if SPT_TYPE == SPT_PSTAT	union pstun pst;#  endif#  if SPT_TYPE == SPT_SCO	off_t seek_off;	static int kmem = -1;	static int kmempid = -1;	struct user u;#  endif	p = buf;#if 0#ifdef SOCKS_SERVER /* XXX only complied once now */	snprintf(p, SPACELEFT(buf, p), "%s: ", __progname);	p += strlen(p);#endif  /* SOCKS_SERVER */#endif	/* print the argument string */	VA_START(fmt);	vsnprintf(p, SPACELEFT(buf, p), fmt, ap);	VA_END;	i = strlen(buf);#  if SPT_TYPE == SPT_PSTAT	pst.pst_command = buf;	pstat(PSTAT_SETCMD, pst, i, 0, 0);#  endif#  if SPT_TYPE == SPT_PSSTRINGS	PS_STRINGS->ps_nargvstr = 1;	PS_STRINGS->ps_argvstr = buf;#  endif#  if SPT_TYPE == SPT_SYSMIPS	sysmips(SONY_SYSNEWS, NEWS_SETPSARGS, buf);#  endif#  if SPT_TYPE == SPT_SCO	if (kmem < 0 || kmempid != getpid())	{		if (kmem >= 0)			close(kmem);		kmem = open(_PATH_KMEM, O_RDWR, 0);		if (kmem < 0)			return;		(void) fcntl(kmem, F_SETFD, 1);		kmempid = getpid();	}	buf[PSARGSZ - 1] = '\0';	seek_off = UVUBLK + (off_t) u.u_psargs - (off_t) &u;	if (lseek(kmem, (off_t) seek_off, SEEK_SET) == seek_off)		(void) write(kmem, buf, PSARGSZ);#  endif#  if SPT_TYPE == SPT_REUSEARGV	if (i > LastArgv - Argv[0] - 2)	{		i = LastArgv - Argv[0] - 2;		buf[i] = '\0';	}	(void) strcpy(Argv[0], buf);	p = &Argv[0][i];	while (p < LastArgv)		*p++ = SPT_PADCHAR;	Argv[1] = NULL;#  endif#  if SPT_TYPE == SPT_CHANGEARGV	Argv[0] = buf;	Argv[1] = 0;#  endif# endif /* SPT_TYPE != SPT_NONE */}#endif /* SPT_TYPE != SPT_BUILTIN */#else /* !0 */intinitsetproctitle(argc, argv, envp)	int argc;	char **argv;	char **envp;{	return 0;}void#ifdef STDC_HEADERSsetproctitle(const char *fmt, ...)#elsesetproctitle(va_alist)	va_dcl#endif  /* STDC_HEADERS */{	return;}#endif /* 0 */#elsestatic void avoid_error __P((void));static void avoid_error(){	avoid_error();}#endif  /* !HAVE_SETPROCTITLE */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -