seteuid() and setegid()
This commit is contained in:
@@ -108,6 +108,8 @@ PUBLIC _PROTOTYPE (int (*call_vec[]), (void) ) = {
|
||||
no_sys, /* 88 = getpriority */
|
||||
no_sys, /* 89 = setpriority */
|
||||
no_sys, /* 90 = gettimeofday */
|
||||
no_sys, /* 91 = seteuid */
|
||||
no_sys, /* 92 = setegid */
|
||||
};
|
||||
/* This should not fail with "array size is negative": */
|
||||
extern int dummy[sizeof(call_vec) == NCALLS * sizeof(call_vec[0]) ? 1 : -1];
|
||||
|
||||
+4
-2
@@ -42,21 +42,23 @@ PUBLIC int do_getset()
|
||||
rmp->mp_reply.reply_res3 = mproc[m_in.procnr].mp_pid;
|
||||
break;
|
||||
|
||||
case SETEUID:
|
||||
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;
|
||||
if(call_nr == SETUID) 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 SETEGID:
|
||||
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;
|
||||
if(call_nr == SETGID) 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;
|
||||
|
||||
@@ -107,6 +107,8 @@ _PROTOTYPE (int (*call_vec[NCALLS]), (void) ) = {
|
||||
do_getsetpriority, /* 88 = getpriority */
|
||||
do_getsetpriority, /* 89 = setpriority */
|
||||
do_time, /* 90 = gettimeofday */
|
||||
do_getset, /* 91 = seteuid */
|
||||
do_getset /* 92 = setegid */
|
||||
};
|
||||
/* This should not fail with "array size is negative": */
|
||||
extern int dummy[sizeof(call_vec) == NCALLS * sizeof(call_vec[0]) ? 1 : -1];
|
||||
|
||||
Reference in New Issue
Block a user