about summary refs log blame commit diff stats
path: root/WWW/Library/Implementation/HTGroup.h
blob: 78745656494b09eeeb09764eeb847d6fb5f0d879 (plain) (tree)
1
2
3
4
5
6
7
8
9
                                                         
 




                 
                   
 




                                
 



                            
 
  

                                       













                                                                          






                                                              
 

                               
 

                               
 

                                   
 

                                              
 

                                                    
 

                                                         
 
       
 
                                                                       
 

                                                            
 

                                            
 
         
 
                                                          
 
             
 
                                
 

                                                        
 

                                                               
 

                                                       
 

                                          
 

                                  
 

                                                 
 
                        
 

   
                                                  
 





                                                                                        
 

   

                                                                          
 





                                                                                          
 

   
                                                                  
 



                       
                                                                                       
                                                     
 

   
                                                     
 





                                               
                                                        
 




                                                                   
 


                                                                         
















                                                                   








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