rwm.h 4.4 KB
Newer Older
1
2
3
4
/* rwm.h - dn rewrite/attribute mapping header file */
/* $OpenLDAP$ */
/* This work is part of OpenLDAP Software <http://www.openldap.org/>.
 *
Quanah Gibson-Mount's avatar
Quanah Gibson-Mount committed
5
 * Copyright 1999-2021 The OpenLDAP Foundation.
Kurt Zeilenga's avatar
Kurt Zeilenga committed
6
7
 * Portions Copyright 1999-2003 Howard Chu.
 * Portions Copyright 2000-2003 Pierangelo Masarati.
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted only as authorized by the OpenLDAP
 * Public License.
 *
 * A copy of this license is available in the file LICENSE in the
 * top-level directory of the distribution or, alternatively, at
 * <http://www.OpenLDAP.org/license.html>.
 */
/* ACKNOWLEDGEMENTS:
 * This work was initially developed by the Howard Chu for inclusion
 * in OpenLDAP Software and subsequently enhanced by Pierangelo
 * Masarati.
 */

#ifndef RWM_H
#define RWM_H

/* String rewrite library */
#include "rewrite.h"

LDAP_BEGIN_DECL

32
33
34
/* define to enable referral DN massage by default */
#undef RWM_REFERRAL_REWRITE

35
36
37
38
39
40
41
42
struct ldapmap {
	int drop_missing;

	Avlnode *map;
	Avlnode *remap;
};

struct ldapmapping {
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
	int			m_flags;
#define	RWMMAP_F_NONE		0x00
#define	RWMMAP_F_IS_OC		0x01
#define RWMMAP_F_FREE_SRC	0x10
#define RWMMAP_F_FREE_DST	0x20
	struct berval		m_src;
	union {
		AttributeDescription	*m_s_ad;
		ObjectClass		*m_s_oc;
	} m_src_ref;
#define m_src_ad	m_src_ref.m_s_ad
#define m_src_oc	m_src_ref.m_s_oc
	struct berval		m_dst;
	union {
		AttributeDescription	*m_d_ad;
		ObjectClass		*m_d_oc;
	} m_dst_ref;
#define m_dst_ad	m_dst_ref.m_d_ad
#define m_dst_oc	m_dst_ref.m_d_oc
62
63
64
65
66
67
68
};

struct ldaprwmap {
	/*
	 * DN rewriting
	 */
	struct rewrite_info *rwm_rw;
69
	BerVarray rwm_bva_rewrite;
70
71
72
73
74
75

	/*
	 * Attribute/objectClass mapping
	 */
	struct ldapmap rwm_oc;
	struct ldapmap rwm_at;
76
77
78
79
	BerVarray rwm_bva_map;

#define	RWM_F_NONE			(0x0000U)
#define	RWM_F_NORMALIZE_MAPPED_ATTRS    (0x0001U)
Pierangelo Masarati's avatar
Pierangelo Masarati committed
80
#define	RWM_F_DROP_UNREQUESTED_ATTRS	(0x0002U)
81
82
83
84
#define	RWM_F_SUPPORT_T_F		(0x4000U)
#define	RWM_F_SUPPORT_T_F_DISCOVER	(0x8000U)
#define	RWM_F_SUPPORT_T_F_MASK		(RWM_F_SUPPORT_T_F)
#define	RWM_F_SUPPORT_T_F_MASK2		(RWM_F_SUPPORT_T_F|RWM_F_SUPPORT_T_F_DISCOVER)
85
	unsigned	rwm_flags;
86
87
88
89
90
91
92
93
94
95
96
};

/* Whatever context ldap_back_dn_massage needs... */
typedef struct dncookie {
	struct ldaprwmap *rwmap;

	Connection *conn;
	char *ctx;
	SlapReply *rs;
} dncookie;

97
98
99
100
int rwm_dn_massage( dncookie *dc, struct berval *in, struct berval *dn );
int rwm_dn_massage_pretty( dncookie *dc, struct berval *in, struct berval *pdn );
int rwm_dn_massage_normalize( dncookie *dc, struct berval *in, struct berval *ndn );
int rwm_dn_massage_pretty_normalize( dncookie *dc, struct berval *in, struct berval *pdn, struct berval *ndn );
101
102

/* attributeType/objectClass mapping */
103
104
int rwm_mapping_cmp (const void *, const void *);
int rwm_mapping_dup (void *, void *);
105

Pierangelo Masarati's avatar
Pierangelo Masarati committed
106
int rwm_map_init ( struct ldapmap *lm, struct ldapmapping ** );
107
108
void rwm_map ( struct ldapmap *map, struct berval *s, struct berval *m,
	int remap );
Pierangelo Masarati's avatar
Pierangelo Masarati committed
109
110
int rwm_mapping ( struct ldapmap *map, struct berval *s,
		struct ldapmapping **m, int remap );
111
#define RWM_MAP		0
112
#define RWM_REMAP	1
113
114
115
116
char *
rwm_map_filter(
		struct ldapmap *at_map,
		struct ldapmap *oc_map,
Pierangelo Masarati's avatar
Pierangelo Masarati committed
117
		struct berval *f );
118

119
#if 0 /* unused! */
120
121
122
123
124
int
rwm_map_attrs(
		struct ldapmap *at_map,
		AttributeName *a,
		int remap,
Pierangelo Masarati's avatar
Pierangelo Masarati committed
125
		char ***mapped_attrs );
126
#endif
Pierangelo Masarati's avatar
Pierangelo Masarati committed
127
128
129

int
rwm_map_attrnames(
130
		Operation *op,
Pierangelo Masarati's avatar
Pierangelo Masarati committed
131
132
133
134
135
		struct ldapmap *at_map,
		struct ldapmap *oc_map,
		AttributeName *an,
		AttributeName **anp,
		int remap );
136

137
138
extern void rwm_mapping_dst_free ( void *mapping );

139
extern void rwm_mapping_free ( void *mapping );
140
141
142
143
144
145
146
147
148
149
150

extern int rwm_map_config(
		struct ldapmap	*oc_map,
		struct ldapmap	*at_map,
		const char	*fname,
		int		lineno,
		int		argc,
		char		**argv );

extern int
rwm_filter_map_rewrite(
Kurt Zeilenga's avatar
Kurt Zeilenga committed
151
		Operation		*op,
152
153
		dncookie		*dc,
		Filter			*f,
Pierangelo Masarati's avatar
Pierangelo Masarati committed
154
		struct berval		*fstr );
155
156

/* suffix massaging by means of librewrite */
157
158
159
160
161
162
163
164
165
extern int
rwm_suffix_massage_config(
	struct rewrite_info	*info,
	struct berval		*pvnc,
	struct berval		*nvnc,
	struct berval		*prnc,
	struct berval		*nrnc);
extern int
rwm_dnattr_rewrite(
166
167
168
	Operation		*op,
	SlapReply		*rs,
	void			*cookie,
Pierangelo Masarati's avatar
Pierangelo Masarati committed
169
170
	BerVarray		a_vals,
	BerVarray		*pa_nvals );
171
172
extern int
rwm_referral_rewrite(
173
174
175
176
177
	Operation		*op,
	SlapReply		*rs,
	void			*cookie,
	BerVarray		a_vals,
	BerVarray		*pa_nvals );
178
extern int rwm_dnattr_result_rewrite( dncookie *dc, BerVarray a_vals, BerVarray a_nvals );
179
extern int rwm_referral_result_rewrite( dncookie *dc, BerVarray a_vals );
180
181
182
183

LDAP_END_DECL

#endif /* RWM_H */