|
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 */
|