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_t

  • name имя пользователя

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_t

  • data структура привилегий, которую нужно добавить/модифицировать в бд

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_t

  • name имя пользователя

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