Blame libacl/libacl.h

rpm-build 0a0c83
/*
rpm-build 0a0c83
  Copyright (C) 2000, 2002, 2003  Andreas Gruenbacher <agruen@suse.de>
rpm-build 0a0c83
rpm-build 0a0c83
  This program is free software: you can redistribute it and/or modify it
rpm-build 0a0c83
  under the terms of the GNU Lesser General Public License as published by
rpm-build 0a0c83
  the Free Software Foundation, either version 2.1 of the License, or
rpm-build 0a0c83
  (at your option) any later version.
rpm-build 0a0c83
rpm-build 0a0c83
  This program is distributed in the hope that it will be useful,
rpm-build 0a0c83
  but WITHOUT ANY WARRANTY; without even the implied warranty of
rpm-build 0a0c83
  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
rpm-build 0a0c83
  GNU Lesser General Public License for more details.
rpm-build 0a0c83
rpm-build 0a0c83
  You should have received a copy of the GNU Lesser General Public License
rpm-build 0a0c83
  along with this program.  If not, see <http://www.gnu.org/licenses/>.
rpm-build 0a0c83
*/
rpm-build 0a0c83
rpm-build 0a0c83
#include "config.h"
rpm-build 0a0c83
#include <errno.h>
rpm-build 0a0c83
#include <sys/acl.h>
rpm-build 0a0c83
#include <acl/libacl.h>
rpm-build 0a0c83
#include <errno.h>
rpm-build 0a0c83
#include "libobj.h"
rpm-build 0a0c83
rpm-build 0a0c83
#ifndef ENOATTR
rpm-build 0a0c83
# define ENOATTR ENODATA
rpm-build 0a0c83
#endif
rpm-build 0a0c83
rpm-build 0a0c83
typedef unsigned int permset_t;
rpm-build 0a0c83
rpm-build 0a0c83
#define ACL_PERM_NONE		(0x0000)
rpm-build 0a0c83
rpm-build 0a0c83
/* object types */
rpm-build 0a0c83
struct acl_permset_obj_tag;
rpm-build 0a0c83
typedef struct acl_permset_obj_tag acl_permset_obj;
rpm-build 0a0c83
struct qualifier_obj_tag;
rpm-build 0a0c83
typedef struct qualifier_obj_tag qualifier_obj;
rpm-build 0a0c83
struct acl_entry_obj_tag;
rpm-build 0a0c83
typedef struct acl_entry_obj_tag acl_entry_obj;
rpm-build 0a0c83
struct acl_obj_tag;
rpm-build 0a0c83
typedef struct acl_obj_tag acl_obj;
rpm-build 0a0c83
rpm-build 0a0c83
/* permset_t object */
rpm-build 0a0c83
struct __acl_permset_ext {
rpm-build 0a0c83
	permset_t		s_perm;
rpm-build 0a0c83
};
rpm-build 0a0c83
struct acl_permset_obj_tag {
rpm-build 0a0c83
	obj_prefix		o_prefix;
rpm-build 0a0c83
	struct __acl_permset_ext i;
rpm-build 0a0c83
};
rpm-build 0a0c83
rpm-build 0a0c83
#define sperm i.s_perm
rpm-build 0a0c83
#define oprefix i.o_prefix
rpm-build 0a0c83
rpm-build 0a0c83
#define permset_obj_equal(s1, s2) \
rpm-build 0a0c83
	((s1).sperm == (s2).sperm)
rpm-build 0a0c83
rpm-build 0a0c83
/* qualifier object */
rpm-build 0a0c83
struct __qualifier_ext {
rpm-build 0a0c83
        id_t                    q_id;
rpm-build 0a0c83
};
rpm-build 0a0c83
rpm-build 0a0c83
struct qualifier_obj_tag {
rpm-build 0a0c83
	obj_prefix		o_prefix;
rpm-build 0a0c83
	struct __qualifier_ext	i;
rpm-build 0a0c83
};
rpm-build 0a0c83
rpm-build 0a0c83
#define qid i.q_id
rpm-build 0a0c83
rpm-build 0a0c83
#define qualifier_obj_id(q) \
rpm-build 0a0c83
	((q).qid)
