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

📄 uids.c

📁 linux集群服务器软件代码包
💻 C
字号:
/* $Id: uids.c,v 1.9 2004/02/17 22:11:59 lars Exp $ */#include <portability.h>#include <pwd.h>#include <sys/types.h>#include <unistd.h>#include <errno.h>#include <clplumbing/uids.h>#define	NOBODY	"nobody"#if defined(HAVE_SETEUID) && defined(HAVE_SETEGID) &&	\		 defined(_POSIX_SAVED_IDS)#	define	CAN_DROP_PRIVS	1#endif#ifndef CAN_DROP_PRIVS	int drop_privs(uid_t uid, gid_t gid)	{	return 0;	}	int return_to_orig_privs(void)		{	return 0;	}	int return_to_dropped_privs(void)	{	return 0;	}	int cl_have_full_privs(void)		{	return 0;	}#elsestatic int	anysaveduid = 0;static uid_t	nobodyuid=-1;static gid_t	nobodygid=-1;static uid_t	poweruid=-1;static gid_t	powergid=-1;static int	privileged_state = 1;/*	WARNING: uids are unsigned! */#define	WANT_NOBODY(uid)	((uid) == 0)int	/* Become nobody - and remember our original privileges */drop_privs(uid_t uid, gid_t gid){	int	rc;	gid_t	curgid = getgid();	if (!anysaveduid) {		poweruid=getuid();		powergid=curgid;	}	if (WANT_NOBODY(uid)) {		struct passwd*	p;		p = getpwnam(NOBODY);		if (p == NULL) {			return -1;		}		uid = p->pw_uid;		gid = p->pw_gid;	}	if (setegid(gid) < 0) {		return -1;	}	rc = seteuid(uid);	if (rc >= 0) {		anysaveduid = 1;		nobodyuid=uid;		nobodygid=gid;		privileged_state = 0;	}else{		/* Attempt to recover original privileges */		int	err = errno;		setegid(curgid);		errno = err;	}	return rc;}int	/* Return to our original privileges (if any) */return_to_orig_privs(){	if (!anysaveduid) {		return 0;	}	if (seteuid(poweruid) < 0) {		return -1;	}	privileged_state = 1;	return setegid(powergid);}int	/* Return to "nobody" level of privs (if any) */return_to_dropped_privs(void){	if (!anysaveduid) {		return 0;	}	setegid(nobodygid);	privileged_state = 0;	return seteuid(nobodyuid);}/* Return TRUE if we have full privileges at the moment */intcl_have_full_privs(void){	return privileged_state != 0;}#endif

⌨️ 快捷键说明

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