summaryrefslogtreecommitdiffstats
path: root/usr.sbin/sup/lib/run.c
diff options
context:
space:
mode:
Diffstat (limited to 'usr.sbin/sup/lib/run.c')
-rw-r--r--usr.sbin/sup/lib/run.c191
1 files changed, 0 insertions, 191 deletions
diff --git a/usr.sbin/sup/lib/run.c b/usr.sbin/sup/lib/run.c
deleted file mode 100644
index 0e9a581..0000000
--- a/usr.sbin/sup/lib/run.c
+++ /dev/null
@@ -1,191 +0,0 @@
-/*
- * Copyright (c) 1991 Carnegie Mellon University
- * All Rights Reserved.
- *
- * Permission to use, copy, modify and distribute this software and its
- * documentation is hereby granted, provided that both the copyright
- * notice and this permission notice appear in all copies of the
- * software, derivative works or modified versions, and any portions
- * thereof, and that both notices appear in supporting documentation.
- *
- * CARNEGIE MELLON ALLOWS FREE USE OF THIS SOFTWARE IN ITS "AS IS"
- * CONDITION. CARNEGIE MELLON DISCLAIMS ANY LIABILITY OF ANY KIND FOR
- * ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE.
- *
- * Carnegie Mellon requests users of this software to return to
- *
- * Software Distribution Coordinator or Software.Distribution@CS.CMU.EDU
- * School of Computer Science
- * Carnegie Mellon University
- * Pittsburgh PA 15213-3890
- *
- * any improvements or extensions that they make and grant Carnegie the rights
- * to redistribute these changes.
- */
-/* run, runv, runp, runvp -- execute process and wait for it to exit
- *
- * Usage:
- * i = run (file, arg1, arg2, ..., argn, 0);
- * i = runv (file, arglist);
- * i = runp (file, arg1, arg2, ..., argn, 0);
- * i = runvp (file, arglist);
- *
- * Run, runv, runp and runvp have argument lists exactly like the
- * corresponding routines, execl, execv, execlp, execvp. The run
- * routines perform a fork, then:
- * IN THE NEW PROCESS, an execl[p] or execv[p] is performed with the
- * specified arguments. The process returns with a -1 code if the
- * exec was not successful.
- * IN THE PARENT PROCESS, the signals SIGQUIT and SIGINT are disabled,
- * the process waits until the newly forked process exits, the
- * signals are restored to their original status, and the return
- * status of the process is analyzed.
- * All run routines return: -1 if the exec failed or if the child was
- * terminated abnormally; otherwise, the exit code of the child is
- * returned.
- *
- **********************************************************************
- * HISTORY
- * $Log: run.c,v $
- * Revision 1.1.1.1 1995/12/26 04:54:47 peter
- * Import the unmodified version of the sup that we are using.
- * The heritage of this version is not clear. It appears to be NetBSD
- * derived from some time ago.
- *
- * Revision 1.1.1.1 1993/08/21 00:46:33 jkh
- * Current sup with compression support.
- *
- * Revision 1.1.1.1 1993/05/21 14:52:17 cgd
- * initial import of CMU's SUP to NetBSD
- *
- * Revision 1.1 89/10/14 19:53:39 rvb
- * Initial revision
- *
- * Revision 1.2 89/08/03 14:36:46 mja
- * Update run() and runp() to use <varargs.h>.
- * [89/04/19 mja]
- *
- * 23-Sep-86 Glenn Marcy (gm0w) at Carnegie-Mellon University
- * Merged old runv and runvp modules.
- *
- * 22-Nov-85 Glenn Marcy (gm0w) at Carnegie-Mellon University
- * Added check and kill if child process was stopped.
- *
- * 30-Apr-85 Steven Shafer (sas) at Carnegie-Mellon University
- * Adapted for 4.2 BSD UNIX: Conforms to new signals and wait.
- *
- * 15-July-82 Mike Accetta (mja) and Neal Friedman (naf)
- * at Carnegie-Mellon University
- * Added a return(-1) if vfork fails. This should only happen
- * if there are no more processes available.
- *
- * 28-Jan-80 Steven Shafer (sas) at Carnegie-Mellon University
- * Added setuid and setgid for system programs' use.
- *
- * 21-Jan-80 Steven Shafer (sas) at Carnegie-Mellon University
- * Changed fork to vfork.
- *
- * 20-Nov-79 Steven Shafer (sas) at Carnegie-Mellon University
- * Created for VAX. The proper way to fork-and-execute a system
- * program is now by "runvp" or "runp", with the program name
- * (rather than an absolute pathname) as the first argument;
- * that way, the "PATH" variable in the environment does the right
- * thing. Too bad execvp and execlp (hence runvp and runp) don't
- * accept a pathlist as an explicit argument.
- *
- **********************************************************************
- */
-
-#include <stdio.h>
-#include <signal.h>
-#include <sys/wait.h>
-#include <varargs.h>
-#define MAXARGS 100
-
-static int dorun();
-
-int run (name,va_alist)
-char *name;
-va_dcl
-{
- int val;
- va_list ap;
-
- va_start(ap);
- val = runv (name,ap);
- va_end(ap);
- return(val);
-}
-
-int runv (name,argv)
-char *name,**argv;
-{
- return (dorun (name, argv, 0));
-}
-
-int runp (name,va_alist)
-char *name;
-va_dcl
-{
- int val;
- va_list ap;
- char *args[MAXARGS];
- int argno=0;
-
- va_start(ap);
- while (argno < MAXARGS
- && (args[argno++] = va_arg(ap, char *)) != (char *)0);
- va_end(ap);
- val = runvp (name,args);
- return (val);
-}
-
-int runvp (name,argv)
-char *name,**argv;
-{
- return (dorun (name, argv, 1));
-}
-
-static
-int dorun (name,argv,usepath)
-char *name,**argv;
-int usepath;
-{
- int wpid;
- register int pid;
- struct sigvec ignoresig,intsig,quitsig;
- union wait status;
- int execvp(), execv();
- int (*execrtn)() = usepath ? execvp : execv;
-
- if ((pid = vfork()) == -1)
- return(-1); /* no more process's, so exit with error */
-
- if (pid == 0) { /* child process */
- setgid (getgid());
- setuid (getuid());
- (*execrtn) (name,argv);
- fprintf (stderr,"run: can't exec %s\n",name);
- _exit (0377);
- }
-
- ignoresig.sv_handler = SIG_IGN; /* ignore INT and QUIT signals */
- ignoresig.sv_mask = 0;
- ignoresig.sv_onstack = 0;
- sigvec (SIGINT,&ignoresig,&intsig);
- sigvec (SIGQUIT,&ignoresig,&quitsig);
- do {
- wpid = wait3 (&status.w_status, WUNTRACED, 0);
- if (WIFSTOPPED (status)) {
- kill (0,SIGTSTP);
- wpid = 0;
- }
- } while (wpid != pid && wpid != -1);
- sigvec (SIGINT,&intsig,0); /* restore signals */
- sigvec (SIGQUIT,&quitsig,0);
-
- if (WIFSIGNALED (status) || status.w_retcode == 0377)
- return (-1);
-
- return (status.w_retcode);
-}
OpenPOWER on IntegriCloud