| LOGIN_CAP(3) | Library Functions Manual | LOGIN_CAP(3) |
login_getclass,
login_getcapbool,
login_getcapnum,
login_getcapsize,
login_getcapstr,
login_getcaptime,
login_getpwclass,
login_close,
setclasscontext,
setusercontext — query
login.conf database about a user class
System Utilities Library (libutil, -lutil)
#include
<sys/types.h>
#include <login_cap.h>
login_cap_t *
login_getclass(char
*class);
int
login_getcapbool(login_cap_t
*lc, const char
*cap, unsigned int
def);
quad_t
login_getcapnum(login_cap_t
*lc, const char
*cap, quad_t def,
quad_t err);
quad_t
login_getcapsize(login_cap_t
*lc, const char
*cap, quad_t def,
quad_t err);
char *
login_getcapstr(login_cap_t
*lc, const char
*cap, char *def,
char *err);
quad_t
login_getcaptime(login_cap_t
*lc, const char
*cap, quad_t def,
quad_t err);
login_cap_t *
login_getpwclass(struct
passwd *pwd);
void
login_close(login_cap_t
*lc);
int
setclasscontext(const
char *class, unsigned int
flags);
int
setusercontext(login_cap_t
*lc, const struct passwd
*pwd, uid_t uid,
unsigned int flags);
The
login_getclass()
function extracts the entry specified by class (or
‘default’ if
class is NULL or the empty
string) from /etc/login.conf (see
login.conf(5)). If the
entry is found, a login_cap_t pointer is returned.
NULL is returned if the user class is not found.
When the login_cap_t structure is no longer needed, it
should be freed by the
login_close()
function.
The
login_getpwclass()
function is equivalent to:
login_getclass(pwd ?
pwd->pw_class : NULL)Once lc has been
returned by
login_getclass(),
any of the other
login_*()
functions may be called.
The
login_getcapnum(),
login_getcapsize(),
login_getcapstr(),
and
login_getcaptime()
functions all query the database entry for a field named
cap. If the field is found, its value is returned. If
the field is not found, the value specified by def is
returned. If an error is encountered while trying to find the field,
err is returned. See
login.conf(5) for a
discussion of the various textual forms the value may take. The
login_getcapbool()
function is slightly different. It returns def if no
capabilities were found for this class (typically meaning that the default
class was used and the /etc/login.conf file is
missing). It returns a non-zero value if cap, with no
value, was found, zero otherwise.
The
setclasscontext()
function takes class, the name of a user class, and
sets the resources defined by that class according to
flags. Only the LOGIN_SETPATH,
LOGIN_SETPRIORITY,
LOGIN_SETRESOURCES, and
LOGIN_SETUMASK bits are used. (See
setusercontext() below). It returns 0 on success and
-1 on failure.
The
setusercontext()
function sets the resources according to flags. The
lc argument, if not NULL,
contains the class information that should be used. The
pwd argument, if not NULL,
provides information about the user. lc and
pwd cannot both be NULL. The
uid argument is used in place of the user id contained
in the pwd structure when calling
setuid(2). The various bits
available to be or-ed together to make up flags
are:
LOGIN_SETGIDLOGIN_SETGROUPSLOGIN_SETGROUPLOGIN_SETLOGINLOGIN_SETPATHPATH environment variable.LOGIN_SETPRIORITYLOGIN_SETRESOURCESLOGIN_SETUMASKLOGIN_SETUSERLOGIN_SETENVLOGIN_SETALLsetlogin(2), setpriority(2), setrlimit(2), setuid(2), umask(2), initgroups(3), secure_path(3), login.conf(5)
The login_getclass family of functions are
largely based on the BSD/OS implementation of same,
and appeared in NetBSD 1.5 by kind permission.
The string returned by login_getcapstr()
is allocated via malloc(3)
when the specified capability is present and thus it is the responsibility
of the caller to free() this space. However, if the
capability was not found or an error occurred and def
or err (whichever is relevant) are
non-NULL the returned value is simply what was
passed in to login_getcapstr(). Therefore it is not
possible to blindly free() the return value without
first checking it against def and
err.
The same warnings set forth in
setlogin(2) apply to
setusercontext() when the
LOGIN_SETLOGIN flag is used. Specifically, changing
the login name affects all processes in the current session, not just the
current process. See
setlogin(2) for more
information.
| June 20, 2013 | NetBSD 11.0 |