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