summaryrefslogtreecommitdiffstats
path: root/include/libaccess/aclstruct.h
diff options
context:
space:
mode:
Diffstat (limited to 'include/libaccess/aclstruct.h')
-rw-r--r--include/libaccess/aclstruct.h264
1 files changed, 264 insertions, 0 deletions
diff --git a/include/libaccess/aclstruct.h b/include/libaccess/aclstruct.h
new file mode 100644
index 00000000..71320b0f
--- /dev/null
+++ b/include/libaccess/aclstruct.h
@@ -0,0 +1,264 @@
+/** BEGIN COPYRIGHT BLOCK
+ * Copyright 2001 Sun Microsystems, Inc.
+ * Portions copyright 1999, 2001-2003 Netscape Communications Corporation.
+ * All rights reserved.
+ * END COPYRIGHT BLOCK **/
+#ifndef __aclstruct_h
+#define __aclstruct_h
+
+/*
+ * Description (aclstruct.h)
+ *
+ * This file defines types and data structures used to construct
+ * representations of Access Control Lists (ACLs) in memory.
+ */
+
+#include "base/systems.h"
+#include "base/file.h"
+#include "base/lexer.h"
+#include "nsauth.h" /* authentication types */
+#include "symbols.h" /* typed symbol support */
+#include "ipfstruct.h" /* IP address filter structures */
+#include "dnfstruct.h" /* DNS name filter structures */
+
+
+NSPR_BEGIN_EXTERN_C
+
+/* Forward type definitions */
+typedef struct ACL_s ACL_t;
+
+/*
+ * Description (InetHost_t)
+ *
+ * This type defines a structure which represents a list of Internet
+ * hosts by IP address and netmask, or by fully or partially
+ * qualified DNS name.
+ */
+
+typedef struct InetHost_s InetHost_t;
+struct InetHost_s {
+ IPFilter_t inh_ipf; /* reference to IP filter */
+ DNSFilter_t inh_dnf; /* reference to DNS filter */
+};
+
+/*
+ * Description (HostSpec_t)
+ *
+ * This type describes a named list of hosts.
+ */
+
+typedef struct HostSpec_s HostSpec_t;
+struct HostSpec_s {
+ Symbol_t hs_sym; /* symbol name, type ACLSYMHOST */
+ InetHost_t hs_host; /* host information */
+};
+
+/*
+ * Description (UidUser_t)
+ *
+ * This type represents a list of users and groups using unique
+ * integer identifiers.
+ */
+
+typedef struct UidUser_s UidUser_t;
+struct UidUser_s {
+ USIList_t uu_user; /* list of user ids */
+ USIList_t uu_group; /* list of group ids */
+};
+
+/*
+ * Description (UserSpec_t)
+ *
+ * This type describes a named list of users and groups.
+ */
+
+typedef struct UserSpec_s UserSpec_t;
+struct UserSpec_s {
+ Symbol_t us_sym; /* list name, type ACLSYMUSER */
+ int us_flags; /* bit flags */
+#define ACL_USALL 0x1 /* any authenticated user */
+
+ UidUser_t us_user; /* user list structure */
+};
+
+/*
+ * Description (ACClients_t)
+ *
+ * This type defines the structure of action-specific information
+ * for access control directives with action codes ACD_ALLOW and
+ * ACD_DENY. These directives specify access control constraints
+ * on users/groups and hosts.
+ */
+
+typedef struct ACClients_s ACClients_t;
+struct ACClients_s {
+ ACClients_t * cl_next; /* list link */
+ HostSpec_t * cl_host; /* host specification pointer */
+ UserSpec_t * cl_user; /* user list pointer */
+};
+
+/*
+ * Description (RealmSpec_t)
+ *
+ * This type describes a named realm.
+ */
+
+typedef struct RealmSpec_s RealmSpec_t;
+struct RealmSpec_s {
+ Symbol_t rs_sym; /* realm name, type ACLSYMREALM */
+ Realm_t rs_realm; /* realm information */
+};
+
+/*
+ * Description (ACAuth_t)
+ *
+ * This type defines the structure of action-specific information
+ * for an access control directive with action code ACD_AUTH,
+ * which specifies information about authentication requirements.
+ */
+
+typedef struct ACAuth_s ACAuth_t;
+struct ACAuth_s {
+ RealmSpec_t * au_realm; /* pointer to realm information */
+};
+
+/*
+ * Description (ACDirective_t)
+ *
+ * This type defines a structure which represents an access control
+ * directive. Each directive specifies an access control action
+ * to be taken during ACL evaluation. The ACDirective_t structure
+ * begins an action-specific structure which contains the
+ * parameters for an action.
+ */
+
+typedef struct ACDirective_s ACDirective_t;
+struct ACDirective_s {
+ ACDirective_t * acd_next; /* next directive in ACL */
+ short acd_action; /* directive action code */
+ short acd_flags; /* action modifier flags */
+
+ /* Begin action-specific information */
+ union {
+ ACClients_t * acu_cl; /* ACD_ALLOW, ACD_DENY */
+ ACAuth_t acu_auth; /* ACD_AUTH */
+ } acd_u;
+};
+
+#define acd_cl acd_u.acu_cl
+#define acd_auth acd_u.acu_auth
+
+/* Define acd_action codes */
+#define ACD_ALLOW 1 /* allow access */
+#define ACD_DENY 2 /* deny access */
+#define ACD_AUTH 3 /* specify authentication realm */
+#define ACD_EXEC 4 /* execute (conditionally) */
+
+/* Define acd_flags values */
+#define ACD_ACTION 0xf /* bits reserved for acd_action */
+#define ACD_FORCE 0x10 /* force of action */
+#define ACD_DEFAULT 0 /* default action */
+#define ACD_ALWAYS ACD_FORCE /* immediate action */
+#define ACD_EXALLOW 0x20 /* execute if allow */
+#define ACD_EXDENY 0x40 /* execute if deny */
+#define ACD_EXAUTH 0x80 /* execute if authenticate */
+
+/*
+ * Description (RightDef_t)
+ *
+ * This type describes a named access right. Each access right has
+ * an associated unique integer id. A list of all access rights
+ * known in an ACL context is maintained, with its head in the
+ * ACContext_t structure.
+ */
+
+typedef struct RightDef_s RightDef_t;
+struct RightDef_s {
+ Symbol_t rd_sym; /* right name, type ACLSYMRIGHT */
+ RightDef_t * rd_next; /* next on ACContext_t list */
+ USI_t rd_id; /* unique id */
+};
+
+/*
+ * Description (RightSpec_t)
+ *
+ * This type describes a named list of access rights.
+ */
+
+typedef struct RightSpec_s RightSpec_t;
+struct RightSpec_s {
+ Symbol_t rs_sym; /* list name, type ACLSYMRDEF */
+ USIList_t rs_list; /* list of right ids */
+};
+
+/*
+ * Description (ACContext_t)
+ *
+ * This type defines a structure that defines a context for a set
+ * of Access Control Lists. This includes references to an
+ * authentication database, if any, and a symbol table containing
+ * access right definitions. It also serves as a list head for the
+ * ACLs which are defined in the specified context.
+ */
+
+typedef struct ACContext_s ACContext_t;
+struct ACContext_s {
+ void * acc_stp; /* symbol table handle */
+ ACL_t * acc_acls; /* list of ACLs */
+ RightDef_t * acc_rights; /* list of access right definitions */
+ int acc_refcnt; /* reference count */
+};
+
+/*
+ * Description (ACL_t)
+ *
+ * This type defines the structure that represents an Access Control
+ * List (ACL). An ACL has a user-assigned name and an internally
+ * assigned identifier (which is an index in an object directory).
+ * It references a list of access rights which are to be allowed or
+ * denied, according to the ACL specifications. It references an
+ * ordered list of ACL directives, which specify who has and who does
+ * not have the associated access rights.
+ */
+
+struct ACL_s {
+ Symbol_t acl_sym; /* ACL name, type ACLSYMACL */
+ ACL_t * acl_next; /* next ACL on a list */
+ ACContext_t * acl_acc; /* context for this ACL */
+ USI_t acl_id; /* id of this ACL */
+ int acl_refcnt; /* reference count */
+ RightSpec_t * acl_rights; /* access rights list */
+ ACDirective_t * acl_dirf; /* first directive pointer */
+ ACDirective_t * acl_dirl; /* last directive pointer */
+};
+
+/* Define symbol type codes */
+#define ACLSYMACL 0 /* ACL */
+#define ACLSYMRIGHT 1 /* access right */
+#define ACLSYMRDEF 2 /* access rights list */
+#define ACLSYMREALM 3 /* realm name */
+#define ACLSYMHOST 4 /* host specifications */
+#define ACLSYMUSER 5 /* user/group list */
+
+/*
+ * Description (ACLFile_t)
+ *
+ * This type describes a structure containing information about
+ * an open ACL description file.
+ */
+
+typedef struct ACLFile_s ACLFile_t;
+struct ACLFile_s {
+ ACLFile_t * acf_next; /* list link */
+ char * acf_filename; /* pointer to filename string */
+ LEXStream_t * acf_lst; /* LEX stream handle */
+ SYS_FILE acf_fd; /* file descriptor */
+ int acf_flags; /* bit flags (unused) */
+ int acf_lineno; /* current line number */
+ void * acf_token; /* LEX token handle */
+ int acf_ttype; /* current token type */
+};
+
+NSPR_END_EXTERN_C
+
+#endif /* __aclstruct_h */