1 /* GROUP FILE ROUTINES 2 3 */ 4 5 #ifndef HTGROUP_H 6 #define HTGROUP_H 7 8 #include <HTList.h> 9 10 #ifdef __cplusplus 11 extern "C" { 12 #endif 13 typedef HTList GroupDefList; 14 typedef HTList ItemList; 15 16 typedef struct { 17 char *group_name; 18 ItemList *item_list; 19 } GroupDef; 20 21 /* 22 * Access Authorization failure reasons 23 */ 24 typedef enum { 25 HTAA_OK, /* 200 OK */ 26 HTAA_OK_GATEWAY, /* 200 OK, acting as a gateway */ 27 HTAA_NO_AUTH, /* 401 Unauthorized, not authenticated */ 28 HTAA_NOT_MEMBER, /* 401 Unauthorized, not authorized */ 29 HTAA_IP_MASK, /* 403 Forbidden by IP mask */ 30 HTAA_BY_RULE, /* 403 Forbidden by rule */ 31 HTAA_NO_ACL, /* 403 Forbidden, ACL non-existent */ 32 HTAA_NO_ENTRY, /* 403 Forbidden, no ACL entry */ 33 HTAA_SETUP_ERROR, /* 403 Forbidden, server setup error */ 34 HTAA_DOTDOT, /* 403 Forbidden, URL with /../ illegal */ 35 HTAA_HTBIN, /* 403 Forbidden, /htbin not enabled */ 36 HTAA_NOT_FOUND /* 404 Not found, or read protected */ 37 } HTAAFailReasonType; 38 39 /* 40 41 Group definition grammar 42 43 string 44 "sequence of alphanumeric characters" 45 46 user_name 47 string 48 49 group_name 50 string 51 52 group_ref 53 group_name 54 55 user_def 56 user_name | group_ref 57 58 user_def_list 59 user_def { ',' user_def } 60 61 user_part 62 user_def | '(' user_def_list ')' 63 64 templ 65 66 "sequence of alphanumeric characters and '*'s" 67 68 ip_number_mask 69 templ '.' templ '.' templ '.' templ 70 71 domain_name_mask 72 templ { '.' templ } 73 74 address 75 76 ip_number_mask | domain_name_mask 77 78 address_def 79 80 address 81 82 address_def_list 83 address_def { ',' address_def } 84 85 address_part 86 address_def | '(' address_def_list ')' 87 88 item 89 [user_part] ['@' address_part] 90 91 item_list 92 item { ',' item } 93 94 group_def 95 item_list 96 97 group_decl 98 group_name ':' group_def 99 100 PARSE GROUP DEFINITION 101 102 */ 103 104 extern GroupDef *HTAA_parseGroupDef(FILE *fp); 105 106 /* 107 108 Fill in Pointers to referenced Group Definitions in a Group Definition 109 110 References to groups (by their name) are resolved from group_def_list and pointers to 111 those structures are added to group_def. 112 113 */ 114 115 extern void HTAA_resolveGroupReferences(GroupDef *group_def, 116 GroupDefList *group_def_list); 117 118 /* 119 120 Read Group File (and do caching) 121 122 If group file is already in cache returns a pointer to previously read group definition 123 list. 124 125 */ 126 127 extern GroupDefList *HTAA_readGroupFile(const char *filename); 128 129 /* 130 131 Delete Group Definition 132 133 Groups in cache should never be freed by this function. This should only be used to 134 free group definitions read by HTAA_parseGroupDef. 135 136 */ 137 138 extern void GroupDef_delete(GroupDef *group_def); 139 140 /* 141 142 Print Out Group Definition (for trace purposes) 143 144 */ 145 146 extern void HTAA_printGroupDef(GroupDef *group_def); 147 148 /* 149 150 Does a User Belong to a Given Set of Groups 151 152 This function checks both the username and the internet address. 153 154 */ 155 156 /* PUBLIC HTAA_userAndInetInGroup() 157 * CHECK IF USER BELONGS TO TO A GIVEN GROUP 158 * AND THAT THE CONNECTION COMES FROM AN 159 * ADDRESS THAT IS ALLOWED BY THAT GROUP 160 * ON ENTRY: 161 * group the group definition structure. 162 * username connecting user. 163 * ip_number browser host IP number, optional. 164 * ip_name browser host IP name, optional. 165 * However, one of ip_number or ip_name 166 * must be given. 167 * ON EXIT: 168 * returns HTAA_IP_MASK, if IP address mask was 169 * reason for failing. 170 * HTAA_NOT_MEMBER, if user does not belong 171 * to the group. 172 * HTAA_OK if both IP address and user are ok. 173 */ 174 extern HTAAFailReasonType HTAA_userAndInetInGroup(GroupDef *group, 175 char *username, 176 char *ip_number, 177 char *ip_name); 178 179 #ifdef __cplusplus 180 } 181 #endif 182 #endif /* not HTGROUP_H */ 183