/* GROUP FILE ROUTINES */ #ifndef HTGROUP_H #define HTGROUP_H #include #ifdef __cplusplus extern "C" { #endif typedef HTList GroupDefList; typedef HTList ItemList; typedef struct { char *group_name; ItemList *item_list; } GroupDef; /* * Access Authorization failure reasons */ typedef enum { HTAA_OK, /* 200 OK */ HTAA_OK_GATEWAY, /* 200 OK, acting as a gateway */ HTAA_NO_AUTH, /* 401 Unauthorized, not authenticated */ HTAA_NOT_MEMBER, /* 401 Unauthorized, not authorized */ HTAA_IP_MASK, /* 403 Forbidden by IP mask */ HTAA_BY_RULE, /* 403 Forbidden by rule */ HTAA_NO_ACL, /* 403 Forbidden, ACL non-existent */ HTAA_NO_ENTRY, /* 403 Forbidden, no ACL entry */ HTAA_SETUP_ERROR, /* 403 Forbidden, server setup error */ HTAA_DOTDOT, /* 403 Forbidden, URL with /../ illegal */ HTAA_HTBIN, /* 403 Forbidden, /htbin not enabled */ HTAA_NOT_FOUND /* 404 Not found, or read protected */ } HTAAFailReasonType; /* Group definition grammar string "sequence of alphanumeric characters" user_name string group_name string group_ref group_name user_def user_name | group_ref user_def_list user_def { ',' user_def } user_part user_def | '(' user_def_list ')' templ "sequence of alphanumeric characters and '*'s" ip_number_mask templ '.' templ '.' templ '.' templ domain_name_mask templ { '.' templ } address ip_number_mask | domain_name_mask address_def address address_def_list address_def { ',' address_def } address_part address_def | '(' address_def_list ')' item [user_part] ['@' address_part] item_list item { ',' item } group_def item_list group_decl group_name ':' group_def PARSE GROUP DEFINITION */ extern GroupDef *HTAA_parseGroupDef(FILE *fp); /* Fill in Pointers to referenced Group Definitions in a Group Definition References to groups (by their name) are resolved from group_def_list and pointers to those structures are added to group_def. */ extern void HTAA_resolveGroupReferences(GroupDef *group_def, GroupDefList *group_def_list); /* Read Group File (and do caching) If group file is already in cache returns a pointer to previously read group definition list. */ extern GroupDefList *HTAA_readGroupFile(const char *filename); /* Delete Group Definition Groups in cache should never be freed by this function. This should only be used to free group definitions read by HTAA_parseGroupDef. */ extern void GroupDef_delete(GroupDef *group_def); /* Print Out Group Definition (for trace purposes) */ extern void HTAA_printGroupDef(GroupDef *group_def); /* Does a User Belong to a Given Set of Groups This function checks both the username and the internet address. */ /* PUBLIC HTAA_userAndInetInGroup() * CHECK IF USER BELONGS TO TO A GIVEN GROUP * AND THAT THE CONNECTION COMES FROM AN * ADDRESS THAT IS ALLOWED BY THAT GROUP * ON ENTRY: * group the group definition structure. * username connecting user. * ip_number browser host IP number, optional. * ip_name browser host IP name, optional. * However, one of ip_number or ip_name * must be given. * ON EXIT: * returns HTAA_IP_MASK, if IP address mask was * reason for failing. * HTAA_NOT_MEMBER, if user does not belong * to the group. * HTAA_OK if both IP address and user are ok. */ extern HTAAFailReasonType HTAA_userAndInetInGroup(GroupDef *group, char *username, char *ip_number, char *ip_name); #ifdef __cplusplus } #endif #endif /* not HTGROUP_H */