/* GROUP FILE ROUTINES
*/
#ifndef HTGROUP_H
#define HTGROUP_H
#include <HTList.h>
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
*/
PUBLIC GroupDef *HTAA_parseGroupDef PARAMS((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.
*/
PUBLIC void HTAA_resolveGroupReferences PARAMS((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.
*/
PUBLIC GroupDefList *HTAA_readGroupFile PARAMS((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.
*/
PUBLIC void GroupDef_delete PARAMS((GroupDef * group_def));
/*
Print Out Group Definition (for trace purposes)
*/
PUBLIC void HTAA_printGroupDef PARAMS((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.
*/
PUBLIC HTAAFailReasonType HTAA_userAndInetInGroup PARAMS((GroupDef * group,
char * username,
char * ip_number,
char * ip_name));
/*
*/
#endif /* not HTGROUP_H */
/*
End of file HTGroup.h. */