Читаем Linux API. Исчерпывающее руководство полностью

Функция acl_get_file() извлекает копию ACL-списка файла, идентифицируемого по аргументу pathname.

acl_t acl;

acl = acl_get_file(pathname, type);

Эта функция извлекает либо ACL-список доступа, либо ACL-список по умолчанию, в зависимости от того, какое значение указано для аргумента type: ACL_TYPE_ACCESS или ACL_TYPE_DEFAULT. В качестве результата функция acl_get_file() возвращает описатель (типа acl_t) для использования с другими ACL-функциями.


Извлечение записей ACL-списка, размещенного в памяти

Функция acl_get_entry() извлекает описатель (типа acl_entry_t), соотнесенный с одной из записей ACL-списка, размещенного в памяти и указанного с помощью аргумента acl. Данный описатель возвращается в то место, на которое указывает последний аргумент функции.

acl_entry_t entry;

status = acl_get_entry(acl, entry_id, &entry);

Аргумент entry_id определяет, описатель какой записи следует возвращать. Если для этого аргумента указано значение ACL_FIRST_ENTRY, то возвращается описатель первой записи в ACL-списке. Если для аргумента entry_id указано значение ACL_NEXT_ENTRY, то возвращается описатель записи, следующей за последней извлеченной записью ACL-списка. Таким образом, можно организовать цикл по всем записям в ACL-списке, указав для аргумента type при первом вызове значение ACL_FIRST_ENTRY, а при последующих вызовах — значение ACL_NEXT_ENTRY.

Функция acl_get_entry() возвращает 1 в случае успешного извлечения записи ACL-списка, 0 — если записей больше нет и –1 в случае ошибки.


Извлечение и изменение атрибутов в записи ACL-списка

Функции acl_get_tag_type() и acl_set_tag_type() извлекают и меняют тип тега в записи ACL-списка, на которую указывает аргумент entry.

acl_tag_t tag_type;


status = acl_get_tag_type(entry, &tag_type);

status = acl_set_tag_type(entry, tag_type);

Аргумент tag_type имеет тип acl_type_t (целочисленным) и одно из следующих значений: ACL_USER_OBJ, ACL_USER, ACL_GROUP_OBJ, ACL_GROUP, ACL_OTHER или ACL_MASK.

Функции acl_get_qualifier() и acl_set_qualifier() извлекают и меняют тег-спецификатор в записи ACL-списка, на которую указывает аргумент entry. Рассмотрим пример: в нем мы полагаем, что данная запись уже определена нами как ACL_USER за счет соблюдения типа тега:

uid_t *qualp; /* Указатель на UID */


qualp = acl_get_qualifier(entry);

status = acl_set_qualifier(entry, qualp);

Тег-спецификатор действителен, только если тип тега данной записи равен ACL_USER или ACL_GROUP. В первом случае указатель qualp является указателем на идентификатор пользователя (uid_t *), а во втором случае — на идентификатор группы (gid_t *).

Функции acl_get_permset() и acl_set_permset() извлекают и изменяют набор прав доступа в записи ACL-списка, на которую ссылается аргумент entry.

acl_permset_t permset;


status = acl_get_permset(entry, &permset);

status = acl_set_permset(entry, permset);

Тип данных acl_permset_t является описателем, ссылающимся на набор прав доступа.

Следующие функции используются для работы с содержимым набора прав доступа:

int is_set;


is_set = acl_get_perm(permset, perm);

status = acl_add_perm(permset, perm);

status = acl_delete_perm(permset, perm);

status = acl_clear_perms(permset);

В каждом из перечисленных вызовов для аргумента perm указывается значение ACL_READ, ACL_WRITE или ACL_EXECUTE с обычным смыслом. Эти функции используются следующим образом:

• функция acl_get_perm() возвращает 1 (true), если право, указанное в аргументе perm, задействовано в наборе прав доступа, на который ссылается аргумент permset, и 0 — если это не так. Данная функция является расширением предварительного стандарта POSIX.1e в Linux;

• функция acl_add_perm() добавляет право доступа, указанное в аргументе perm, к набору прав, на который ссылается аргумент permset;

• функция acl_delete_perm() изымает право, указанное в аргументе perm, из набора прав доступа, на который ссылается аргумент permset (не является ошибкой удаление отсутствуюещего в наборе права);

