aclpriv.h 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191
  1. /** BEGIN COPYRIGHT BLOCK
  2. * Copyright (C) 2001 Sun Microsystems, Inc. Used by permission.
  3. * Copyright (C) 2005 Red Hat, Inc.
  4. * All rights reserved.
  5. *
  6. * License: GPL (version 3 or any later version).
  7. * See LICENSE for details.
  8. * END COPYRIGHT BLOCK **/
  9. #ifdef HAVE_CONFIG_H
  10. #include <config.h>
  11. #endif
  12. /*
  13. * ACL private data structure definitions
  14. */
  15. #ifndef ACL_PARSER_HEADER
  16. #define ACL_PARSER_HEADER
  17. #include <netsite.h>
  18. #include <plhash.h>
  19. #include <base/pool.h>
  20. #include <base/plist.h>
  21. #include <libaccess/las.h>
  22. #define ACL_TERM_BSIZE 4
  23. #define ACL_FALSE_IDX -2
  24. #define ACL_TRUE_IDX -1
  25. #define ACL_MIN_IDX 0
  26. #define ACL_EXPR_STACK 1024
  27. #define ACL_TABLE_THRESHOLD 10
  28. #define ACL_NO_UNPUT 1 /* unput is not used and causes compiler warnings */
  29. typedef enum {
  30. ACL_EXPR_OP_AND,
  31. ACL_EXPR_OP_OR,
  32. ACL_EXPR_OP_NOT
  33. } ACLExprOp_t;
  34. typedef struct ACLExprEntry
  35. {
  36. char *attr_name; /* LAS name input */
  37. CmpOp_t comparator; /* LAS comparator input */
  38. char *attr_pattern; /* LAS attribute input */
  39. int false_idx; /* index, -1 true, -2 false */
  40. int true_idx; /* index, -1 true, -2 false */
  41. int start_flag; /* marks start of an expr */
  42. void *las_cookie; /* private data store for LAS */
  43. LASEvalFunc_t las_eval_func; /* LAS function */
  44. } ACLExprEntry_t;
  45. typedef struct ACLExprRaw
  46. {
  47. char *attr_name; /* expr lval */
  48. CmpOp_t comparator; /* comparator */
  49. char *attr_pattern; /* expr rval */
  50. ACLExprOp_t logical; /* logical operator */
  51. } ACLExprRaw_t;
  52. typedef struct ACLExprStack
  53. {
  54. char *expr_text[ACL_EXPR_STACK];
  55. ACLExprRaw_t *expr[ACL_EXPR_STACK];
  56. int stack_index;
  57. int found_subexpression;
  58. int last_subexpression;
  59. } ACLExprStack_t;
  60. typedef struct ACLExprHandle
  61. {
  62. char *expr_tag;
  63. char *acl_tag;
  64. int expr_number;
  65. ACLExprType_t expr_type;
  66. int expr_flags;
  67. int expr_argc;
  68. char **expr_argv;
  69. PList_t expr_auth;
  70. ACLExprEntry_t *expr_arry;
  71. int expr_arry_size;
  72. int expr_term_index;
  73. ACLExprRaw_t *expr_raw;
  74. int expr_raw_index;
  75. int expr_raw_size;
  76. struct ACLExprHandle *expr_next; /* Null-terminated */
  77. } ACLExprHandle_t;
  78. typedef struct ACLHandle
  79. {
  80. int ref_count;
  81. char *tag;
  82. PFlags_t flags;
  83. char *las_name;
  84. pblock *pb;
  85. char **attr_name;
  86. int expr_count;
  87. ACLExprHandle_t *expr_list_head; /* Null-terminated */
  88. ACLExprHandle_t *expr_list_tail;
  89. } ACLHandle_t;
  90. typedef struct ACLWrapper
  91. {
  92. ACLHandle_t *acl;
  93. struct ACLWrapper *wrap_next;
  94. } ACLWrapper_t;
  95. #define ACL_LIST_STALE 0x1
  96. #define ACL_LIST_IS_STALE(x) ((x)->flags & ACL_LIST_STALE)
  97. typedef struct ACLListHandle
  98. {
  99. ACLWrapper_t *acl_list_head; /* Null-terminated */
  100. ACLWrapper_t *acl_list_tail; /* Null-terminated */
  101. int acl_count;
  102. void *acl_sym_table;
  103. void *cache;
  104. uint32 flags;
  105. int ref_count;
  106. } ACLListHandle_t;
  107. typedef struct ACLAceNumEntry
  108. {
  109. int acenum;
  110. struct ACLAceNumEntry *next;
  111. struct ACLAceNumEntry *chain; /* only used for freeing memory */
  112. } ACLAceNumEntry_t;
  113. typedef struct ACLAceEntry
  114. {
  115. ACLExprHandle_t *acep;
  116. /* Array of auth block ptrs for all the expr
  117. clauses in this ACE */
  118. PList_t *autharray;
  119. /* PList with auth blocks for ALL attributes */
  120. PList_t global_auth;
  121. struct ACLAceEntry *next; /* Null-terminated list */
  122. } ACLAceEntry_t;
  123. typedef struct PropList PropList_t;
  124. typedef struct ACLEvalHandle
  125. {
  126. pool_handle_t *pool;
  127. ACLListHandle_t *acllist;
  128. PList_t subject;
  129. PList_t resource;
  130. int default_result;
  131. } ACLEvalHandle_t;
  132. typedef struct ACLListCache
  133. {
  134. /* Hash table for all access rights used in all acls in this list. Each
  135. * hash entry has a list of ACE numbers that relate to this referenced
  136. * access right.
  137. */
  138. PLHashTable *Table;
  139. char *deny_response;
  140. char *deny_type;
  141. ACLAceEntry_t *acelist; /* Evaluation order
  142. * list of all ACEs
  143. */
  144. ACLAceNumEntry_t *chain_head; /* Chain of all Ace num
  145. * entries for this
  146. * ACL list so we can free them
  147. */
  148. ACLAceNumEntry_t *chain_tail;
  149. } ACLListCache_t;
  150. /* this is to speed up acl_to_str_append */
  151. typedef struct acl_string_s
  152. {
  153. char *str;
  154. long str_size;
  155. long str_len;
  156. } acl_string_t;
  157. NSPR_BEGIN_EXTERN_C
  158. extern int ACL_ExprDisplay(ACLExprHandle_t *acl_expr);
  159. extern int ACL_AssertAcl(ACLHandle_t *acl);
  160. extern int ACL_EvalDestroyContext(ACLListCache_t *cache);
  161. extern time_t *acl_get_req_time(PList_t resource);
  162. NSPR_END_EXTERN_C
  163. #endif