mirror of
https://sourceware.org/git/glibc.git
synced 2024-11-21 12:30:06 +00:00
* sysdeps/posix/spawni.c (__spawni): Use local_seteuid and
local_setegid instead of seteuid and setegid. * sysdeps/generic/local-setxid.h: New file. * sysdeps/unix/sysv/linux/local-setxid.h: New file.
This commit is contained in:
parent
7231452e5c
commit
1b8373f475
@ -1,5 +1,10 @@
|
||||
2006-06-04 Ulrich Drepper <drepper@redhat.com>
|
||||
|
||||
* sysdeps/posix/spawni.c (__spawni): Use local_seteuid and
|
||||
local_setegid instead of seteuid and setegid.
|
||||
* sysdeps/generic/local-setxid.h: New file.
|
||||
* sysdeps/unix/sysv/linux/local-setxid.h: New file.
|
||||
|
||||
* sysdeps/posix/spawni.c (__spawni): Use non-cancelable interfaces.
|
||||
|
||||
* string/Makefile (tests): Add bug-envz1.
|
||||
|
4
sysdeps/generic/local-setxid.h
Normal file
4
sysdeps/generic/local-setxid.h
Normal file
@ -0,0 +1,4 @@
|
||||
/* No special support. Fall back to the regular functions. */
|
||||
|
||||
#define local_seteuid(id) seteuid (id)
|
||||
#define local_setegid(id) setegid (id)
|
@ -26,6 +26,7 @@
|
||||
#include <unistd.h>
|
||||
#include "spawn_int.h"
|
||||
#include <not-cancel.h>
|
||||
#include <local-setxid.h>
|
||||
|
||||
|
||||
/* The Unix standard contains a long explanation of the way to signal
|
||||
@ -155,7 +156,8 @@ __spawni (pid_t *pid, const char *file,
|
||||
|
||||
/* Set the effective user and group IDs. */
|
||||
if ((flags & POSIX_SPAWN_RESETIDS) != 0
|
||||
&& (seteuid (__getuid ()) != 0 || setegid (__getgid ()) != 0))
|
||||
&& (local_seteuid (__getuid ()) != 0
|
||||
|| local_setegid (__getgid ()) != 0))
|
||||
_exit (SPAWN_ERROR);
|
||||
|
||||
/* Execute the file actions. */
|
||||
|
23
sysdeps/unix/sysv/linux/local-setxid.h
Normal file
23
sysdeps/unix/sysv/linux/local-setxid.h
Normal file
@ -0,0 +1,23 @@
|
||||
/* SETxID functions which only have to change the local thread and
|
||||
none of the possible other threads. */
|
||||
#include <kernel-features.h>
|
||||
#include <sysdep.h>
|
||||
|
||||
/* If we can use the syscall directly, use it. */
|
||||
#if __ASSUME_32BITUIDS > 0 && defined __NR_setresuid32
|
||||
# define local_seteuid(id) INLINE_SYSCALL (setresuid32, 3, -1, id, -1)
|
||||
#elif __ASSUME_SETRESUID_SYSCALL > 0
|
||||
# define local_seteuid(id) INLINE_SYSCALL (setresuid, 3, -1, id, -1)
|
||||
#else
|
||||
# define local_seteuid(id) seteuid (id)
|
||||
#endif
|
||||
|
||||
|
||||
/* If we can use the syscall directly, use it. */
|
||||
#if __ASSUME_32BITUIDS > 0 && defined __NR_setresgid32
|
||||
# define local_setegid(id) INLINE_SYSCALL (setresgid32, 3, -1, id, -1)
|
||||
#elif __ASSUME_SETRESGID_SYSCALL > 0
|
||||
# define local_setegid(id) INLINE_SYSCALL (setresgid, 3, -1, id, -1)
|
||||
#else
|
||||
# define local_setegid(id) setegid (id)
|
||||
#endif
|
Loading…
Reference in New Issue
Block a user