#include <ac/syslog.h>
#include <ac/regex.h>
#include <ac/socket.h>
+#include <ac/time.h>
#include "avl.h"
/*
* represents an attribute value assertion (i.e., attr=value)
*/
-typedef struct ava {
+typedef struct slap_ava {
char *ava_type;
struct berval ava_value;
} Ava;
+typedef struct slap_mra {
+ char *mra_rule;
+ char *mra_type;
+ char *mra_value;
+ int mra_dnattrs;
+} Mra;
+
/*
* represents a search filter
*/
-typedef struct filter {
+typedef struct slap_filter {
ber_tag_t f_choice; /* values taken from ldap.h */
union f_un_u {
/* equality, lessorequal, greaterorequal, approx */
Ava f_un_ava;
+ /* extensible */
+ Mra f_un_fra;
+
/* and, or, not */
- struct filter *f_un_complex;
+ struct slap_filter *f_un_complex;
/* substrings */
struct sub {
#define f_ava f_un.f_un_ava
#define f_avtype f_un.f_un_ava.ava_type
#define f_avvalue f_un.f_un_ava.ava_value
+#define f_mra f_un.f_un_mra
+#define f_mrtype f_un.f_un_mra.mra_type
+#define f_mrvalue f_un.f_un_mra.mra_value
+#define f_mrdnaddrs f_un.f_un_mra.mra_dnattrs
#define f_and f_un.f_un_complex
#define f_or f_un.f_un_complex
#define f_not f_un.f_un_complex
#define f_sub_any f_un.f_un_sub.f_un_sub_any
#define f_sub_final f_un.f_un_sub.f_un_sub_final
- struct filter *f_next;
+ struct slap_filter *f_next;
} Filter;
/*
* represents an attribute (type + values + syntax)
*/
-typedef struct attr {
+typedef struct slap_attr {
char *a_type;
struct berval **a_vals;
int a_syntax;
- struct attr *a_next;
+ struct slap_attr *a_next;
} Attribute;
/*
* the id used in the indexes to refer to an entry
*/
typedef unsigned long ID;
-#define NOID ((unsigned long)~0)
+#define NOID ((ID)~0)
/*
* represents an entry in core
*/
-typedef struct entry {
+typedef struct slap_entry {
/*
* The ID field should only be changed before entry is
* inserted into a cache. The ID value is backend
*/
/* the "by" part */
-struct access {
+typedef struct slap_access {
#define ACL_NONE 0x0001
-#define ACL_AUTH 0x0002
-#define ACL_COMPARE 0x0004
-#define ACL_SEARCH 0x0008
-#define ACL_READ 0x0010
-#define ACL_WRITE 0x0020
+#define ACL_AUTH 0x0004
+#define ACL_COMPARE 0x0008
+#define ACL_SEARCH 0x0010
+#define ACL_READ 0x0020
+#define ACL_WRITE 0x0040
#define ACL_PRIV_MASK 0x00ff
#define ACL_SELF 0x4000
int a_access;
- char *a_dnpat;
- char *a_addrpat;
- char *a_domainpat;
- char *a_dnattr;
+ char *a_dn_pat;
+ char *a_dn_at;
+
+ char *a_peername_pat;
+ char *a_sockname_pat;
+
+ char *a_domain_pat;
+ char *a_url_pat;
/* ACL Groups */
- char *a_group;
+ char *a_group_pat;
char *a_group_oc;
char *a_group_at;
- struct access *a_next;
-};
+ struct slap_access *a_next;
+} Access;
/* the "to" part */
-struct acl {
+typedef struct slap_acl {
/* "to" part: the entries this acl applies to */
Filter *acl_filter;
- regex_t acl_dnre;
- char *acl_dnpat;
+ regex_t acl_dn_re;
+ char *acl_dn_pat;
char **acl_attrs;
/* "by" part: list of who has what access to the entries */
- struct access *acl_access;
+ Access *acl_access;
- struct acl *acl_next;
-};
+ struct slap_acl *acl_next;
+} AccessControl;
/*
* A list of LDAPMods
* represents a backend
*/
-typedef struct backend_info BackendInfo; /* per backend type */
-typedef struct backend_db BackendDB; /* per backend database */
+typedef struct slap_backend_info BackendInfo; /* per backend type */
+typedef struct slap_backend_db BackendDB; /* per backend database */
extern int nBackendInfo;
extern int nBackendDB;
#define nbackends nBackendDB
#define backends backendDB
-struct backend_db {
+struct slap_backend_db {
BackendInfo *bd_info; /* pointer to shared backend info */
/* BackendInfo accessors */
/* these should be renamed from be_ to bd_ */
char **be_suffix; /* the DN suffixes of data in this backend */
char **be_nsuffix; /* the normalized DN suffixes in this backend */
- char **be_suffixAlias; /* the DN suffix aliases of data in this backend */
char *be_root_dn; /* the magic "root" dn for this db */
char *be_root_ndn; /* the magic "root" normalized dn for this db */
char *be_root_pw; /* the magic "root" password for this db */
int be_readonly; /* 1 => db is in "read only" mode */
- int be_maxDerefDepth; /* limit for depth of an alias deref */
+ unsigned int be_max_deref_depth; /* limit for depth of an alias deref */
int be_sizelimit; /* size limit for this backend */
int be_timelimit; /* time limit for this backend */
- struct acl *be_acl; /* access control list for this backend */
+ AccessControl *be_acl; /* access control list for this backend */
int be_dfltaccess; /* access given if no acl matches */
char **be_replica; /* replicas of this backend (in master) */
char *be_replogfile; /* replication log file (in master) */
char *be_update_ndn; /* allowed to make changes (in replicas) */
+ struct berval **be_update_refs; /* where to refer modifying clients to */
int be_lastmod; /* keep track of lastmodified{by,time} */
char *be_realm;
void *be_private; /* anything the backend database needs */
};
-struct backend_info {
+struct slap_backend_info {
char *bi_type; /* type of backend */
/*
int (*bi_op_delete) LDAP_P((BackendDB *bd,
struct slap_conn *c, struct slap_op *o,
char *dn));
- /* Bug: be_op_abandon in unused! */
int (*bi_op_abandon) LDAP_P((BackendDB *bd,
struct slap_conn *c, struct slap_op *o,
ber_int_t msgid));
ber_tag_t o_tag; /* tag of the request */
time_t o_time; /* time op was initiated */
- int o_bind_in_progress; /* multi-op bind in progress */
+ int o_bind_in_progress; /* multi-step bind in progress */
char *o_dn; /* dn bound when op was initiated */
char *o_ndn; /* normalized dn bound when op was initiated */
LDAPControl **o_ctrls; /* controls */
-/* long o_connid; *//* id of conn initiating this op */
+ unsigned long o_connid; /* id of conn initiating this op */
#ifdef LDAP_CONNECTIONLESS
int o_cldap; /* != 0 if this came in via CLDAP */
time_t c_starttime; /* when the connection was opened */
time_t c_activitytime; /* when the connection was last used */
unsigned long c_connid; /* id of this connection for stats*/
- char *c_client_addr; /* address of client */
- char *c_client_name; /* name of client */
+
+ char *c_listener_url; /* listener URL */
+ char *c_peer_domain; /* DNS name of client */
+ char *c_peer_name; /* peer name (trans=addr:port) */
+ char *c_sock_name; /* sock name (trans=addr:port) */
/* only can be changed by binding thread */
int c_bind_in_progress; /* multi-op bind in progress */
BerElement *c_currentber; /* ber we're attempting to read */
int c_writewaiter; /* true if writer is waiting */
+#ifdef HAVE_TLS
+ int c_is_tls; /* true if this LDAP over raw TLS */
+ int c_needs_tls_accept; /* true if SSL_accept should be called */
+#endif
+
long c_n_ops_received; /* num of ops received (next op_id) */
long c_n_ops_executing; /* num of ops currently executing */
long c_n_ops_pending; /* num of ops pending execution */