Home | History | Annotate | Line # | Download | only in slapd
      1  1.3  christos /*	$NetBSD: sets.h,v 1.4 2025/09/05 21:16:25 christos Exp $	*/
      2  1.2  christos 
      3  1.2  christos /* $OpenLDAP$ */
      4  1.1     lukem /* This work is part of OpenLDAP Software <http://www.openldap.org/>.
      5  1.1     lukem  *
      6  1.4  christos  * Copyright 1998-2024 The OpenLDAP Foundation.
      7  1.1     lukem  * All rights reserved.
      8  1.1     lukem  *
      9  1.1     lukem  * Redistribution and use in source and binary forms, with or without
     10  1.1     lukem  * modification, are permitted only as authorized by the OpenLDAP
     11  1.1     lukem  * Public License.
     12  1.1     lukem  *
     13  1.1     lukem  * A copy of this license is available in the file LICENSE in the
     14  1.1     lukem  * top-level directory of the distribution or, alternatively, at
     15  1.1     lukem  * <http://www.OpenLDAP.org/license.html>.
     16  1.1     lukem  */
     17  1.1     lukem 
     18  1.1     lukem #ifndef SLAP_SETS_H_
     19  1.1     lukem #define SLAP_SETS_H_
     20  1.1     lukem 
     21  1.1     lukem #include <ldap_cdefs.h>
     22  1.1     lukem 
     23  1.1     lukem LDAP_BEGIN_DECL
     24  1.1     lukem 
     25  1.1     lukem typedef struct slap_set_cookie {
     26  1.1     lukem 	Operation *set_op;
     27  1.1     lukem } SetCookie;
     28  1.1     lukem 
     29  1.1     lukem /* this routine needs to return the bervals instead of
     30  1.1     lukem  * plain strings, since syntax is not known.  It should
     31  1.1     lukem  * also return the syntax or some "comparison cookie"
     32  1.1     lukem  * that is used by set_filter.
     33  1.1     lukem  */
     34  1.1     lukem typedef BerVarray (SLAP_SET_GATHER)( SetCookie *cookie,
     35  1.1     lukem 		struct berval *name, AttributeDescription *ad);
     36  1.1     lukem 
     37  1.1     lukem LDAP_SLAPD_F (int) slap_set_filter(
     38  1.1     lukem 	SLAP_SET_GATHER gatherer,
     39  1.1     lukem 	SetCookie *cookie, struct berval *filter,
     40  1.1     lukem 	struct berval *user, struct berval *target, BerVarray *results);
     41  1.1     lukem 
     42  1.1     lukem LDAP_SLAPD_F (BerVarray) slap_set_join(SetCookie *cp,
     43  1.1     lukem 	BerVarray lset, unsigned op, BerVarray rset);
     44  1.1     lukem 
     45  1.1     lukem #define SLAP_SET_OPMASK		0x00FF
     46  1.1     lukem 
     47  1.1     lukem #define SLAP_SET_REFARR		0x0100
     48  1.1     lukem #define SLAP_SET_REFVAL		0x0200
     49  1.1     lukem #define SLAP_SET_REF		(SLAP_SET_REFARR|SLAP_SET_REFVAL)
     50  1.1     lukem 
     51  1.1     lukem /* The unsigned "op" can be ORed with the flags below;
     52  1.1     lukem  * - if the rset's values must not be freed, or must be copied if kept,
     53  1.1     lukem  *   it is ORed with SLAP_SET_RREFVAL
     54  1.1     lukem  * - if the rset array must not be freed, or must be copied if kept,
     55  1.1     lukem  *   it is ORed with SLAP_SET_RREFARR
     56  1.1     lukem  * - the same applies to the lset with SLAP_SET_LREFVAL and SLAP_SET_LREFARR
     57  1.1     lukem  * - it is assumed that SLAP_SET_REFVAL implies SLAP_SET_REFARR,
     58  1.2  christos  *   i.e. the former is checked only if the latter is set.
     59  1.1     lukem  */
     60  1.1     lukem 
     61  1.1     lukem #define SLAP_SET_RREFARR	SLAP_SET_REFARR
     62  1.1     lukem #define SLAP_SET_RREFVAL	SLAP_SET_REFVAL
     63  1.1     lukem #define SLAP_SET_RREF		SLAP_SET_REF
     64  1.1     lukem #define SLAP_SET_RREFMASK	0x0F00
     65  1.1     lukem 
     66  1.1     lukem #define SLAP_SET_RREF2REF(r)	((r) & SLAP_SET_RREFMASK)
     67  1.1     lukem 
     68  1.1     lukem #define SLAP_SET_LREFARR	0x1000
     69  1.1     lukem #define SLAP_SET_LREFVAL	0x2000
     70  1.1     lukem #define SLAP_SET_LREF		(SLAP_SET_LREFARR|SLAP_SET_LREFVAL)
     71  1.1     lukem #define SLAP_SET_LREFMASK	0xF000
     72  1.1     lukem 
     73  1.1     lukem #define SLAP_SET_LREF2REF(r)	(((r) & SLAP_SET_LREFMASK) >> 4)
     74  1.1     lukem 
     75  1.1     lukem LDAP_END_DECL
     76  1.1     lukem 
     77  1.1     lukem #endif
     78