acl-api-private.h revision 7d8afd1e15bdf23b5fd13aa9ac9606aca2797125
c25356d5978632df6203437e1953bcb29e0c736fTimo Sirainen#ifndef ACL_API_PRIVATE_H
c25356d5978632df6203437e1953bcb29e0c736fTimo Sirainen#define ACL_API_PRIVATE_H
7fb70daba4e571eab5b64f496d20b9e37e31141bTimo Sirainen
7fb70daba4e571eab5b64f496d20b9e37e31141bTimo Sirainen#include "acl-api.h"
7fb70daba4e571eab5b64f496d20b9e37e31141bTimo Sirainen
02a54da28f376dd66d7939d8546a196a0045b486Timo Sirainen#define ACL_ID_NAME_ANYONE "anyone"
02a54da28f376dd66d7939d8546a196a0045b486Timo Sirainen#define ACL_ID_NAME_AUTHENTICATED "authenticated"
02a54da28f376dd66d7939d8546a196a0045b486Timo Sirainen#define ACL_ID_NAME_OWNER "owner"
02a54da28f376dd66d7939d8546a196a0045b486Timo Sirainen#define ACL_ID_NAME_USER_PREFIX "user="
02a54da28f376dd66d7939d8546a196a0045b486Timo Sirainen#define ACL_ID_NAME_GROUP_PREFIX "group="
02a54da28f376dd66d7939d8546a196a0045b486Timo Sirainen#define ACL_ID_NAME_GROUP_OVERRIDE_PREFIX "group-override="
02a54da28f376dd66d7939d8546a196a0045b486Timo Sirainen
7fb70daba4e571eab5b64f496d20b9e37e31141bTimo Sirainenstruct acl_backend_vfuncs {
3809b9691c46926aa54968ac8e418d04361e1efaTimo Sirainen struct acl_backend *(*alloc)(void);
3809b9691c46926aa54968ac8e418d04361e1efaTimo Sirainen int (*init)(struct acl_backend *backend, const char *data);
7fb70daba4e571eab5b64f496d20b9e37e31141bTimo Sirainen void (*deinit)(struct acl_backend *backend);
7fb70daba4e571eab5b64f496d20b9e37e31141bTimo Sirainen
2f122b4db3f0d4eeb59ff9d306e54b2009d72cf9Timo Sirainen struct acl_mailbox_list_context *
2f122b4db3f0d4eeb59ff9d306e54b2009d72cf9Timo Sirainen (*nonowner_lookups_iter_init)(struct acl_backend *backend);
2f122b4db3f0d4eeb59ff9d306e54b2009d72cf9Timo Sirainen int (*nonowner_lookups_iter_next)(struct acl_mailbox_list_context *ctx,
2f122b4db3f0d4eeb59ff9d306e54b2009d72cf9Timo Sirainen const char **name_r);
2f122b4db3f0d4eeb59ff9d306e54b2009d72cf9Timo Sirainen void (*nonowner_lookups_iter_deinit)
2f122b4db3f0d4eeb59ff9d306e54b2009d72cf9Timo Sirainen (struct acl_mailbox_list_context *ctx);
2f122b4db3f0d4eeb59ff9d306e54b2009d72cf9Timo Sirainen
7fb70daba4e571eab5b64f496d20b9e37e31141bTimo Sirainen struct acl_object *(*object_init)(struct acl_backend *backend,
3809b9691c46926aa54968ac8e418d04361e1efaTimo Sirainen const char *name);
da9f6acdcb303d0fe5160b669668aedf39c8f45aTimo Sirainen struct acl_object *(*object_init_parent)(struct acl_backend *backend,
da9f6acdcb303d0fe5160b669668aedf39c8f45aTimo Sirainen const char *child_name);
7fb70daba4e571eab5b64f496d20b9e37e31141bTimo Sirainen void (*object_deinit)(struct acl_object *aclobj);
7fb70daba4e571eab5b64f496d20b9e37e31141bTimo Sirainen
7fb70daba4e571eab5b64f496d20b9e37e31141bTimo Sirainen int (*object_refresh_cache)(struct acl_object *aclobj);
7fb70daba4e571eab5b64f496d20b9e37e31141bTimo Sirainen int (*object_update)(struct acl_object *aclobj,
02a54da28f376dd66d7939d8546a196a0045b486Timo Sirainen const struct acl_rights_update *update);
7fb70daba4e571eab5b64f496d20b9e37e31141bTimo Sirainen
7fb70daba4e571eab5b64f496d20b9e37e31141bTimo Sirainen struct acl_object_list_iter *
7fb70daba4e571eab5b64f496d20b9e37e31141bTimo Sirainen (*object_list_init)(struct acl_object *aclobj);
7fb70daba4e571eab5b64f496d20b9e37e31141bTimo Sirainen int (*object_list_next)(struct acl_object_list_iter *iter,
7fb70daba4e571eab5b64f496d20b9e37e31141bTimo Sirainen struct acl_rights *rights_r);
7fb70daba4e571eab5b64f496d20b9e37e31141bTimo Sirainen void (*object_list_deinit)(struct acl_object_list_iter *iter);
7fb70daba4e571eab5b64f496d20b9e37e31141bTimo Sirainen};
7fb70daba4e571eab5b64f496d20b9e37e31141bTimo Sirainen
7fb70daba4e571eab5b64f496d20b9e37e31141bTimo Sirainenstruct acl_backend {
7fb70daba4e571eab5b64f496d20b9e37e31141bTimo Sirainen pool_t pool;
2f122b4db3f0d4eeb59ff9d306e54b2009d72cf9Timo Sirainen const char *username;
7fb70daba4e571eab5b64f496d20b9e37e31141bTimo Sirainen const char **groups;
7fb70daba4e571eab5b64f496d20b9e37e31141bTimo Sirainen unsigned int group_count;
7fb70daba4e571eab5b64f496d20b9e37e31141bTimo Sirainen
e7ca5f820d6a1a8fe549a2966ac707a60e055ef4Timo Sirainen struct mailbox_list *list;
7fb70daba4e571eab5b64f496d20b9e37e31141bTimo Sirainen struct acl_cache *cache;
8ab69d02c689fbdad2a1c83a5cd27e6adf21ca6cTimo Sirainen
8ab69d02c689fbdad2a1c83a5cd27e6adf21ca6cTimo Sirainen struct acl_object *default_aclobj;
8ab69d02c689fbdad2a1c83a5cd27e6adf21ca6cTimo Sirainen struct acl_mask *default_aclmask;
7705148680904051b573a9125ecee765032a5809Timo Sirainen const char *const *default_rights;
7fb70daba4e571eab5b64f496d20b9e37e31141bTimo Sirainen
7fb70daba4e571eab5b64f496d20b9e37e31141bTimo Sirainen struct acl_backend_vfuncs v;
3809b9691c46926aa54968ac8e418d04361e1efaTimo Sirainen
2f122b4db3f0d4eeb59ff9d306e54b2009d72cf9Timo Sirainen unsigned int owner:1;
3809b9691c46926aa54968ac8e418d04361e1efaTimo Sirainen unsigned int debug:1;
7fb70daba4e571eab5b64f496d20b9e37e31141bTimo Sirainen};
7fb70daba4e571eab5b64f496d20b9e37e31141bTimo Sirainen
2f122b4db3f0d4eeb59ff9d306e54b2009d72cf9Timo Sirainenstruct acl_mailbox_list_context {
2f122b4db3f0d4eeb59ff9d306e54b2009d72cf9Timo Sirainen struct acl_backend *backend;
2f122b4db3f0d4eeb59ff9d306e54b2009d72cf9Timo Sirainen};
2f122b4db3f0d4eeb59ff9d306e54b2009d72cf9Timo Sirainen
7fb70daba4e571eab5b64f496d20b9e37e31141bTimo Sirainenstruct acl_object {
7fb70daba4e571eab5b64f496d20b9e37e31141bTimo Sirainen struct acl_backend *backend;
7fb70daba4e571eab5b64f496d20b9e37e31141bTimo Sirainen char *name;
7fb70daba4e571eab5b64f496d20b9e37e31141bTimo Sirainen};
7fb70daba4e571eab5b64f496d20b9e37e31141bTimo Sirainen
7fb70daba4e571eab5b64f496d20b9e37e31141bTimo Sirainenstruct acl_object_list_iter {
7fb70daba4e571eab5b64f496d20b9e37e31141bTimo Sirainen struct acl_object *aclobj;
2f122b4db3f0d4eeb59ff9d306e54b2009d72cf9Timo Sirainen
2f122b4db3f0d4eeb59ff9d306e54b2009d72cf9Timo Sirainen unsigned int idx;
2f122b4db3f0d4eeb59ff9d306e54b2009d72cf9Timo Sirainen unsigned int failed:1;
7fb70daba4e571eab5b64f496d20b9e37e31141bTimo Sirainen};
7fb70daba4e571eab5b64f496d20b9e37e31141bTimo Sirainen
7d8afd1e15bdf23b5fd13aa9ac9606aca2797125Timo Sirainenextern const char *const all_mailbox_rights[];
7d8afd1e15bdf23b5fd13aa9ac9606aca2797125Timo Sirainen
02a54da28f376dd66d7939d8546a196a0045b486Timo Sirainenconst char *const *
02a54da28f376dd66d7939d8546a196a0045b486Timo Sirainenacl_backend_mask_get_names(struct acl_backend *backend,
02a54da28f376dd66d7939d8546a196a0045b486Timo Sirainen const struct acl_mask *mask, pool_t pool);
2f122b4db3f0d4eeb59ff9d306e54b2009d72cf9Timo Sirainenint acl_backend_get_default_rights(struct acl_backend *backend,
2f122b4db3f0d4eeb59ff9d306e54b2009d72cf9Timo Sirainen const struct acl_mask **mask_r);
81e6e1ef0feef60644a4c4b745d82a4c98223affTimo Sirainenvoid acl_rights_write_id(string_t *dest, const struct acl_rights *right);
3cd0463d17cf9ecbc3d826d60b36800d09f0633cTimo Sirainenbool acl_rights_has_nonowner_lookup_changes(const struct acl_rights *rights);
2f122b4db3f0d4eeb59ff9d306e54b2009d72cf9Timo Sirainen
7d8afd1e15bdf23b5fd13aa9ac9606aca2797125Timo Sirainenint acl_identifier_parse(const char *line, struct acl_rights *rights);
7d8afd1e15bdf23b5fd13aa9ac9606aca2797125Timo Sirainen
7fb70daba4e571eab5b64f496d20b9e37e31141bTimo Sirainen#endif