aclpriv.h 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180
  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. char *attr_name; /* LAS name input */
  36. CmpOp_t comparator; /* LAS comparator input */
  37. char *attr_pattern; /* LAS attribute input */
  38. int false_idx; /* index, -1 true, -2 false */
  39. int true_idx; /* index, -1 true, -2 false */
  40. int start_flag; /* marks start of an expr */
  41. void *las_cookie; /* private data store for LAS */
  42. LASEvalFunc_t las_eval_func; /* LAS function */
  43. } ACLExprEntry_t;
  44. typedef struct ACLExprRaw {
  45. char *attr_name; /* expr lval */
  46. CmpOp_t comparator; /* comparator */
  47. char *attr_pattern; /* expr rval */
  48. ACLExprOp_t logical; /* logical operator */
  49. } ACLExprRaw_t;
  50. typedef struct ACLExprStack {
  51. char *expr_text[ACL_EXPR_STACK];
  52. ACLExprRaw_t *expr[ACL_EXPR_STACK];
  53. int stack_index;
  54. int found_subexpression;
  55. int last_subexpression;
  56. } ACLExprStack_t;
  57. typedef struct ACLExprHandle {
  58. char *expr_tag;
  59. char *acl_tag;
  60. int expr_number;
  61. ACLExprType_t expr_type;
  62. int expr_flags;
  63. int expr_argc;
  64. char **expr_argv;
  65. PList_t expr_auth;
  66. ACLExprEntry_t *expr_arry;
  67. int expr_arry_size;
  68. int expr_term_index;
  69. ACLExprRaw_t *expr_raw;
  70. int expr_raw_index;
  71. int expr_raw_size;
  72. struct ACLExprHandle *expr_next; /* Null-terminated */
  73. } ACLExprHandle_t;
  74. typedef struct ACLHandle {
  75. int ref_count;
  76. char *tag;
  77. PFlags_t flags;
  78. char *las_name;
  79. pblock *pb;
  80. char **attr_name;
  81. int expr_count;
  82. ACLExprHandle_t *expr_list_head; /* Null-terminated */
  83. ACLExprHandle_t *expr_list_tail;
  84. } ACLHandle_t;
  85. typedef struct ACLWrapper {
  86. ACLHandle_t *acl;
  87. struct ACLWrapper *wrap_next;
  88. } ACLWrapper_t;
  89. #define ACL_LIST_STALE 0x1
  90. #define ACL_LIST_IS_STALE(x) ((x)->flags & ACL_LIST_STALE)
  91. typedef struct ACLListHandle {
  92. ACLWrapper_t *acl_list_head; /* Null-terminated */
  93. ACLWrapper_t *acl_list_tail; /* Null-terminated */
  94. int acl_count;
  95. void *acl_sym_table;
  96. void *cache;
  97. uint32 flags;
  98. int ref_count;
  99. } ACLListHandle_t;
  100. typedef struct ACLAceNumEntry {
  101. int acenum;
  102. struct ACLAceNumEntry *next;
  103. struct ACLAceNumEntry *chain; /* only used for freeing memory */
  104. } ACLAceNumEntry_t;
  105. typedef struct ACLAceEntry {
  106. ACLExprHandle_t *acep;
  107. /* Array of auth block ptrs for all the expr
  108. clauses in this ACE */
  109. PList_t *autharray;
  110. /* PList with auth blocks for ALL attributes */
  111. PList_t global_auth;
  112. struct ACLAceEntry *next; /* Null-terminated list */
  113. } ACLAceEntry_t;
  114. typedef struct PropList PropList_t;
  115. typedef struct ACLEvalHandle {
  116. pool_handle_t *pool;
  117. ACLListHandle_t *acllist;
  118. PList_t subject;
  119. PList_t resource;
  120. int default_result;
  121. } ACLEvalHandle_t;
  122. typedef struct ACLListCache {
  123. /* Hash table for all access rights used in all acls in this list. Each
  124. * hash entry has a list of ACE numbers that relate to this referenced
  125. * access right.
  126. */
  127. PLHashTable *Table;
  128. char *deny_response;
  129. char *deny_type;
  130. ACLAceEntry_t *acelist; /* Evaluation order
  131. * list of all ACEs
  132. */
  133. ACLAceNumEntry_t *chain_head; /* Chain of all Ace num
  134. * entries for this
  135. * ACL list so we can free them
  136. */
  137. ACLAceNumEntry_t *chain_tail;
  138. } ACLListCache_t;
  139. /* this is to speed up acl_to_str_append */
  140. typedef struct acl_string_s {
  141. char * str;
  142. long str_size;
  143. long str_len;
  144. } acl_string_t;
  145. NSPR_BEGIN_EXTERN_C
  146. extern int ACL_ExprDisplay( ACLExprHandle_t *acl_expr );
  147. extern int ACL_AssertAcl( ACLHandle_t *acl );
  148. extern int ACL_EvalDestroyContext ( ACLListCache_t *cache );
  149. extern time_t *acl_get_req_time(PList_t resource);
  150. NSPR_END_EXTERN_C
  151. #endif