[Wine] Problems with wincfg
Martin Gregorie
martin at gregorie.org
Tue Jun 19 14:42:57 CDT 2012
On Tue, 2012-06-19 at 13:59 -0500, David Bailey wrote:
> I'm having difficulty getting my password back for the bugs website, but I wanted to add that testing for USER == root doesn't seem to handle sudo:
>
> sudo echo $USER
>
> returns 'dave' for me.
>
This depends on when $USER is evaluated and (in a bash session) when the
value is substituted for the variable name. In your example substitution
will occur when bash parses the command line, i.e. 'dave' was substituted
for $USER before sudo was executed. OTOH, if the substitution done is inside
a simple script which is run under the control of sudo, then the substitution
takes place within the environment established by sudo. Here you go:
$ cat test
#!/bin/bash
echo $USER
$ ./test
kiwi
$ sudo ./test
root
$
What happens is that this time no substitution happens when the command
is parsed. Instead, sudo changes user to root and spawns a shell under
that user. This shell executes the script by spawning a second shell (by
executing #!/bin/bash as 'root') and this evaluates $USER and does the
substitution.
Of course, much the same applies if the value of USER is retrieved
within a C program by calling getenv(): again, its a delayed evaluation
that would happen after sudo has done its thing. Finally, take a look at
the next version of my script and think about what it does:
$ cat ./test
#!/bin/bash
if [ -n "$1" ]
then
echo $1
else
echo $USER
fi
echo "Local USER is $USER"
$ sudo ./test $USER
kiwi
Local USER is root
$ sudo ./test
root
Local USER is root
Martin
More information about the wine-users
mailing list