Skip to content

Commit

Permalink
* sysdeps/posix/spawni.c (__spawni): Use local_seteuid and
Browse files Browse the repository at this point in the history
	local_setegid instead of seteuid and setegid.
	* sysdeps/generic/local-setxid.h: New file.
	* sysdeps/unix/sysv/linux/local-setxid.h: New file.
  • Loading branch information
Ulrich Drepper committed Jun 4, 2006
1 parent 7231452 commit 1b8373f
Show file tree
Hide file tree
Showing 4 changed files with 35 additions and 1 deletion.
5 changes: 5 additions & 0 deletions ChangeLog
Original file line number Diff line number Diff line change
@@ -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.
Expand Down
4 changes: 4 additions & 0 deletions sysdeps/generic/local-setxid.h
Original file line number Diff line number Diff line change
@@ -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)
4 changes: 3 additions & 1 deletion sysdeps/posix/spawni.c
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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. */
Expand Down
23 changes: 23 additions & 0 deletions sysdeps/unix/sysv/linux/local-setxid.h
Original file line number Diff line number Diff line change
@@ -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

0 comments on commit 1b8373f

Please sign in to comment.