rpm-build 0a0c83
rpm-build 0a0c83
/* acl_entry object */
rpm-build 0a0c83
struct __acl_entry {
rpm-build 0a0c83
	acl_tag_t		e_tag;
rpm-build 0a0c83
	qualifier_obj		e_id;
rpm-build 0a0c83
	acl_permset_obj		e_perm;
rpm-build 0a0c83
};
rpm-build 0a0c83
rpm-build 0a0c83
struct __acl_entry_ext {
rpm-build 0a0c83
	acl_entry_obj		*e_prev, *e_next;
rpm-build 0a0c83
	acl_obj			*e_container;
rpm-build 0a0c83
	struct __acl_entry	e_entry;
rpm-build 0a0c83
};
rpm-build 0a0c83
rpm-build 0a0c83
struct acl_entry_obj_tag {
rpm-build 0a0c83
	obj_prefix              o_prefix;
rpm-build 0a0c83
	struct __acl_entry_ext	i;
rpm-build 0a0c83
};
rpm-build 0a0c83
	
rpm-build 0a0c83
#define econtainer i.e_container
rpm-build 0a0c83
#define eprev i.e_prev
rpm-build 0a0c83
#define enext i.e_next
rpm-build 0a0c83
#define eentry i.e_entry
rpm-build 0a0c83
#define etag i.e_entry.e_tag
rpm-build 0a0c83
#define eperm i.e_entry.e_perm
rpm-build 0a0c83
#define eid   i.e_entry.e_id
rpm-build 0a0c83
rpm-build 0a0c83
#define init_acl_entry_obj(entry) do { \
rpm-build 0a0c83
	(entry).etag = ACL_UNDEFINED_TAG; \
rpm-build 0a0c83
	new_obj_p_here(acl_permset, &(entry).eperm); \
rpm-build 0a0c83
	(entry).eperm.sperm = ACL_PERM_NONE; \
rpm-build 0a0c83
	new_obj_p_here(qualifier, &(entry).eid); \
rpm-build 0a0c83
	(entry).eid.qid = ACL_UNDEFINED_ID; \
rpm-build 0a0c83
	} while(0)
rpm-build 0a0c83
rpm-build 0a0c83
/* acl object */
rpm-build 0a0c83
struct __acl_ext {
rpm-build 0a0c83
	acl_entry_obj		*a_prev, *a_next;
rpm-build 0a0c83
	acl_entry_obj		*a_curr;
rpm-build 0a0c83
	acl_entry_obj		*a_prealloc, *a_prealloc_end;
rpm-build 0a0c83
	size_t			a_used;
rpm-build 0a0c83
};
rpm-build 0a0c83
struct acl_obj_tag {
rpm-build 0a0c83
	obj_prefix              o_prefix;
rpm-build 0a0c83
	struct __acl_ext	i;
rpm-build 0a0c83
};
rpm-build 0a0c83
rpm-build 0a0c83
#define aprev		i.a_prev
rpm-build 0a0c83
#define anext		i.a_next
rpm-build 0a0c83
#define acurr		i.a_curr
rpm-build 0a0c83
#define aused		i.a_used
rpm-build 0a0c83
#define aprealloc	i.a_prealloc
rpm-build 0a0c83
#define aprealloc_end	i.a_prealloc_end
rpm-build 0a0c83
rpm-build 0a0c83
/* external ACL representation */
rpm-build 0a0c83
struct __acl {
rpm-build 0a0c83
	size_t			x_size;
rpm-build 0a0c83
	struct __acl_entry	x_entries[0];
rpm-build 0a0c83
};
rpm-build 0a0c83
rpm-build 0a0c83
extern int __acl_reorder_entry_obj_p(acl_entry_obj *acl_entry_obj_p) hidden;
rpm-build 0a0c83
extern int __acl_reorder_obj_p(acl_obj *acl_obj_p) hidden;
rpm-build 0a0c83
rpm-build 0a0c83
extern acl_obj *__acl_init_obj(int count) hidden;
rpm-build 0a0c83
extern acl_entry_obj *__acl_create_entry_obj(acl_obj *acl_obj_p) hidden;
rpm-build 0a0c83
extern void __acl_free_acl_obj(acl_obj *acl_obj_p) hidden;
rpm-build 0a0c83
rpm-build 0a0c83
extern char *__acl_to_any_text(acl_t acl, ssize_t *len_p,
rpm-build 0a0c83
			       const char *prefix, char separator,
rpm-build 0a0c83
			       const char *suffix, int options) hidden;
rpm-build 0a0c83
extern int __apply_mask_to_mode(mode_t *mode, acl_t acl) hidden;
rpm-build 0a0c83
rpm-build 0a0c83
#define FOREACH_ACL_ENTRY(entry_obj_p, acl_obj_p) \
rpm-build 0a0c83
	for( (entry_obj_p) = (acl_obj_p)->anext; \
rpm-build 0a0c83
	     (entry_obj_p) != (acl_entry_obj *)(acl_obj_p); \
rpm-build 0a0c83
	     (entry_obj_p) = (entry_obj_p)->enext )