COHERENT manpages
This page displays the COHERENT manpage for setgid() [Set group id and user id].
List of available manpages
Index
setgid() -- System Call (libc) Set group id and user id #include <unistd.h> int setgid(id) int id; The group identifier is the number that identifies the user group that ``owns'' a given file. File /etc/group establishes the set of groups that your COHERENT system recognizes. (For details on how this file is laid out, see the Lexicon entry for group). When a file is executable, the executing process inherits its group identifier (and thus, its group-level permissions) from the file in which it resides on disk. For example, the program troff resides in file /bin/troff. This file is ``owned'' by group bin; thus, when you execute troff, its group-level permissions are those of group bin. The group identifier comes in three forms: real This is the group identifier of the user who is running the process. effective This is the group identifier that determines the access rights of the process. These rights are the same as those of the real group identifier unless they have been altered by executing a file whose setgid bit is set. For example, the program troff does not have the setgid bit set; thus, when you execute troff, the group permissions of the troff process remain those of your group, not those of the group bin. On the other hand, the program /usr/lib/uucp/uucico does have the setgid bit set; thus, when you invoke uucico, the uucico process uses the permissions of uucico's group (that is, of group uucp), instead of your group. saved effective This permits a process to step back and forth between its real and effective group identifiers. If you return from an effective group identifier to your real one, the system saves the previously effective identifier so you can revert to it if need be. The system call setgid() lets you set the real and effective group identifiers of the calling process to the group identifier gid. The behavior of setgid() varies depending upon the following: 1. If setgid() is invoked by a user whose effective user identifier is that of the superuser root, setgid() sets the real, effective, and saved effective group identifiers to gid. 2. If setgid() is invoked by a user whose real group identifier is the same as gid, setgid() sets the effective group identifier to gid. 3. If setgid() is invoked by a user whose saved effective group identifier is same as gid, setgid() sets the effective group identifier to gid. If all goes well, setgid() returns zero. If a problem arises, it returns -1. See Also execution, getuid(), libc, login, setuid(), unistd.h POSIX Standard, §4.2.2