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:
		
							parent
							
								
									d2cc520883
								
							
						
					
					
						commit
						e73696fd87
					
				
					 2 changed files with 13 additions and 4 deletions
				
			
		|  | @ -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) | ||||
|  |  | |||
|  | @ -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 | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue