mirror of
git://git.code.sf.net/p/zsh/code
synced 2025-01-01 05:16:05 +01:00
40068: Abort execution when setuid/setgid fail.
The incumbent code would print an error message and continue execution with the previous uid/gid values, not even setting lastval: % UID=42 id -u; echo $? zsh: failed to change user ID: operation not permitted 1000 0 %
This commit is contained in:
parent
fd2ca229dd
commit
334ed65e27
3 changed files with 17 additions and 4 deletions
|
@ -1,5 +1,8 @@
|
|||
2016-12-03 Daniel Shahaf <d.s@daniel.shahaf.name>
|
||||
|
||||
* 40068: Src/params.c, Test/B02typeset.ztst: Abort execution
|
||||
when setuid/setgid fail.
|
||||
|
||||
* 40067: Src/Zle/comp.h, Src/Zle/complete.c, Src/params.c:
|
||||
internal: Document 'cmatcher', parse_cmatcher(), 'comptoend',
|
||||
unsetparam_pm(), and getindex().
|
||||
|
|
|
@ -4077,7 +4077,7 @@ uidsetfn(UNUSED(Param pm), zlong x)
|
|||
{
|
||||
#ifdef HAVE_SETUID
|
||||
if (setuid((uid_t)x))
|
||||
zwarn("failed to change user ID: %e", errno);
|
||||
zerr("failed to change user ID: %e", errno);
|
||||
#endif
|
||||
}
|
||||
|
||||
|
@ -4098,7 +4098,7 @@ euidsetfn(UNUSED(Param pm), zlong x)
|
|||
{
|
||||
#ifdef HAVE_SETEUID
|
||||
if (seteuid((uid_t)x))
|
||||
zwarn("failed to change effective user ID: %e", errno);
|
||||
zerr("failed to change effective user ID: %e", errno);
|
||||
#endif
|
||||
}
|
||||
|
||||
|
@ -4119,7 +4119,7 @@ gidsetfn(UNUSED(Param pm), zlong x)
|
|||
{
|
||||
#ifdef HAVE_SETUID
|
||||
if (setgid((gid_t)x))
|
||||
zwarn("failed to change group ID: %e", errno);
|
||||
zerr("failed to change group ID: %e", errno);
|
||||
#endif
|
||||
}
|
||||
|
||||
|
@ -4140,7 +4140,7 @@ egidsetfn(UNUSED(Param pm), zlong x)
|
|||
{
|
||||
#ifdef HAVE_SETEUID
|
||||
if (setegid((gid_t)x))
|
||||
zwarn("failed to change effective group ID: %e", errno);
|
||||
zerr("failed to change effective group ID: %e", errno);
|
||||
#endif
|
||||
}
|
||||
|
||||
|
|
|
@ -711,3 +711,13 @@
|
|||
typeset isreadonly=still
|
||||
1:typeset returns status 1 if setting readonly variable
|
||||
?(eval):2: read-only variable: isreadonly
|
||||
|
||||
if (( UID )); then
|
||||
UID=$((UID+1)) date; echo "Status is printed, $?"
|
||||
else
|
||||
ZTST_skip="cannot test setuid error when tests run as superuser"
|
||||
fi
|
||||
0:when cannot change UID, the command isn't run
|
||||
# 'date' did not run.
|
||||
>Status is printed, 1
|
||||
?(eval):2: failed to change user ID: operation not permitted
|
||||
|
|
Loading…
Reference in a new issue