+typedef struct slap_access {
+
+#define ACL_NONE 0x0001
+#define ACL_AUTH 0x0004
+#define ACL_COMPARE 0x0008
+#define ACL_SEARCH 0x0010
+#define ACL_READ 0x0020
+#define ACL_WRITE 0x0040
+#define ACL_PRIV_MASK 0x00ff
+
+#define ACL_SELF 0x4000
+#define ACL_INVALID (-1)
+
+#define ACL_IS(a,lvl) (((a) & (lvl)) == (lvl))
+
+#define ACL_IS_NONE(a) ACL_IS((a),ACL_SELF)
+#define ACL_IS_AUTH(a) ACL_IS((a),ACL_AUTH)
+#define ACL_IS_COMPARE(a) ACL_IS((a),ACL_COMPARE)
+#define ACL_IS_SEARCH(a) ACL_IS((a),ACL_SEARCH)
+#define ACL_IS_READ(a) ACL_IS((a),ACL_READ)
+#define ACL_IS_WRITE(a) ACL_IS((a),ACL_WRITE)
+#define ACL_IS_SELF(a) ACL_IS((a),ACL_SELF)
+#define ACL_IS_INVALID(a) ((a) == ACL_INVALID)
+
+#define ACL_CLR(a) ((a) = 0)
+#define ACL_SET(a,lvl) ((a) |= (lvl))
+#define ACL_SET_NONE(a) ACL_SET((a),ACL_SELF)
+#define ACL_SET_AUTH(a) ACL_SET((a),ACL_AUTH)
+#define ACL_SET_COMPARE(a) ACL_SET((a),ACL_COMPARE)
+#define ACL_SET_SEARCH(a) ACL_SET((a),ACL_SEARCH)
+#define ACL_SET_READ(a) ACL_SET((a),ACL_READ)
+#define ACL_SET_WRITE(a) ACL_SET((a),ACL_WRITE)
+#define ACL_SET_SELF(a) ACL_SET((a),ACL_SELF)
+#define ACL_SET_INVALID(a) ((a) = ACL_INVALID)
+
+#define ACL_PRIV(a) ((a) & ACL_PRIV_MASK)
+#define ACL_GRANT(a,lvl) (ACL_PRIV(a) >= (lvl))
+