summaryrefslogtreecommitdiff
path: root/libacl/libacl.h
diff options
context:
space:
mode:
authorNathan Scott <nathans@sgi.com>2002-02-25 22:37:38 +0000
committerNathan Scott <nathans@sgi.com>2002-02-25 22:37:38 +0000
commit0d34815f56f46e5d3674f55930b7d9d691fc33d9 (patch)
tree8c2989edb1ddf4d28c5aababee32fc8be89406b5 /libacl/libacl.h
parentc9f8bfe909a76d624ba8061d35a28141f43ed251 (diff)
downloadacl-0d34815f56f46e5d3674f55930b7d9d691fc33d9.tar.gz
Merge of xfs-cmds-2.4.18:slinx:112262a by nathans.
Removed, replaced by a new version of the ACL userspace from AndreasG.
Diffstat (limited to 'libacl/libacl.h')
-rw-r--r--libacl/libacl.h114
1 files changed, 114 insertions, 0 deletions
diff --git a/libacl/libacl.h b/libacl/libacl.h
new file mode 100644
index 0000000..b25f5dd
--- /dev/null
+++ b/libacl/libacl.h
@@ -0,0 +1,114 @@
+#include <errno.h>
+#include <sys/acl.h>
+#include "libobj.h"
+
+typedef unsigned int permset_t;
+
+#define ACL_PERM_NONE (0x0000)
+
+/* object types */
+struct acl_permset_obj_tag;
+typedef struct acl_permset_obj_tag acl_permset_obj;
+struct qualifier_obj_tag;
+typedef struct qualifier_obj_tag qualifier_obj;
+struct acl_entry_obj_tag;
+typedef struct acl_entry_obj_tag acl_entry_obj;
+struct acl_obj_tag;
+typedef struct acl_obj_tag acl_obj;
+
+/* permset_t object */
+struct __acl_permset_ext {
+ permset_t s_perm;
+};
+struct acl_permset_obj_tag {
+ obj_prefix o_prefix;
+ struct __acl_permset_ext i;
+};
+
+#define sperm i.s_perm
+#define oprefix i.o_prefix
+
+#define permset_obj_equal(s1, s2) \
+ ((s1).sperm == (s2).sperm)
+
+/* qualifier object */
+struct __qualifier_ext {
+ id_t q_id;
+};
+
+struct qualifier_obj_tag {
+ obj_prefix o_prefix;
+ struct __qualifier_ext i;
+};
+
+#define qid i.q_id
+
+#define qualifier_obj_id(q) \
+ ((q).qid)
+
+/* acl_entry object */
+struct __acl_entry {
+ acl_tag_t e_tag;
+ qualifier_obj e_id;
+ acl_permset_obj e_perm;
+};
+
+struct __acl_entry_ext {
+ acl_entry_obj *e_prev, *e_next;
+ acl_obj *e_container;
+ struct __acl_entry e_entry;
+};
+
+struct acl_entry_obj_tag {
+ obj_prefix o_prefix;
+ struct __acl_entry_ext i;
+};
+
+#define econtainer i.e_container
+#define eprev i.e_prev
+#define enext i.e_next
+#define eentry i.e_entry
+#define etag i.e_entry.e_tag
+#define eperm i.e_entry.e_perm
+#define eid i.e_entry.e_id
+
+#define init_acl_entry_obj(entry) do { \
+ (entry).etag = ACL_UNDEFINED_TAG; \
+ init_obj(acl_permset, (entry).eperm); \
+ (entry).eperm.sperm = ACL_PERM_NONE; \
+ init_obj(qualifier, (entry).eid); \
+ (entry).eid.qid = ACL_UNDEFINED_ID; \
+ } while(0)
+
+/* acl object */
+struct __acl_ext {
+ acl_entry_obj *a_prev, *a_next;
+ acl_entry_obj *a_curr;
+ size_t a_used;
+};
+struct acl_obj_tag {
+ obj_prefix o_prefix;
+ struct __acl_ext i;
+};
+
+#define aprev i.a_prev
+#define anext i.a_next
+#define acurr i.a_curr
+#define aused i.a_used
+
+/* external ACL representation */
+struct __acl {
+ size_t x_size;
+ struct __acl_entry x_entries[0];
+};
+
+int __acl_reorder_obj_p(acl_entry_obj *acl_entry_obj_p);
+acl_obj * __acl_init_obj(void);
+acl_entry_obj * __acl_create_entry_obj(acl_obj *acl_obj_p);
+void __acl_free_acl_obj(acl_obj *acl_obj_p);
+
+#define FOREACH_ACL_ENTRY(entry_obj_p, acl_obj_p) \
+ for( (entry_obj_p) = (acl_obj_p)->anext; \
+ (entry_obj_p) != (acl_entry_obj *)(acl_obj_p); \
+ (entry_obj_p) = (entry_obj_p)->enext )
+