Subject: Re: sysinst source niggles.... run_prog, logging/scripting rework?
To: None <tech-install@netbsd.org>
From: Alan Barrett <apb@iafrica.com>
List: tech-install
Date: 07/01/1999 12:54:16
On Wed, 30 Jun 1999, Jonathan Stone wrote:
>      run-prog({0|1}, {0|1}, NULL,
> 		     "command string %s %s",
> 		     "args", "more args");

Something that bothers me about the current implementation of run_prog()
is the confusion between a command string and an argument vector.

run_prog() gets several arguments as input, then uses printf() to
construct a single string, then splits that string into several args again
and passes them in a vector to launch_subwin() (which passes them to
execvp()).  In your example, execvp() gets a vector that contains
{"command", "string", "args", "more", "args"}, and the fact that "more
args" has been converted from a single string to two separate args might
be a bug or security problem in some circumstances (e.g. if it comes from
user input and we didn't expect the user to type several space-separated
words). 

I think we should have a version of run_prog() that gets several
separate args as input and just builds them into a vector (bypassing the
printf and split steps).  And perhaps also a version that gets a ready
made arg vector as input.

>       run_silent("rm -f %s", target_expand("/.profile"));

I'd prefer to see

	run_silent("rm", "-f", target_expand("/.profile"));

--apb (Alan Barrett)