* Makefile.in: Ensure that -MD gets added to CFLAGS regardless of CFLAGS

command-line setting.
* cygwin.din: Export sexec* functions as function which returns ENOSYS
(i.e., sexec* is deprecated).
* dtable.cc (dtable::vfork_child_dup): Ensure that impersonation is restored
even on failure.
* exec.cc: Throughout, remove references to sexec* and _spawnve.
* pinfo.h: Remove _spawnve declaration.
* spawn.cc: Rename _spawnve to spawnve and use throughout.
(spawn_guts): Eliminate hToken argument and processing of same.  Just perform
special actions if impersonating.
(spawnve): Rename from _spawnve.
This commit is contained in:
Christopher Faylor
2002-06-11 02:08:00 +00:00
parent 85a238e1e8
commit 380aaf2d2c
8 changed files with 56 additions and 171 deletions

View File

@@ -19,6 +19,7 @@ details. */
#include "path.h"
#include "pinfo.h"
#include "environ.h"
#include "cygerrno.h"
/* This is called _execve and not execve because the real execve is defined
in libc/posix/execve.c. It calls us. */
@@ -30,7 +31,7 @@ _execve (const char *path, char *const argv[], char *const envp[])
MALLOC_CHECK;
if (!envp)
envp = empty_env;
return _spawnve (NULL, _P_OVERLAY, path, argv, envp);
return spawnve (_P_OVERLAY, path, argv, envp);
}
extern "C" int
@@ -58,116 +59,11 @@ execv (const char *path, char * const *argv)
return _execve (path, (char * const *) argv, cur_environ ());
}
/* the same as a standard exec() calls family, but with NT security support */
extern "C" pid_t
sexecve (HANDLE hToken, const char *path, const char *const argv[],
const char *const envp[])
sexecve_is_bad ()
{
_spawnve (hToken, _P_OVERLAY, path, argv, envp);
return -1;
}
extern "C" int
sexecl (HANDLE hToken, const char *path, const char *arg0, ...)
{
int i;
va_list args;
const char *argv[1024];
va_start (args, arg0);
argv[0] = arg0;
i = 1;
do
argv[i] = va_arg (args, const char *);
while (argv[i++] != NULL);
va_end (args);
MALLOC_CHECK;
return sexecve (hToken, path, (char * const *) argv, cur_environ ());
}
extern "C" int
sexecle (HANDLE hToken, const char *path, const char *arg0, ...)
{
int i;
va_list args;
const char * const *envp;
const char *argv[1024];
va_start (args, arg0);
argv[0] = arg0;
i = 1;
do
argv[i] = va_arg (args, const char *);
while (argv[i++] != NULL);
envp = va_arg (args, const char * const *);
va_end (args);
MALLOC_CHECK;
return sexecve(hToken, path, (char * const *) argv, (char * const *) envp);
}
extern "C" int
sexeclp (HANDLE hToken, const char *path, const char *arg0, ...)
{
int i;
va_list args;
const char *argv[1024];
va_start (args, arg0);
argv[0] = arg0;
i = 1;
do
argv[i] = va_arg (args, const char *);
while (argv[i++] != NULL);
va_end (args);
MALLOC_CHECK;
return sexecvpe (hToken, path, (const char * const *) argv, cur_environ ());
}
extern "C" int
sexeclpe (HANDLE hToken, const char *path, const char *arg0, ...)
{
int i;
va_list args;
const char * const *envp;
const char *argv[1024];
va_start (args, arg0);
argv[0] = arg0;
i = 1;
do
argv[i] = va_arg (args, const char *);
while (argv[i++] != NULL);
envp = va_arg (args, const char * const *);
va_end (args);
MALLOC_CHECK;
return sexecvpe (hToken, path, argv, envp);
}
extern "C" int
sexecv (HANDLE hToken, const char *path, const char * const *argv)
{
MALLOC_CHECK;
return sexecve (hToken, path, argv, cur_environ ());
}
extern "C" int
sexecp (HANDLE hToken, const char *path, const char * const *argv)
{
MALLOC_CHECK;
return sexecvpe (hToken, path, argv, cur_environ ());
set_errno (ENOSYS);
return 0;
}
/*
@@ -187,15 +83,6 @@ strccpy (char *s1, const char **s2, char c)
return s1;
}
extern "C" int
sexecvpe (HANDLE hToken, const char *file, const char * const *argv,
const char *const *envp)
{
path_conv buf;
MALLOC_CHECK;
return sexecve (hToken, find_exec (file, buf), argv, envp);
}
extern "C" int
execvp (const char *path, char * const *argv)
{