Group File Routines

#ifndef HTGROUP_H
#define HTGROUP_H

#include "HTUtils.h"
#include "HTAAUtil.h"	/* HTAAFailReason */
#include "HTList.h"
#include "HTWild.h"

#ifdef SHORT_NAMES
#define HTAApGrD	HTAA_parseGroupDef
#define HTAArGrR	HTAA_resolveGroupReferences
#define HTAApGrD	HTAA_printGroupDef
#define HTAAGD_d	GroupDef_delete
#define HTAAuIIG	HTAA_userAndInetInGroup
#endif /* SHORT_NAMES */

typedef HTList GroupDefList;
typedef HTList ItemList;

typedef struct {
    char *	group_name;
    ItemList *	item_list;
} GroupDef;


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 HTAAFailReason HTAA_userAndInetInGroup PARAMS((GroupDef * group,
						      char *     username,
						      char *     ip_number,
						      char *     ip_name));
PUBLIC BOOL HTIpMaskMatch PARAMS((HTPattern *	pat,
				  CONST char *	ip_number,
				  CONST char *	ip_name));
#endif /* not HTGROUP_H */
End of file HTGroup.h.