1
0
Fork 0
mirror of git://git.code.sf.net/p/cdesktopenv/code synced 2025-03-09 15:50:02 +00:00

Reenable the clobber method on UnixWare. (#160)

UnixWare's ps prefers to read psinfo (from the proc structure in
kernel memory) within /proc as an anti-Trojan horse measure.
Updates to argv[0] are still reflected within /proc/$pid/cmdline,
which is useful for diagnostic purposes.

src/cmd/ksh93/sh/main.c:
- Remove __USLC__ from the list of platforms excluded from the
  fixargs method.

src/cmd/ksh93/tests/basic.sh:
- Read /proc/$pid/cmdline instead of ps on UnixWare.
This commit is contained in:
Lev Kujawski 2021-01-23 14:31:47 -07:00 committed by GitHub
parent d2cc520883
commit e73696fd87
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 13 additions and 4 deletions

View file

@ -53,7 +53,7 @@
/* These routines are referenced by this module */
static void exfile(Shell_t*, Sfio_t*,int);
static void chkmail(Shell_t *shp, char*);
#if defined(_lib_fork) && !defined(_NEXT_SOURCE) && !defined(__USLC__) && !defined(__sun)
#if defined(_lib_fork) && !defined(_NEXT_SOURCE) && !defined(__sun)
static void fixargs(char**,int);
#else
# define fixargs(a,b)

View file

@ -712,19 +712,28 @@ getPsOutput() {
while [[ $actual == [[:space:]]* ]]; do actual=${actual#?}; done
while [[ $actual == *[[:space:]] ]]; do actual=${actual%?}; done
}
if [[ ! $(uname -s) =~ ^(SunOS|UnixWare)$ ]] &&
getCmdline() {
if [[ $(uname -s) =~ ^UnixWare$ ]]; then
# UnixWare's ps does not trust the value stored in argv[0] as a
# security measure. It is still accessible within cmdline.
actual=$(< "/proc/${1}/cmdline")
else
getPsOutput "$1"
fi
}
if [[ ! $(uname -s) =~ ^SunOS$ ]] &&
getPsOutput "$$" &&
[[ "$SHELL $0" == "$actual"* ]] # "$SHELL $0" is how shtests invokes this script
then expect='./atest 1 2'
echo 'sleep 10; exit 0' >atest
chmod 755 atest
./atest 1 2 &
getPsOutput "$!"
getCmdline "$!"
kill "$!"
[[ $actual == "$expect" ]] || err_exit "ksh didn't rewrite argv correctly" \
"(expected $(printf %q "$expect"), got $(printf %q "$actual"))"
fi
unset -f getPsOutput
unset -f getPsOutput getCmdline
# ======
# https://bugzilla.redhat.com/1241013