Project Database Access Library Functions setproject(3PROJECT)
NAME
setproject - associate a user process with a project
SYNOPSIS
cc [ flag ... ] file... -lproject [ library ... ]
#include
int setproject(const char *project_name, const char *user_name,
uint_t flags);
DESCRIPTION
The setproject() function provides a simplified method for
the association of a user process with a project and its various resource management attributes, as stored in the project(4) name service database. These attributes include resource control settings, resource pool membership, andthird party attributes (which are ignored by setproject().)
If user_name is a valid member of the project specified by
project_name, as determined by inproj(3PROJECT), setpro-
ject() will create a new task with settaskid(2) using taskflags specified by flags, use setrctl(2) to associate vari-
ous resource controls with the process, task, and project, and bind the calling process to the appropriate resourcepool with pool_set_binding(3POOL). Resource controls not
explicitly specified in the project entry will be preserved.If user_name is a name of the superuser (user with UID equal
to 0), the setproject() function skips the inproj(3PROJECT)
check described above and allows the superuser to join any project. The current process will not be bound to a resource pool if the resource pools facility (see pooladm(1M)) is inactive.The setproject() function will succeed whether or not the
project specified by project_name specifies a project.pool
attribute. If the resource pools facility is active, setpro-
ject() will fail if the project does not specify a project.pool attribute and there is no designated poolaccepting default assignments. The setproject() function
will also fail if there is a specified project.pool attri-
bute for a nonexistent pool.RETURN VALUES
Upon successful completion, setproject() returns 0. If any
of the resource control assignments failed but the project assignment, pool binding, and task creation succeeded, aninteger value corresponding to the offset into the key-value
pair list of the failed attribute assignment is returned. If the project assignment or task creation was not successful,SunOS 5.11 Last change: 5 May 2010 1
Project Database Access Library Functions setproject(3PROJECT)
setproject() returns SETPROJ_ERR_TASK and sets errno to
indicate the error. In the event of a pool binding failure,setproject() returns SETPROJ_ERR_POOL and sets errno to
indicate the error. Additional error information can beretrieved from pool_error(3POOL).
ERRORS
The setproject() function will fail during project assign-
ment or task creation if:EACCES The invoking task was created with the TASK_FINAL
flag. EAGAIN A resource control limiting the number of LWPs, tasks, or processes in the target project or zone has been exceeded. A resource control on the given project would be exceeded. EINVAL The project ID associated with the given project is not within the range of valid project IDs,invalid flags were specified, or user_name is
NULL. EPERM The effective user of the calling process is not superuser. ESRCH The specified user is not a valid user of thegiven project, user_name is not valid user name,
or project_name is not valid project name.
The setproject() function will fail during pool binding if:
EACCES No resource pool accepting default bindings exists. EPERM The effective user of the calling process is not superuser. ESRCH The specified resource pool is unknownSunOS 5.11 Last change: 5 May 2010 2
Project Database Access Library Functions setproject(3PROJECT)
If setproject() returns an offset into the key-value pair
list, the returned error value is associated with setrctl(2) for resource control attributes.USAGE
The setproject() function recognizes a name-structured value
pair for the attributes in the project(4) database with the following format: entity.control=(privilege,value,action,action,...),... where privilege is one of BASIC or PRIVILEGED, value is a numeric value with optional units, and action is one ofnone, deny, and signal=signum or signal=SIGNAME. For
instance, to set a series of progressively more assertivecontrol values on a project's per-process CPU time, specify
process.max-cpu-time=(PRIVILEGED,1000s,signal=SIGXRES), \
(PRIVILEGED,1250, signal=SIGTERM),(PRIVILEGED,1500, signal=SIGKILL) To prevent a task from exceeding a total of 128 LWPs, specify a resource control withtask.max-lwps=(PRIVILEGED,128,deny)
Specifying a resource control name with no values causes all resource control values for that name to be cleared on the given project, leaving only the system resource control value on the specified resource control name. For example, to remove all resource control values on shared memory, specify:project.max-shm-memory
The project attribute, project.pool, specifies the pool to which processes associated with the project entry should be bound. Its format is:project.pool=pool_name
SunOS 5.11 Last change: 5 May 2010 3
Project Database Access Library Functions setproject(3PROJECT)
where pool_name is a valid resource pool within the active
configuration enabled with pooladm(1M). The final attribute is used to finalize the task created bysetproject(). Seesettaskid(2).
task.final All further attempts to create new tasks, such as using newtask(1) and su(1M), will fail.ATTRIBUTES
See attributes(5) for descriptions of the following attri-
butes:____________________________________________________________
| ATTRIBUTE TYPE | ATTRIBUTE VALUE |
|_____________________________|_____________________________|
| Interface Stability | Committed ||_____________________________|_____________________________|
| MT-Level | MT-Safe |
|_____________________________|_____________________________|
SEE ALSO
pooladm(1M), setrctl(2), settaskid(2), inproj(3PROJECT),libproject(3LIB), pool_error(3POOL),
pool_set_binding(3POOL), passwd(4), project(4), attri-
butes(5)SunOS 5.11 Last change: 5 May 2010 4