NetBSD-Bugs archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

bin/56464: sh(1) reads ./.profile rather than ~/.profile



>Number:         56464
>Category:       bin
>Synopsis:       sh(1) reads ./.profile rather than ~/.profile
>Confidential:   no
>Severity:       non-critical
>Priority:       low
>Responsible:    bin-bug-people
>State:          open
>Class:          sw-bug
>Submitter-Id:   net
>Arrival-Date:   Mon Oct 25 05:00:00 +0000 2021
>Originator:     elo
>Release:        NetBSD 9.0_RC1
>Organization:
>Environment:
System: NetBSD marmite.localnet 9.0_RC1 NetBSD 9.0_RC1 (BLUEBELL) #0: Tue Dec 24 17:18:23 GMT 2019  elo@marmite.localnet:/usr/obj/sys/arch/amd64/compile/BLUEBELL amd64
Architecture: x86_64
Machine: amd64
>Description:
	The sh(1) man page states that a login shell reads commands from
	the files /etc/profile and ~/.profile. In reality, sh looks for
	.profile in the current working directory, and not in the user's
	home directory. Commands like login(1) and sudo(8) typically set
	the cwd to the user's $HOME, removing the distinction in common
	use, but '~' and '.' may not coincide for shells started by other
	means, e.g., via su(1) with the '-d' option.

	Revision 1.212 of the sh man page added a qualifying clause (not
	mentioned in the log message for that commit) to say that .profile
	is looked for specifically in the user's home directory (not in
	the cwd, as was before implicit), but the code was never changed
	to implement that behaviour. Every Bourne-like shell I've checked
	(including dash, another Almquist descendant) looks for .profile
	in the home directory of the user.
>How-To-Repeat:
	$ cd /tmp
	$ echo 'echo user:$USER home:$HOME cwd:$PWD' > .profile
	$ su -d <user>

	The choice of <user> is immaterial (save for the obviously
	necessary condition that <user>'s login shell must be /bin/sh).
>Fix:
	Reconcile the sh code and the sh man page, either by removing the
	misleading text added in revision 1.212 of the man page, or by
	amending the code so that the shell really does look for .profile
	in the user's home directory (or in '/', if $HOME is not set).



Home | Main Index | Thread Index | Old Index