include/parsec/cap_db.h#
Structures and Types Documentation#
typedef cap_han_t
#
typedef struct __cap_han_t* cap_han_t;
struct caps
#
Variables:
linux_cap_t linux_caps
char * name
parsec_cap_t parsec_caps
Functions Documentation#
function closecapdb_r
#
Функция завершает работу с дескриптором cap_han_t. По функциональности, closecapdb_r() аналогична вызову close() для файлов.
int closecapdb_r (
cap_han_t han
)
Parameters:
han
открытый дескриптор базы данных cap_han_t
Returns:
возвращает 0 в случае успеха, иначе -1 и выставляет errno
function compose_cap
#
Функция возвращает строку формата “root:c:21”, где root - имя пользователя, 0xc - значение битовой маски для PARSEC привилегий, 0x21 - значение битовой маски для Linux привилегий
char * compose_cap (
const struct caps *cap
)
Parameters:
cap
указатель на структуру привилегий.
Returns:
строку с текстовым представлением привилегий, в случае ошибки NULL
function endcapent
#
void endcapent (
void
)
function endcapent_r
#
Функция очищает служебные структуры, используемые в процессе последовательного перебора записей базы данных. Функции setcapent_r(), getcapent_r() и endcapent_r() используются в связке и предназначены для последовательного получения записей из базы данных.
int endcapent_r (
cap_han_t han
)
Parameters:
han
открытый дескриптор базы данных cap_han_t
Returns:
возвращает 0 в случае успеха, иначе -1 и выставляет errno
function fgetcapent
#
struct caps * fgetcapent (
FILE *f
)
function fgetcapent_r
#
Функция считывает запись о привилегиях из файла. Эти функции существуют, в основном, ради совместимости с более ранними версиями библиотеки, а также ради возможности вести локальные, не системные списки привилегий пользователей. Многократные вызовы fgetcapent_r() позволяют последовательно перебрать все записи.
struct caps * fgetcapent_r (
FILE *f
)
Parameters:
f
поток файла
Returns:
в случае успеха возвращает структуру привилегий, в случае ошибки вернет NULL
function fputcapent
#
void fputcapent (
FILE *f,
const struct caps *data
)
function fputcapent_r
#
Функция добавляет/модифицирует запись в файл для пользователя
int fputcapent_r (
FILE *f,
const struct caps *data
)
Parameters:
f
поток файлаdata
структура привилегий, которую нужно добавить/модифицировать в бд
Returns:
в случае успеха возвращает 0, в случае ошибки вернет -1 и выставит errno
function freecapent_r
#
Функция освобождения памяти, выделенной под структуру struct caps Использование стандартной функции free() в данном случае неверно, так как структура struct caps имеет, как минимум, одно поле - указатель на строку, память под которую так же была выделена динамически. Использование free() освободит память, введенную под саму структуру struct caps, но не освободит память, содержащую текстовые строки.
void freecapent_r (
struct caps *cap
)
Parameters:
cap
указатель на структуру привилегий.
function getcapent
#
struct caps * getcapent (
void
)
function getcapent_r
#
Функция считывает запись из базы данных по текущему указателю и переводит сам указатель на следующую запись. Многократные вызовы getcapent_r() позволяют последовательно перебрать все записи.
struct caps * getcapent_r (
cap_han_t han
)
Parameters:
han
открытый дескриптор базы данных cap_han_t
Returns:
в случае успеха возвращает структуру привилегий, в случае ошибки вернет NULL
function getcapnam
#
struct caps * getcapnam (
const char *name
)
function getcapnam_r
#
Функция осуществялет поиск структуры привилегий по имени пользователя
struct caps * getcapnam_r (
cap_han_t han,
const char *name
)
Parameters:
han
открытый дескриптор базы данных cap_han_tname
имя пользователя
Returns:
в случае успеха возвращает структуру привилегий, в случае ошибки вернет NULL
function opencapdb_r
#
Функция создает дескриптор базы данных cap_han_t, по которому впоследствии производятся все обращения к открытой бд. Любые действия с базой данных должны начинаться с вызова функции opencapdb_r(). По функциональности, opencapdb_r() аналогична вызову open() для файлов. Для нормальной работы с базой данных в многопоточной программе, каждый поток должен использовать свой собственный дескриптор, либо защищать все обращения к базе данных по общему дескриптору средствами синхронизации.
cap_han_t opencapdb_r (
void
)
Returns:
дескриптор базы данных cap_han_t в случае успеха, иначе NULL
function parse_cap
#
Функция возвращает структуру привилегий пользователя
struct caps * parse_cap (
const char *buff,
struct caps *cap
)
Parameters:
buff
строка с форматом “root:c:21”, где root - имя пользователя, 0xc - значение битовой маски для PARSEC привилегий, 0x21 - значение битовой маски для Linux привилегийcap
указатель на структуру привилегий.
Returns:
указатель на структуру привилегий, совпадает с параметром cap
function putcapent
#
int putcapent (
const struct caps *data
)
function putcapent_r
#
Функция добавляет/модифицирует запись базы данных для пользователя
int putcapent_r (
cap_han_t han,
const struct caps *data
)
Parameters:
han
открытый дескриптор базы данных cap_han_tdata
структура привилегий, которую нужно добавить/модифицировать в бд
Returns:
в случае успеха возвращает 0, в случае ошибки вернет -1 и выставит errno
function rmcapnam
#
int rmcapnam (
const char *name
)
function rmcapnam_r
#
Функция осуществялет удаление записи о привилягиях по имени пользователя
int rmcapnam_r (
cap_han_t han,
const char *name
)
Parameters:
han
открытый дескриптор базы данных cap_han_tname
имя пользователя
Returns:
в случае успеха возвращает 0, в случае ошибки вернет -1 и выставит errno
function setcapent
#
int setcapent (
void
)
function setcapent_r
#
Функция создает необходимые служебные структуры и устанавливает текущий указатель в начало базы данных.
int setcapent_r (
cap_han_t han
)
Parameters:
han
открытый дескриптор базы данных cap_han_t
Returns:
возвращает 0 в случае успеха, иначе -1 и выставляет errno