Если я неправильно понял вопрос, я прошу прощения, но, надеюсь, вы найдете это полезным:
Исключение из некоторой документации acl :
Следующие функции получают и обрабатывают записи ACL:
acl_copy_entry()
acl_create_entry()
acl_delete_entry()
acl_first_entry()
acl_get_entry()
Следующие функции извлекают и обрабатывают поля в записи ACL:
acl_add_perm()
acl_clear_perm()
alc_delete_perm()
acl_get_permset()
acl_get_qualifier()
acl_get_tag_type()
acl_set_permset()
acl_set_qualifier()
acl_set_tag_type()
...
Записи ACL
Запись ACL состоит из следующих полей:
Тип тега (определенный в заголовочном файле acl.h):
ACL_USER_OBJ - Пользовательская запись.
ACL_GROUP_OBJ - Запись группы-владельца.
ACL_USER - запись для других пользователей.
ACL_GROUP - запись для других групп.
ACL_OTHER_OBJ - запись для всех пользователей и групп, не включенных в другую запись.
Спецификатор тега. Значение квалификатора для записи ACL_USER представляет собой идентификатор пользователя.
Значение квалификатора для записи ACL_GROUP является идентификатором группы.
Значение квалификатора для любой записи * _OBJ равно NULL.
С acl_update.c :
/*
Find the the ACL entry in 'acl' corresponding to the tag type and
qualifier in 'tag' and 'id'. Return the matching entry, or NULL
if no entry was found. */
static acl_entry_t
findEntry(acl_t acl, acl_tag_t tag, id_t qaul)
{
acl_entry_t entry;
acl_tag_t entryTag;
uid_t *uidp;
gid_t *gidp;
int ent, s;
for (ent = ACL_FIRST_ENTRY; ; ent = ACL_NEXT_ENTRY) {
s = acl_get_entry(acl, ent, &entry);
if (s == -1)
errExit("acl_get_entry");
if (s == 0)
return NULL;
if (acl_get_tag_type(entry, &entryTag) == -1)
errExit("acl_get_tag_type");
if (tag == entryTag) {
if (tag == ACL_USER) {
uidp = acl_get_qualifier(entry);
if (uidp == NULL)
errExit("acl_get_qualifier");
if (qaul == *uidp) {
if (acl_free(uidp) == -1)
errExit("acl_free");
return entry;
} else {
if (acl_free(uidp) == -1)
errExit("acl_free");
}
} else if (tag == ACL_GROUP) {
gidp = acl_get_qualifier(entry);
if (gidp == NULL)
errExit("acl_get_qualifier");
if (qaul == *gidp) {
if (acl_free(gidp) == -1)
errExit("acl_free");
return entry;
} else {
if (acl_free(gidp) == -1)
errExit("acl_free");
}
} else {
return entry;
}
}
}
}
Я не думаю, что вам нужно проверять ACL определенного файла, но если я ошибаюсь, вот некоторая информация для этого:
$ getfacl myFile
# file: myFile
# owner: jon
# group: people
user::rwx
user:foo:rwx
group::rwx
mask::rwx
other::---
затем, чтобы получить идентификатор от имени (не проверено, но должно быть близко):
$ grep /etc/passwd `getfacl myFile | grep owner | split -d":" -f2` | egrep -o "[0-9]+"
Еще несколько ресурсов:
acl / facl примеры и ссылки
человек acl
Списки контроля доступа POSIX
statacl