Ejemplo n.º 1
0
/* 23.4.2 */
int
acl_calc_mask(acl_t *acl_p)
{
	acl_obj *acl_obj_p;
	acl_entry_obj *entry_obj_p, *mask_obj_p = NULL;
	permset_t perm = ACL_PERM_NONE;
	if (!acl_p) {
		errno = EINVAL;
		return -1;
	}
	acl_obj_p = ext2int(acl, *acl_p);
	if (!acl_obj_p)
		return -1;
	FOREACH_ACL_ENTRY(entry_obj_p, acl_obj_p) {
		switch(entry_obj_p->etag) {
			case ACL_USER_OBJ:
			case ACL_OTHER:
				break;
			case ACL_MASK:
				mask_obj_p = entry_obj_p;
				break;
			case ACL_USER:
			case ACL_GROUP_OBJ:
			case ACL_GROUP:
				perm |= entry_obj_p->eperm.sperm;
				break;
			default:
				errno = EINVAL;
				return -1;
		}
	}
	if (mask_obj_p == NULL) {
		mask_obj_p = __acl_create_entry_obj(acl_obj_p);
		if (mask_obj_p == NULL)
			return -1;
		mask_obj_p->etag = ACL_MASK;
		__acl_reorder_entry_obj_p(mask_obj_p);
	}
	mask_obj_p->eperm.sperm = perm;
	return 0;
}
/* 23.4.24 */
int
acl_set_qualifier(acl_entry_t entry_d, const void *tag_qualifier_p)
{
	acl_entry_obj *entry_obj_p = ext2int(acl_entry, entry_d);
	if (!entry_obj_p)
		return -1;


	switch(entry_obj_p->etag) {
		case ACL_USER:
			entry_obj_p->eid.qid = *(id_t *)tag_qualifier_p;
			break;
		case ACL_GROUP:
			entry_obj_p->eid.qid = *(id_t *)tag_qualifier_p;
			break;
		default:
			errno = EINVAL;
			return -1;
	}
	__acl_reorder_entry_obj_p(entry_obj_p);
	return 0;
}