BSD 4_4 release
[unix-history] / usr / src / lib / libc / sys / setuid.2
index b0eccc3..383a8f5 100644 (file)
@@ -1,43 +1,78 @@
-.\" Copyright (c) 1983, 1991 Regents of the University of California.
-.\" All rights reserved.
+.\" Copyright (c) 1983, 1991, 1993
+.\"    The Regents of the University of California.  All rights reserved.
 .\"
 .\"
-.\" %sccs.include.redist.man%
+.\" Redistribution and use in source and binary forms, with or without
+.\" modification, are permitted provided that the following conditions
+.\" are met:
+.\" 1. Redistributions of source code must retain the above copyright
+.\"    notice, this list of conditions and the following disclaimer.
+.\" 2. Redistributions in binary form must reproduce the above copyright
+.\"    notice, this list of conditions and the following disclaimer in the
+.\"    documentation and/or other materials provided with the distribution.
+.\" 3. All advertising materials mentioning features or use of this software
+.\"    must display the following acknowledgement:
+.\"    This product includes software developed by the University of
+.\"    California, Berkeley and its contributors.
+.\" 4. Neither the name of the University nor the names of its contributors
+.\"    may be used to endorse or promote products derived from this software
+.\"    without specific prior written permission.
 .\"
 .\"
-.\"     @(#)setuid.2   6.4 (Berkeley) %G%
+.\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+.\" ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+.\" SUCH DAMAGE.
 .\"
 .\"
-.Dd 
-.Dt SETUID 3
+.\"     @(#)setuid.2   8.1 (Berkeley) 6/4/93
+.\"
+.Dd June 4, 1993
+.Dt SETUID 2
 .Os BSD 4.2
 .Sh NAME
 .Nm setuid ,
 .Nm seteuid ,
 .Os BSD 4.2
 .Sh NAME
 .Nm setuid ,
 .Nm seteuid ,
-.Nm setruid ,
 .Nm setgid ,
 .Nm setegid ,
 .Nm setgid ,
 .Nm setegid ,
-.Nm setrgid
 .Nd set user and group ID
 .Sh SYNOPSIS
 .Fd #include <sys/types.h>
 .Nd set user and group ID
 .Sh SYNOPSIS
 .Fd #include <sys/types.h>
+.Fd #include <unistd.h>
 .Ft int
 .Fn setuid "uid_t uid"
 .Ft int
 .Fn seteuid "uid_t euid"
 .Ft int
 .Ft int
 .Fn setuid "uid_t uid"
 .Ft int
 .Fn seteuid "uid_t euid"
 .Ft int
-.Fn setruid "uid_t ruid"
-.Ft int
 .Fn setgid "gid_t gid"
 .Ft int
 .Fn setegid "gid_t egid"
 .Fn setgid "gid_t gid"
 .Ft int
 .Fn setegid "gid_t egid"
-.Ft int
-.Fn setrgid "gid_t rgid"
 .Sh DESCRIPTION
 The
 .Fn setuid
 function
 .Sh DESCRIPTION
 The
 .Fn setuid
 function
-.Pq Fn setgid
-sets both the real and effective
-user ID (group ID) of the current process
-as specified.
+sets the real and effective
+user IDs and the saved set-user-ID of the current process
+to the specified value.
+The
+.Fn setuid
+function is permitted if the specified ID is equal to the real user ID
+of the process, or if the effective user ID is that of the super user.
+.Pp
+The
+.Fn setgid
+function
+sets the real and effective
+group IDs and the saved set-group-ID of the current process
+to the specified value.
+The
+.Fn setgid
+function is permitted if the specified ID is equal to the real group ID
+of the process, or if the effective user ID is that of the super user.
 .Pp
 The
 .Fn seteuid
 .Pp
 The
 .Fn seteuid
@@ -45,29 +80,43 @@ function
 .Pq Fn setegid
 sets the effective user ID (group ID) of the
 current process.
 .Pq Fn setegid
 sets the effective user ID (group ID) of the
 current process.
+The effective user ID may be set to the value
+of the real user ID or the saved set-user-ID (see
+.Xr intro 2
+and
+.Xr execve 2 ) ;
+in this way, the effective user ID of a set-user-ID executable
+may be toggled by switching to the real user ID, then re-enabled
+by reverting to the set-user-ID value.
+Similarly, the effective group ID may be set to the value
+of the real group ID or the saved set-user-ID.
 .Pp
 .Pp
-The
-.Fn setruid
-function
-.Pq Fn setrgid
-sets the real user ID (group ID) of the
-current process.
 .Sh RETURN VALUES
 Upon success, these functions return 0;
 otherwise \-1 is returned.
 .Pp
 If the user is not the super user, or the uid
 .Sh RETURN VALUES
 Upon success, these functions return 0;
 otherwise \-1 is returned.
 .Pp
 If the user is not the super user, or the uid
-specified is not the real or effective ID, these
-functions return \-1.
+specified is not the real, effective ID, or saved ID,
+these functions return \-1.
 .Sh SEE ALSO
 .Sh SEE ALSO
-.Xr setreuid 2 ,
-.Xr setregid 2 ,
 .Xr getuid 2 ,
 .Xr getgid 2
 .Xr getuid 2 ,
 .Xr getgid 2
-.Sh HISTORY
-A
+.Sh STANDARDS
+The
 .Fn setuid
 and
 .Fn setgid
 .Fn setuid
 and
 .Fn setgid
-syscall appeared in 
-.At v6 .
+functions are compliant with the
+.St -p1003.1-88
+specification with
+.Li _POSIX_SAVED_IDS
+not defined.
+The
+.Fn seteuid
+and
+.Fn setegid
+functions are extensions based on the 
+.Tn POSIX
+concept of
+.Li _POSIX_SAVED_IDS ,
+and have been proposed for a future revision of the standard.