|
NAMEcap_getgrent , cap_getgrnam ,
cap_getgrgid , cap_getgrent_r ,
cap_getgrnam_r ,
cap_getgrgid_r ,
cap_setgroupent , cap_setgrent ,
cap_endgrent ,
cap_grp_limit_cmds ,
cap_grp_limit_fields ,
cap_grp_limit_groups —
library for group database operations in capability mode
LIBRARYlibrary “libcap_grp”SYNOPSIS#include <sys/nv.h>
#include <libcasper.h>
#include <casper/cap_grp.h>
struct group *
struct group *
struct group *
int
int
int
int
int
void
int
int
int
DESCRIPTIONThe functionscap_getgrent (),
cap_getgrnam (),
cap_getgrgid (),
cap_getgrent_r (),
cap_getgrnam_r (),
cap_getgrgid_r (),
cap_setgroupent (),
cap_setgrent (), and
cap_endgrent () are respectively equivalent to
getgrent(3),
getgrnam(3),
getgrgid(3),
getgrent_r(3),
getgrnam_r(3),
getgrgid_r(3),
setgroupent(3),
setgrent(3),
and
endgrent(3)
except that the connection to the system.grp service
needs to be provided.
The The The EXAMPLESThe following example first opens a capability to casper and then uses this capability to create thesystem.grp casper service and
uses it to get a group name.
cap_channel_t *capcas, *capgrp; const char *cmds[] = { "getgrgid" }; const char *fields[] = { "gr_name" }; const gid_t gid[] = { 1 }; struct group *group; /* Open capability to Casper. */ capcas = cap_init(); if (capcas == NULL) err(1, "Unable to contact Casper"); /* Enter capability mode sandbox. */ if (cap_enter() < 0 && errno != ENOSYS) err(1, "Unable to enter capability mode"); /* Use Casper capability to create capability to the system.grp service. */ capgrp = cap_service_open(capcas, "system.grp"); if (capgrp == NULL) err(1, "Unable to open system.grp service"); /* Close Casper capability, we don't need it anymore. */ cap_close(capcas); /* Limit service to one single function. */ if (cap_grp_limit_cmds(capgrp, cmds, nitems(cmds))) err(1, "Unable to limit access to system.grp service"); /* Limit service to one field as we only need name of the group. */ if (cap_grp_limit_fields(capgrp, fields, nitems(fields))) err(1, "Unable to limit access to system.grp service"); /* Limit service to one gid. */ if (cap_grp_limit_groups(capgrp, NULL, 0, gid, nitems(gid))) err(1, "Unable to limit access to system.grp service"); group = cap_getgrgid(capgrp, gid[0]); if (group == NULL) err(1, "Unable to get name of group"); printf("GID %d is associated with name %s.\n", gid[0], group->gr_name); cap_close(capgrp); SEE ALSOcap_enter(2), endgrent(3), err(3), getgrent(3), getgrent_r(3), getgrgid(3), getgrgid_r(3), getgrnam(3), getgrnam_r(3), setgrent(3), setgroupent(3), capsicum(4), nv(9)HISTORYThecap_grp service first appeared in
FreeBSD 10.3.
AUTHORSThecap_grp service was implemented by
Pawel Jakub Dawidek
<pawel@dawidek.net>
under sponsorship from the FreeBSD Foundation.
This manual page was written by
Visit the GSP FreeBSD Man Page Interface. |