mirror of
git://git.code.sf.net/p/zsh/code
synced 2025-09-17 02:51:01 +02: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>
|
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:
|
* 40067: Src/Zle/comp.h, Src/Zle/complete.c, Src/params.c:
|
||||||
internal: Document 'cmatcher', parse_cmatcher(), 'comptoend',
|
internal: Document 'cmatcher', parse_cmatcher(), 'comptoend',
|
||||||
unsetparam_pm(), and getindex().
|
unsetparam_pm(), and getindex().
|
||||||
|
|
|
@ -4077,7 +4077,7 @@ uidsetfn(UNUSED(Param pm), zlong x)
|
||||||
{
|
{
|
||||||
#ifdef HAVE_SETUID
|
#ifdef HAVE_SETUID
|
||||||
if (setuid((uid_t)x))
|
if (setuid((uid_t)x))
|
||||||
zwarn("failed to change user ID: %e", errno);
|
zerr("failed to change user ID: %e", errno);
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -4098,7 +4098,7 @@ euidsetfn(UNUSED(Param pm), zlong x)
|
||||||
{
|
{
|
||||||
#ifdef HAVE_SETEUID
|
#ifdef HAVE_SETEUID
|
||||||
if (seteuid((uid_t)x))
|
if (seteuid((uid_t)x))
|
||||||
zwarn("failed to change effective user ID: %e", errno);
|
zerr("failed to change effective user ID: %e", errno);
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -4119,7 +4119,7 @@ gidsetfn(UNUSED(Param pm), zlong x)
|
||||||
{
|
{
|
||||||
#ifdef HAVE_SETUID
|
#ifdef HAVE_SETUID
|
||||||
if (setgid((gid_t)x))
|
if (setgid((gid_t)x))
|
||||||
zwarn("failed to change group ID: %e", errno);
|
zerr("failed to change group ID: %e", errno);
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -4140,7 +4140,7 @@ egidsetfn(UNUSED(Param pm), zlong x)
|
||||||
{
|
{
|
||||||
#ifdef HAVE_SETEUID
|
#ifdef HAVE_SETEUID
|
||||||
if (setegid((gid_t)x))
|
if (setegid((gid_t)x))
|
||||||
zwarn("failed to change effective group ID: %e", errno);
|
zerr("failed to change effective group ID: %e", errno);
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -711,3 +711,13 @@
|
||||||
typeset isreadonly=still
|
typeset isreadonly=still
|
||||||
1:typeset returns status 1 if setting readonly variable
|
1:typeset returns status 1 if setting readonly variable
|
||||||
?(eval):2: read-only variable: isreadonly
|
?(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