summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--lib/libc/sys/issetugid.269
1 files changed, 38 insertions, 31 deletions
diff --git a/lib/libc/sys/issetugid.2 b/lib/libc/sys/issetugid.2
index aca73d1..6babf48 100644
--- a/lib/libc/sys/issetugid.2
+++ b/lib/libc/sys/issetugid.2
@@ -31,12 +31,14 @@
.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
.\" SUCH DAMAGE.
.\"
+.\" $Id$
+.\"
.Dd August, 25 1996
.Dt ISSETUGID 2
-.Os OpenBSD 2.0
+.Os
.Sh NAME
.Nm issetugid
-.Nd is current executable running setuid or setgid
+.Nd is current process tainted by uid or gid changes
.Sh SYNOPSIS
.Fd #include <unistd.h>
.Ft int
@@ -44,31 +46,31 @@
.Sh DESCRIPTION
The
.Fn issetugid
-function returns 1 if the process was made setuid or setgid as
-the result of the last
-.Fn execve
-system call.
-Otherwise it returns 0.
+function returns 1 if the process environment or memory address space
+is considered ``tainted'', and returns 0 otherwise.
.Pp
-This system call exists so that library routines (inside libc, libtermlib,
-or other libraries) can gaurantee safe behavior when used inside
-setuid or setgid programs.
-Some library routines may not be passed sufficient information to know
-if the current program was started setuid or setgid because higher level
-calling code may have made changes to the uid or the euid.
-In particular, it is wise to use this call to determine if a
-pathname returned from a
-.Fn getenv
-call may safely be used to
-.Fn open
-the specified file.
+A process is tainted if it was created as a result of an
+.Xr execve 2
+system call which had either of the setuid or setgid bits set (and extra
+privileges were given as a result) or if it has changed any of it's real,
+effective or saved user or group ID's since it began execution.
.Pp
-.Fn issetugid
-is unaffected by calls to
-.Fn setuid ,
-.Fn fork ,
-and other such calls. It is only controlled by
-.Fn execve .
+This system call exists so that library routines (eg: libc, libtermcap)
+can reliably determine if it is safe to use information
+that was obtained from the user, in particular the results from
+.Xr getenv 3
+should be viewed with suspicion if it is used to control operation.
+.Pp
+A ``tainted'' status is inherited by child processes as a result of the
+.Xr fork 2
+system call (or other library code that calls fork, such as
+.Xr popen 3 ).
+.Pp
+It is assumed that a program that clears all privileges as it prepares
+to execute another will also reset the environment, hence the ``tainted''
+status will not be passed on. This is important for programs such as
+.Xr su 1
+which begin setuid but need to be able to create an untainted process.
.Sh ERRORS
The
.Fn issetugid
@@ -76,12 +78,17 @@ function is always successful, and no return value is reserved to
indicate an error.
.Sh SEE ALSO
.Xr execve 2 ,
-.Xr setuid 2 ,
-.Xr seteuid 2,
+.Xr fork 2 ,
.Xr setgid 2 ,
-.Xr setegid 2
+.Xr setegid 2 ,
+.Xr seteuid 2 ,
+.Xr setregid 2 ,
+.Xr setregid 2 ,
+.Xr setuid 2
.Sh HISTORY
A
-.Fn lstat
-function call appeared in
-OpenBSD 2.0
+.Fn issetugid
+function call first appeared in
+.Ox 2.0
+and was also implemented in
+.Fx 3.0 .
OpenPOWER on IntegriCloud