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

📄 getset.c

📁 minix3的源码
💻 C
字号:
/* This file handles the 4 system calls that get and set uids and gids. * It also handles getpid(), setsid(), and getpgrp().  The code for each * one is so tiny that it hardly seemed worthwhile to make each a separate * function. */#include "pm.h"#include <minix/callnr.h>#include <signal.h>#include "mproc.h"#include "param.h"/*===========================================================================* *				do_getset				     * *===========================================================================*/PUBLIC int do_getset(){/* Handle GETUID, GETGID, GETPID, GETPGRP, SETUID, SETGID, SETSID.  The four * GETs and SETSID return their primary results in 'r'.  GETUID, GETGID, and * GETPID also return secondary results (the effective IDs, or the parent * process ID) in 'reply_res2', which is returned to the user. */  register struct mproc *rmp = mp;  register int r;  switch(call_nr) {	case GETUID:		r = rmp->mp_realuid;		rmp->mp_reply.reply_res2 = rmp->mp_effuid;		break;	case GETGID:		r = rmp->mp_realgid;		rmp->mp_reply.reply_res2 = rmp->mp_effgid;		break;	case GETPID:		r = mproc[who].mp_pid;		rmp->mp_reply.reply_res2 = mproc[rmp->mp_parent].mp_pid;		if (m_in.procnr >= 0 && m_in.procnr < NR_PROCS) 			rmp->mp_reply.reply_res3 = mproc[m_in.procnr].mp_pid;		break;	case SETUID:		if (rmp->mp_realuid != (uid_t) m_in.usr_id && 				rmp->mp_effuid != SUPER_USER)			return(EPERM);		rmp->mp_realuid = (uid_t) m_in.usr_id;		rmp->mp_effuid = (uid_t) m_in.usr_id;		tell_fs(SETUID, who, rmp->mp_realuid, rmp->mp_effuid);		r = OK;		break;	case SETGID:		if (rmp->mp_realgid != (gid_t) m_in.grp_id && 				rmp->mp_effuid != SUPER_USER)			return(EPERM);		rmp->mp_realgid = (gid_t) m_in.grp_id;		rmp->mp_effgid = (gid_t) m_in.grp_id;		tell_fs(SETGID, who, rmp->mp_realgid, rmp->mp_effgid);		r = OK;		break;	case SETSID:		if (rmp->mp_procgrp == rmp->mp_pid) return(EPERM);		rmp->mp_procgrp = rmp->mp_pid;		tell_fs(SETSID, who, 0, 0);		/* fall through */	case GETPGRP:		r = rmp->mp_procgrp;		break;	default:		r = EINVAL;		break;	  }  return(r);}

⌨️ 快捷键说明

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