• функция acl_clear_perms() удаляет все права доступа из набора, на который указывает аргумент permset.


Создание и удаление записей ACL-списка

Функция acl_create_entry() создает новую запись в существующем ACL-списке. Описатель, соотнесенный с новой записью, возвращается в то место, на которое указывает второй аргумент функции.

acl_entry_t entry;


status = acl_create_entry(&acl, &entry);

После этого новую запись можно заполнить с помощью функций, описанных ранее. Функция acl_delete_entry() удаляет запись из ACL-списка.

status = acl_delete_entry(acl, entry);


Обновление ACL-списка файла

Функция acl_set_file() является противоположностью функции acl_get_file(). Она обновляет расположенный на диске ACL-список с помощью содержимого ACL-списка, находящегося в памяти и указанного в аргументе acl.

int status;


status = acl_set_file(pathname, type, acl);

Перейти на страницу:

Похожие книги

C++ Primer Plus
C++ Primer Plus

C++ Primer Plus is a carefully crafted, complete tutorial on one of the most significant and widely used programming languages today. An accessible and easy-to-use self-study guide, this book is appropriate for both serious students of programming as well as developers already proficient in other languages.The sixth edition of C++ Primer Plus has been updated and expanded to cover the latest developments in C++, including a detailed look at the new C++11 standard.Author and educator Stephen Prata has created an introduction to C++ that is instructive, clear, and insightful. Fundamental programming concepts are explained along with details of the C++ language. Many short, practical examples illustrate just one or two concepts at a time, encouraging readers to master new topics by immediately putting them to use.Review questions and programming exercises at the end of each chapter help readers zero in on the most critical information and digest the most difficult concepts.In C++ Primer Plus, you'll find depth, breadth, and a variety of teaching techniques and tools to enhance your learning:• A new detailed chapter on the changes and additional capabilities introduced in the C++11 standard• Complete, integrated discussion of both basic C language and additional C++ features• Clear guidance about when and why to use a feature• Hands-on learning with concise and simple examples that develop your understanding a concept or two at a time• Hundreds of practical sample programs• Review questions and programming exercises at the end of each chapter to test your understanding• Coverage of generic C++ gives you the greatest possible flexibility• Teaches the ISO standard, including discussions of templates, the Standard Template Library, the string class, exceptions, RTTI, and namespaces

Стивен Прата

Программирование, программы, базы данных
1С: Бухгалтерия 8 с нуля
1С: Бухгалтерия 8 с нуля

Книга содержит полное описание приемов и методов работы с программой 1С:Бухгалтерия 8. Рассматривается автоматизация всех основных участков бухгалтерии: учет наличных и безналичных денежных средств, основных средств и НМА, прихода и расхода товарно-материальных ценностей, зарплаты, производства. Описано, как вводить исходные данные, заполнять справочники и каталоги, работать с первичными документами, проводить их по учету, формировать разнообразные отчеты, выводить данные на печать, настраивать программу и использовать ее сервисные функции. Каждый урок содержит подробное описание рассматриваемой темы с детальным разбором и иллюстрированием всех этапов.Для широкого круга пользователей.

Алексей Анатольевич Гладкий

Программирование, программы, базы данных / Программное обеспечение / Бухучет и аудит / Финансы и бизнес / Книги по IT / Словари и Энциклопедии
C# 4.0: полное руководство
C# 4.0: полное руководство

В этом полном руководстве по C# 4.0 - языку программирования, разработанному специально для среды .NET, - детально рассмотрены все основные средства языка: типы данных, операторы, управляющие операторы, классы, интерфейсы, методы, делегаты, индексаторы, события, указатели, обобщения, коллекции, основные библиотеки классов, средства многопоточного программирования и директивы препроцессора. Подробно описаны новые возможности C#, в том числе PLINQ, библиотека TPL, динамический тип данных, а также именованные и необязательные аргументы. Это справочное пособие снабжено массой полезных советов авторитетного автора и сотнями примеров программ с комментариями, благодаря которым они становятся понятными любому читателю независимо от уровня его подготовки. Книга рассчитана на широкий круг читателей, интересующихся программированием на C#.Введите сюда краткую аннотацию

Герберт Шилдт

Программирование, программы, базы данных