Path: utzoo!utgpu!news-server.csri.toronto.edu!mailrus!uunet!mtndew!friedl From: friedl@mtndew.UUCP (Stephen J. Friedl) Newsgroups: comp.unix.wizards Subject: What is a good way to do general execs? Message-ID: <438@mtndew.UUCP> Date: 8 Jun 90 02:52:43 GMT Organization: VSIFAX Tech Center Lines: 43 Hi folks, We have an application where a background daemon sometimes has to run a user-supplied program with my arguments, and I am trying to find a good way to do it. I don't want to use system(3) because I want to have control over the fork/exec chain (I catch SIGCLD) and I just don't like using system anyway. Execv works great if I'm running a binary, but it doesn't like to run shell scripts directly (this is Sys V). To get around this I try the following: i = 0; argv[i++] = "/bin/sh"; argv[i++] = userprog; argv[i++] = myarg_1; argv[i++] = myarg_2; argv[i++] = you_get_the_idea; argv[i++] = NULL; execv(argv[1], argv+1); execv(argv[0], argv+0); error("cannot run userprog %s (errno = %d)", userprog, errno); Here I try to run the user's program directly, and if it doesn't work then I try running with with a shell. The problem is that this looks too easy. I have thought about this from a handful of directions and it seems to be workable. Because the first argument is a filename, I don't have to worry about the string containing scam characters such a ! or ; or others. I provide the other args and presumably I trust myself :-). Does anybody see anything wrong with this? Steve -- Stephen J. Friedl, KA8CMY / Software Consultant / Tustin, CA / 3B2-kind-of-guy +1 714 544 6561 / friedl@mtndew.Tustin.CA.US / {uunet,attmail}!mtndew!friedl "I will defend to your death my right to my opinion" - me