summaryrefslogtreecommitdiffstats
path: root/WWW/Library/Implementation/HTGroup.h
blob: 78745656494b09eeeb09764eeb847d6fb5f0d879 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
/*                                    GROUP FILE ROUTINES

 */

#ifndef HTGROUP_H
#define HTGROUP_H

#include <HTList.h>

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