🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: comp.unix.programmer
Article #1271

Re: How to provide Shell Escape from a C program?

#1271
From: Michael Davidson
Date: Wed, 21 Nov 1990 21:31
57 lines
1834 bytes
In article <349@clbull.cl.bull.fr> rudrak@saphir.cl.bull.fr (Rudrakshala Purushotham) writes:
>I want to provide shell escape feature from a C program. But I am having 
>some problems with the following code:
>
>	shell_escape (command);
>	char *command;
>	{
>		...
>		char *args [MAX_ARGS];
>
>		args [0] = "/bin/sh";
>		args [1] = "-c";
>
>		for (i = 2; i < MAX_ARGS && (s = strtok (command, " \t")); i++)
>			args [i] = strsave (s);
>		
>		args [i] = NULL;
>
>		if (fork () > 0)	{
>			execv ("/bin/sh", args);
>			perror ("execv");
>			_exit (1);
>		}
>
>		wait (&status);
>		...

Well, I don't know exactly what is going wrong, but I have a few comments ...

First, why not just use "system()"?
There *are* sometimes good reasons for NOT using system(), but I don't
see any evidence in your code that you are trying to do anything clever
that wouldn't work just fine with system().

One comment on the code itself - do you *really* intend that the
parent process should be the one that exec's the shell?

Something like this would be more appropriate:

		if ((pid = fork()) == 0) {	/* child */
			execv("/bin/sh", args);
			perror("execv");
			_exit(1);
		} else if (pid > 0) {		/* parent */
			int	(*sigint)();
			int	r;

			sigint = signal(SIGINT, SIG_IGN);

			while ((r = wait(&status)) != -1)
				if (r == pid)
					break;

			signal(SIGINT, sigint);
		} else
			perror("fork");
Technical Details
Message-ID: <8914@scolex.sco.COM>
Path: arc1-ca.pugleaf.net!utzoo!utgpu!news-server.csri.toronto.edu!cs.utexas.edu!uunet!sco!md
References: <349@clbull.cl.bull.fr>

Show Full Headers
Complete Article Headers
Path: arc1-ca.pugleaf.net!utzoo!utgpu!news-server.csri.toronto.edu!cs.utexas.edu!uunet!sco!md
From: md@sco.COM (Michael Davidson)
Newsgroups: comp.unix.programmer
Subject: Re: How to provide Shell Escape from a C program?
Message-ID: <8914@scolex.sco.COM>
Date: 21 Nov 90 21:31:08 GMT
References: <349@clbull.cl.bull.fr>
Sender: news@sco.COM
Organization: The Santa Cruz Operation, Inc.
Lines: 57