Blame WWW/Library/Implementation/HTGroup.h

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