xref: /netbsd-src/external/bsd/openldap/dist/servers/slapd/overlays/rwm.h (revision 549b59ed3ccf0d36d3097190a0db27b770f3a839)
1 /*	$NetBSD: rwm.h,v 1.3 2021/08/14 16:15:02 christos Exp $	*/
2 
3 /* rwm.h - dn rewrite/attribute mapping header file */
4 /* $OpenLDAP$ */
5 /* This work is part of OpenLDAP Software <http://www.openldap.org/>.
6  *
7  * Copyright 1999-2021 The OpenLDAP Foundation.
8  * Portions Copyright 1999-2003 Howard Chu.
9  * Portions Copyright 2000-2003 Pierangelo Masarati.
10  * All rights reserved.
11  *
12  * Redistribution and use in source and binary forms, with or without
13  * modification, are permitted only as authorized by the OpenLDAP
14  * Public License.
15  *
16  * A copy of this license is available in the file LICENSE in the
17  * top-level directory of the distribution or, alternatively, at
18  * <http://www.OpenLDAP.org/license.html>.
19  */
20 /* ACKNOWLEDGEMENTS:
21  * This work was initially developed by the Howard Chu for inclusion
22  * in OpenLDAP Software and subsequently enhanced by Pierangelo
23  * Masarati.
24  */
25 
26 #ifndef RWM_H
27 #define RWM_H
28 
29 /* String rewrite library */
30 #include "rewrite.h"
31 
32 LDAP_BEGIN_DECL
33 
34 /* define to enable referral DN massage by default */
35 #undef RWM_REFERRAL_REWRITE
36 
37 struct ldapmap {
38 	int drop_missing;
39 
40 	Avlnode *map;
41 	Avlnode *remap;
42 };
43 
44 struct ldapmapping {
45 	int			m_flags;
46 #define	RWMMAP_F_NONE		0x00
47 #define	RWMMAP_F_IS_OC		0x01
48 #define RWMMAP_F_FREE_SRC	0x10
49 #define RWMMAP_F_FREE_DST	0x20
50 	struct berval		m_src;
51 	union {
52 		AttributeDescription	*m_s_ad;
53 		ObjectClass		*m_s_oc;
54 	} m_src_ref;
55 #define m_src_ad	m_src_ref.m_s_ad
56 #define m_src_oc	m_src_ref.m_s_oc
57 	struct berval		m_dst;
58 	union {
59 		AttributeDescription	*m_d_ad;
60 		ObjectClass		*m_d_oc;
61 	} m_dst_ref;
62 #define m_dst_ad	m_dst_ref.m_d_ad
63 #define m_dst_oc	m_dst_ref.m_d_oc
64 };
65 
66 struct ldaprwmap {
67 	/*
68 	 * DN rewriting
69 	 */
70 	struct rewrite_info *rwm_rw;
71 	BerVarray rwm_bva_rewrite;
72 
73 	/*
74 	 * Attribute/objectClass mapping
75 	 */
76 	struct ldapmap rwm_oc;
77 	struct ldapmap rwm_at;
78 	BerVarray rwm_bva_map;
79 
80 #define	RWM_F_NONE			(0x0000U)
81 #define	RWM_F_NORMALIZE_MAPPED_ATTRS    (0x0001U)
82 #define	RWM_F_DROP_UNREQUESTED_ATTRS	(0x0002U)
83 #define	RWM_F_SUPPORT_T_F		(0x4000U)
84 #define	RWM_F_SUPPORT_T_F_DISCOVER	(0x8000U)
85 #define	RWM_F_SUPPORT_T_F_MASK		(RWM_F_SUPPORT_T_F)
86 #define	RWM_F_SUPPORT_T_F_MASK2		(RWM_F_SUPPORT_T_F|RWM_F_SUPPORT_T_F_DISCOVER)
87 	unsigned	rwm_flags;
88 };
89 
90 /* Whatever context ldap_back_dn_massage needs... */
91 typedef struct dncookie {
92 	struct ldaprwmap *rwmap;
93 
94 	Connection *conn;
95 	char *ctx;
96 	SlapReply *rs;
97 } dncookie;
98 
99 int rwm_dn_massage( dncookie *dc, struct berval *in, struct berval *dn );
100 int rwm_dn_massage_pretty( dncookie *dc, struct berval *in, struct berval *pdn );
101 int rwm_dn_massage_normalize( dncookie *dc, struct berval *in, struct berval *ndn );
102 int rwm_dn_massage_pretty_normalize( dncookie *dc, struct berval *in, struct berval *pdn, struct berval *ndn );
103 
104 /* attributeType/objectClass mapping */
105 int rwm_mapping_cmp (const void *, const void *);
106 int rwm_mapping_dup (void *, void *);
107 
108 int rwm_map_init ( struct ldapmap *lm, struct ldapmapping ** );
109 void rwm_map ( struct ldapmap *map, struct berval *s, struct berval *m,
110 	int remap );
111 int rwm_mapping ( struct ldapmap *map, struct berval *s,
112 		struct ldapmapping **m, int remap );
113 #define RWM_MAP		0
114 #define RWM_REMAP	1
115 char *
116 rwm_map_filter(
117 		struct ldapmap *at_map,
118 		struct ldapmap *oc_map,
119 		struct berval *f );
120 
121 #if 0 /* unused! */
122 int
123 rwm_map_attrs(
124 		struct ldapmap *at_map,
125 		AttributeName *a,
126 		int remap,
127 		char ***mapped_attrs );
128 #endif
129 
130 int
131 rwm_map_attrnames(
132 		Operation *op,
133 		struct ldapmap *at_map,
134 		struct ldapmap *oc_map,
135 		AttributeName *an,
136 		AttributeName **anp,
137 		int remap );
138 
139 extern void rwm_mapping_dst_free ( void *mapping );
140 
141 extern void rwm_mapping_free ( void *mapping );
142 
143 extern int rwm_map_config(
144 		struct ldapmap	*oc_map,
145 		struct ldapmap	*at_map,
146 		const char	*fname,
147 		int		lineno,
148 		int		argc,
149 		char		**argv );
150 
151 extern int
152 rwm_filter_map_rewrite(
153 		Operation		*op,
154 		dncookie		*dc,
155 		Filter			*f,
156 		struct berval		*fstr );
157 
158 /* suffix massaging by means of librewrite */
159 extern int
160 rwm_suffix_massage_config(
161 	struct rewrite_info	*info,
162 	struct berval		*pvnc,
163 	struct berval		*nvnc,
164 	struct berval		*prnc,
165 	struct berval		*nrnc);
166 extern int
167 rwm_dnattr_rewrite(
168 	Operation		*op,
169 	SlapReply		*rs,
170 	void			*cookie,
171 	BerVarray		a_vals,
172 	BerVarray		*pa_nvals );
173 extern int
174 rwm_referral_rewrite(
175 	Operation		*op,
176 	SlapReply		*rs,
177 	void			*cookie,
178 	BerVarray		a_vals,
179 	BerVarray		*pa_nvals );
180 extern int rwm_dnattr_result_rewrite( dncookie *dc, BerVarray a_vals, BerVarray a_nvals );
181 extern int rwm_referral_result_rewrite( dncookie *dc, BerVarray a_vals );
182 
183 LDAP_END_DECL
184 
185 #endif /* RWM_H */
186