* 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:
@@ -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)
|
||||
{
|
||||
|
Reference in New Issue
Block a user