xref: /netbsd-src/external/bsd/openldap/dist/include/ldap_pvt.h (revision 549b59ed3ccf0d36d3097190a0db27b770f3a839)
1*549b59edSchristos /*	$NetBSD: ldap_pvt.h,v 1.4 2021/08/14 16:14:55 christos Exp $	*/
24e6df137Slukem 
3d11b170bStron /* $OpenLDAP$ */
42de962bdSlukem /* This work is part of OpenLDAP Software <http://www.openldap.org/>.
52de962bdSlukem  *
6*549b59edSchristos  * Copyright 1998-2021 The OpenLDAP Foundation.
72de962bdSlukem  * All rights reserved.
82de962bdSlukem  *
92de962bdSlukem  * Redistribution and use in source and binary forms, with or without
102de962bdSlukem  * modification, are permitted only as authorized by the OpenLDAP
112de962bdSlukem  * Public License.
122de962bdSlukem  *
132de962bdSlukem  * A copy of this license is available in file LICENSE in the
142de962bdSlukem  * top-level directory of the distribution or, alternatively, at
152de962bdSlukem  * <http://www.OpenLDAP.org/license.html>.
162de962bdSlukem  */
172de962bdSlukem 
182de962bdSlukem /* ldap-pvt.h - Header for ldap_pvt_ functions.
192de962bdSlukem  * These are meant to be internal to OpenLDAP Software.
202de962bdSlukem  */
212de962bdSlukem 
222de962bdSlukem #ifndef _LDAP_PVT_H
232de962bdSlukem #define _LDAP_PVT_H 1
242de962bdSlukem 
254e27b3e8Schristos #include <openldap.h>				/* get public interfaces */
262de962bdSlukem #include <lber.h>				/* get ber_slen_t */
274e6df137Slukem #include <lber_pvt.h>				/* get Sockbuf_Buf */
282de962bdSlukem 
292de962bdSlukem LDAP_BEGIN_DECL
302de962bdSlukem 
312de962bdSlukem LDAP_F ( int )
322de962bdSlukem ldap_pvt_url_scheme2proto LDAP_P((
332de962bdSlukem 	const char * ));
342de962bdSlukem LDAP_F ( int )
352de962bdSlukem ldap_pvt_url_scheme2tls LDAP_P((
362de962bdSlukem 	const char * ));
37*549b59edSchristos LDAP_F ( int )
38*549b59edSchristos ldap_pvt_url_scheme2proxied LDAP_P((
39*549b59edSchristos 	const char * ));
402de962bdSlukem 
412de962bdSlukem LDAP_F ( int )
422de962bdSlukem ldap_pvt_url_scheme_port LDAP_P((
432de962bdSlukem 	const char *, int ));
442de962bdSlukem 
452de962bdSlukem struct ldap_url_desc; /* avoid pulling in <ldap.h> */
462de962bdSlukem 
472de962bdSlukem #define LDAP_PVT_URL_PARSE_NONE			(0x00U)
482de962bdSlukem #define LDAP_PVT_URL_PARSE_NOEMPTY_HOST		(0x01U)
492de962bdSlukem #define LDAP_PVT_URL_PARSE_DEF_PORT		(0x02U)
502de962bdSlukem #define LDAP_PVT_URL_PARSE_NOEMPTY_DN		(0x04U)
512de962bdSlukem #define LDAP_PVT_URL_PARSE_NODEF_SCOPE		(0x08U)
522de962bdSlukem #define	LDAP_PVT_URL_PARSE_HISTORIC		(LDAP_PVT_URL_PARSE_NODEF_SCOPE | \
532de962bdSlukem 						 LDAP_PVT_URL_PARSE_NOEMPTY_HOST | \
542de962bdSlukem 						 LDAP_PVT_URL_PARSE_DEF_PORT)
552de962bdSlukem 
562de962bdSlukem LDAP_F( int )
572de962bdSlukem ldap_url_parse_ext LDAP_P((
582de962bdSlukem 	LDAP_CONST char *url,
592de962bdSlukem 	struct ldap_url_desc **ludpp,
602de962bdSlukem 	unsigned flags ));
612de962bdSlukem 
622de962bdSlukem LDAP_F (int) ldap_url_parselist LDAP_P((	/* deprecated, use ldap_url_parselist_ext() */
632de962bdSlukem 	struct ldap_url_desc **ludlist,
642de962bdSlukem 	const char *url ));
652de962bdSlukem 
662de962bdSlukem LDAP_F (int) ldap_url_parselist_ext LDAP_P((
672de962bdSlukem 	struct ldap_url_desc **ludlist,
682de962bdSlukem 	const char *url,
692de962bdSlukem 	const char *sep,
702de962bdSlukem 	unsigned flags ));
712de962bdSlukem 
722de962bdSlukem LDAP_F (char *) ldap_url_list2urls LDAP_P((
732de962bdSlukem 	struct ldap_url_desc *ludlist ));
742de962bdSlukem 
752de962bdSlukem LDAP_F (void) ldap_free_urllist LDAP_P((
762de962bdSlukem 	struct ldap_url_desc *ludlist ));
772de962bdSlukem 
782de962bdSlukem LDAP_F (int) ldap_pvt_scope2bv LDAP_P ((
792de962bdSlukem 	int scope, struct berval *bv ));
802de962bdSlukem 
812de962bdSlukem LDAP_F (LDAP_CONST char *) ldap_pvt_scope2str LDAP_P ((
822de962bdSlukem 	int scope ));
832de962bdSlukem 
842de962bdSlukem LDAP_F (int) ldap_pvt_bv2scope LDAP_P ((
852de962bdSlukem 	struct berval *bv ));
862de962bdSlukem 
872de962bdSlukem LDAP_F (int) ldap_pvt_str2scope LDAP_P ((
882de962bdSlukem 	LDAP_CONST char * ));
892de962bdSlukem 
902de962bdSlukem LDAP_F( char * )
912de962bdSlukem ldap_pvt_ctime LDAP_P((
922de962bdSlukem 	const time_t *tp,
932de962bdSlukem 	char *buf ));
942de962bdSlukem 
95ef2f90d3Sadam # if defined( HAVE_GMTIME_R )
96ef2f90d3Sadam #   define USE_GMTIME_R
97ef2f90d3Sadam #   define ldap_pvt_gmtime(timep, result) gmtime_r((timep), (result))
98ef2f90d3Sadam # else
99ef2f90d3Sadam LDAP_F( struct tm * )
100ef2f90d3Sadam ldap_pvt_gmtime LDAP_P((
101ef2f90d3Sadam 	LDAP_CONST time_t *timep,
102ef2f90d3Sadam 	struct tm *result ));
103ef2f90d3Sadam #endif
104ef2f90d3Sadam 
105ef2f90d3Sadam # if defined( HAVE_LOCALTIME_R )
106ef2f90d3Sadam #   define USE_LOCALTIME_R
107ef2f90d3Sadam #   define ldap_pvt_localtime(timep, result) localtime_r((timep), (result))
108ef2f90d3Sadam # else
109ef2f90d3Sadam LDAP_F( struct tm * )
110ef2f90d3Sadam ldap_pvt_localtime LDAP_P((
111ef2f90d3Sadam 	LDAP_CONST time_t *timep,
112ef2f90d3Sadam 	struct tm *result ));
113ef2f90d3Sadam # endif
114ef2f90d3Sadam 
115ef2f90d3Sadam #if defined( USE_GMTIME_R ) && defined( USE_LOCALTIME_R )
116ef2f90d3Sadam #   define ldap_pvt_gmtime_lock() (0)
117ef2f90d3Sadam #   define ldap_pvt_gmtime_unlock() (0)
118ef2f90d3Sadam #else
119ef2f90d3Sadam LDAP_F( int )
120ef2f90d3Sadam ldap_pvt_gmtime_lock LDAP_P(( void ));
121ef2f90d3Sadam 
122ef2f90d3Sadam LDAP_F( int )
123ef2f90d3Sadam ldap_pvt_gmtime_unlock LDAP_P(( void ));
124ef2f90d3Sadam #endif /* USE_GMTIME_R && USE_LOCALTIME_R */
125ef2f90d3Sadam 
126ef2f90d3Sadam /* Get current time as a structured time */
127ef2f90d3Sadam struct lutil_tm;
128ef2f90d3Sadam LDAP_F( void )
129ef2f90d3Sadam ldap_pvt_gettime LDAP_P(( struct lutil_tm * ));
130ef2f90d3Sadam 
131376af7d7Schristos #ifdef _WIN32
132376af7d7Schristos #define gettimeofday(tv,tz)	ldap_pvt_gettimeofday(tv,tz)
133376af7d7Schristos struct timeval;
134376af7d7Schristos LDAP_F( int )
135376af7d7Schristos ldap_pvt_gettimeofday LDAP_P(( struct timeval *tv, void *unused ));
136*549b59edSchristos #ifndef CLOCK_REALTIME
137*549b59edSchristos #define CLOCK_REALTIME	0
138*549b59edSchristos #endif
139*549b59edSchristos #define clock_gettime(clkid,tv)	ldap_pvt_clock_gettime(clkid,tv)
140*549b59edSchristos struct timespec;
141*549b59edSchristos LDAP_F( int )
142*549b59edSchristos ldap_pvt_clock_gettime LDAP_P(( int clkid, struct timespec *tv ));
143376af7d7Schristos #endif
144376af7d7Schristos 
145ef2f90d3Sadam /* use this macro to allocate buffer for ldap_pvt_csnstr */
146ef2f90d3Sadam #define LDAP_PVT_CSNSTR_BUFSIZE	64
147ef2f90d3Sadam LDAP_F( size_t )
148ef2f90d3Sadam ldap_pvt_csnstr( char *buf, size_t len, unsigned int replica, unsigned int mod );
149ef2f90d3Sadam 
1502de962bdSlukem LDAP_F( char *) ldap_pvt_get_fqdn LDAP_P(( char * ));
1512de962bdSlukem 
1522de962bdSlukem struct hostent;	/* avoid pulling in <netdb.h> */
1532de962bdSlukem 
1542de962bdSlukem LDAP_F( int )
1552de962bdSlukem ldap_pvt_gethostbyname_a LDAP_P((
1562de962bdSlukem 	const char *name,
1572de962bdSlukem 	struct hostent *resbuf,
1582de962bdSlukem 	char **buf,
1592de962bdSlukem 	struct hostent **result,
1602de962bdSlukem 	int *herrno_ptr ));
1612de962bdSlukem 
1622de962bdSlukem LDAP_F( int )
1632de962bdSlukem ldap_pvt_gethostbyaddr_a LDAP_P((
1642de962bdSlukem 	const char *addr,
1652de962bdSlukem 	int len,
1662de962bdSlukem 	int type,
1672de962bdSlukem 	struct hostent *resbuf,
1682de962bdSlukem 	char **buf,
1692de962bdSlukem 	struct hostent **result,
1702de962bdSlukem 	int *herrno_ptr ));
1712de962bdSlukem 
1722de962bdSlukem struct sockaddr;
1732de962bdSlukem 
1742de962bdSlukem LDAP_F( int )
1752de962bdSlukem ldap_pvt_get_hname LDAP_P((
1762de962bdSlukem 	const struct sockaddr * sa,
1772de962bdSlukem 	int salen,
1782de962bdSlukem 	char *name,
1792de962bdSlukem 	int namelen,
1802de962bdSlukem 	char **herr ));
1812de962bdSlukem 
182*549b59edSchristos #ifdef LDAP_PF_LOCAL
183*549b59edSchristos #define LDAP_IPADDRLEN	(MAXPATHLEN + sizeof("PATH="))
184*549b59edSchristos #elif defined(LDAP_PF_INET6)
185*549b59edSchristos #define LDAP_IPADDRLEN	sizeof("IP=[ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff]:65535")
186*549b59edSchristos #else
187*549b59edSchristos #define LDAP_IPADDRLEN	sizeof("IP=255.255.255.255:65336")
188*549b59edSchristos #endif
189*549b59edSchristos 
190*549b59edSchristos typedef union Sockaddr Sockaddr;
191*549b59edSchristos 
192*549b59edSchristos LDAP_F (void)
193*549b59edSchristos ldap_pvt_sockaddrstr LDAP_P((
194*549b59edSchristos 	Sockaddr *sa,
195*549b59edSchristos 	struct berval * ));
196*549b59edSchristos 
1972de962bdSlukem 
1982de962bdSlukem /* charray.c */
1992de962bdSlukem 
2002de962bdSlukem LDAP_F( int )
2012de962bdSlukem ldap_charray_add LDAP_P((
2022de962bdSlukem     char	***a,
2032de962bdSlukem     const char *s ));
2042de962bdSlukem 
2052de962bdSlukem LDAP_F( int )
2062de962bdSlukem ldap_charray_merge LDAP_P((
2072de962bdSlukem     char	***a,
2082de962bdSlukem     char	**s ));
2092de962bdSlukem 
2102de962bdSlukem LDAP_F( void )
2112de962bdSlukem ldap_charray_free LDAP_P(( char **a ));
2122de962bdSlukem 
2132de962bdSlukem LDAP_F( int )
2142de962bdSlukem ldap_charray_inlist LDAP_P((
2152de962bdSlukem     char	**a,
2162de962bdSlukem     const char *s ));
2172de962bdSlukem 
2182de962bdSlukem LDAP_F( char ** )
2192de962bdSlukem ldap_charray_dup LDAP_P(( char **a ));
2202de962bdSlukem 
2212de962bdSlukem LDAP_F( char ** )
2222de962bdSlukem ldap_str2charray LDAP_P((
2232de962bdSlukem 	const char *str,
2242de962bdSlukem 	const char *brkstr ));
2252de962bdSlukem 
2262de962bdSlukem LDAP_F( char * )
2272de962bdSlukem ldap_charray2str LDAP_P((
2282de962bdSlukem 	char **array, const char* sep ));
2292de962bdSlukem 
2302de962bdSlukem /* getdn.c */
2312de962bdSlukem 
2322de962bdSlukem #ifdef LDAP_AVA_NULL	/* in ldap.h */
2332de962bdSlukem LDAP_F( void ) ldap_rdnfree_x LDAP_P(( LDAPRDN rdn, void *ctx ));
2342de962bdSlukem LDAP_F( void ) ldap_dnfree_x LDAP_P(( LDAPDN dn, void *ctx ));
2352de962bdSlukem 
2362de962bdSlukem LDAP_F( int ) ldap_bv2dn_x LDAP_P((
2372de962bdSlukem 	struct berval *bv, LDAPDN *dn, unsigned flags, void *ctx ));
2382de962bdSlukem LDAP_F( int ) ldap_dn2bv_x LDAP_P((
2392de962bdSlukem 	LDAPDN dn, struct berval *bv, unsigned flags, void *ctx ));
2402de962bdSlukem LDAP_F( int ) ldap_bv2rdn_x LDAP_P((
2412de962bdSlukem 	struct berval *, LDAPRDN *, char **, unsigned flags, void *ctx ));
2422de962bdSlukem LDAP_F( int ) ldap_rdn2bv_x LDAP_P((
2432de962bdSlukem 	LDAPRDN rdn, struct berval *bv, unsigned flags, void *ctx ));
2442de962bdSlukem #endif /* LDAP_AVA_NULL */
2452de962bdSlukem 
2462de962bdSlukem /* url.c */
2472de962bdSlukem LDAP_F (void) ldap_pvt_hex_unescape LDAP_P(( char *s ));
2482de962bdSlukem 
2492de962bdSlukem /*
2502de962bdSlukem  * these macros assume 'x' is an ASCII x
2512de962bdSlukem  * and assume the "C" locale
2522de962bdSlukem  */
2532de962bdSlukem #define LDAP_ASCII(c)		(!((c) & 0x80))
2542de962bdSlukem #define LDAP_SPACE(c)		((c) == ' ' || (c) == '\t' || (c) == '\n')
2552de962bdSlukem #define LDAP_DIGIT(c)		((c) >= '0' && (c) <= '9')
2562de962bdSlukem #define LDAP_LOWER(c)		((c) >= 'a' && (c) <= 'z')
2572de962bdSlukem #define LDAP_UPPER(c)		((c) >= 'A' && (c) <= 'Z')
2582de962bdSlukem #define LDAP_ALPHA(c)		(LDAP_LOWER(c) || LDAP_UPPER(c))
2592de962bdSlukem #define LDAP_ALNUM(c)		(LDAP_ALPHA(c) || LDAP_DIGIT(c))
2602de962bdSlukem 
2612de962bdSlukem #define LDAP_LDH(c)			(LDAP_ALNUM(c) || (c) == '-')
2622de962bdSlukem 
2632de962bdSlukem #define LDAP_HEXLOWER(c)	((c) >= 'a' && (c) <= 'f')
2642de962bdSlukem #define LDAP_HEXUPPER(c)	((c) >= 'A' && (c) <= 'F')
2652de962bdSlukem #define LDAP_HEX(c)			(LDAP_DIGIT(c) || \
2662de962bdSlukem 								LDAP_HEXLOWER(c) || LDAP_HEXUPPER(c))
2672de962bdSlukem 
2682de962bdSlukem /* controls.c */
2692de962bdSlukem struct ldapcontrol;
2702de962bdSlukem LDAP_F (int)
2712de962bdSlukem ldap_pvt_put_control LDAP_P((
2722de962bdSlukem 	const struct ldapcontrol *c,
2732de962bdSlukem 	BerElement *ber ));
2742de962bdSlukem LDAP_F (int) ldap_pvt_get_controls LDAP_P((
2752de962bdSlukem 	BerElement *be,
2762de962bdSlukem 	struct ldapcontrol ***ctrlsp));
2772de962bdSlukem 
2782de962bdSlukem #ifdef HAVE_CYRUS_SASL
2792de962bdSlukem /* cyrus.c */
2802de962bdSlukem struct sasl_security_properties; /* avoid pulling in <sasl.h> */
2812de962bdSlukem LDAP_F (int) ldap_pvt_sasl_secprops LDAP_P((
2822de962bdSlukem 	const char *in,
2832de962bdSlukem 	struct sasl_security_properties *secprops ));
2842de962bdSlukem LDAP_F (void) ldap_pvt_sasl_secprops_unparse LDAP_P((
2852de962bdSlukem 	struct sasl_security_properties *secprops,
2862de962bdSlukem 	struct berval *out ));
2872de962bdSlukem 
2882de962bdSlukem LDAP_F (void *) ldap_pvt_sasl_mutex_new LDAP_P((void));
2892de962bdSlukem LDAP_F (int) ldap_pvt_sasl_mutex_lock LDAP_P((void *mutex));
2902de962bdSlukem LDAP_F (int) ldap_pvt_sasl_mutex_unlock LDAP_P((void *mutex));
2912de962bdSlukem LDAP_F (void) ldap_pvt_sasl_mutex_dispose LDAP_P((void *mutex));
292*549b59edSchristos 
293*549b59edSchristos LDAP_F (int) ldap_pvt_sasl_cbinding_parse LDAP_P(( const char *arg ));
294*549b59edSchristos LDAP_F (void *) ldap_pvt_sasl_cbinding LDAP_P(( void *ssl, int type,
295*549b59edSchristos 					        int is_server ));
2964e6df137Slukem #endif /* HAVE_CYRUS_SASL */
2972de962bdSlukem 
2982de962bdSlukem struct sockbuf; /* avoid pulling in <lber.h> */
2992de962bdSlukem LDAP_F (int) ldap_pvt_sasl_install LDAP_P(( struct sockbuf *, void * ));
3002de962bdSlukem LDAP_F (void) ldap_pvt_sasl_remove LDAP_P(( struct sockbuf * ));
3014e6df137Slukem 
302c8e4d354Schristos LDAP_F (int) ldap_pvt_tls_check_hostname LDAP_P(( LDAP *, void *, const char *));
303c8e4d354Schristos 
304c8e4d354Schristos 
3054e6df137Slukem /*
3064e6df137Slukem  * SASL encryption support for LBER Sockbufs
3074e6df137Slukem  */
3084e6df137Slukem 
3094e6df137Slukem struct sb_sasl_generic_data;
3104e6df137Slukem 
3114e6df137Slukem struct sb_sasl_generic_ops {
3124e6df137Slukem 	void (*init)(struct sb_sasl_generic_data *p,
3134e6df137Slukem 		     ber_len_t *min_send,
3144e6df137Slukem 		     ber_len_t *max_send,
3154e6df137Slukem 		     ber_len_t *max_recv);
3164e6df137Slukem 	ber_int_t (*encode)(struct sb_sasl_generic_data *p,
3174e6df137Slukem 			    unsigned char *buf,
3184e6df137Slukem 			    ber_len_t len,
3194e6df137Slukem 			    Sockbuf_Buf *dst);
3204e6df137Slukem 	ber_int_t (*decode)(struct sb_sasl_generic_data *p,
3214e6df137Slukem 			    const Sockbuf_Buf *src,
3224e6df137Slukem 			    Sockbuf_Buf *dst);
3234e6df137Slukem 	void (*reset_buf)(struct sb_sasl_generic_data *p,
3244e6df137Slukem 			  Sockbuf_Buf *buf);
3254e6df137Slukem 	void (*fini)(struct sb_sasl_generic_data *p);
3264e6df137Slukem };
3274e6df137Slukem 
3284e6df137Slukem struct sb_sasl_generic_install {
3294e6df137Slukem 	const struct sb_sasl_generic_ops 	*ops;
3304e6df137Slukem 	void					*ops_private;
3314e6df137Slukem };
3324e6df137Slukem 
3334e6df137Slukem struct sb_sasl_generic_data {
3344e6df137Slukem 	const struct sb_sasl_generic_ops 	*ops;
3354e6df137Slukem 	void					*ops_private;
3364e6df137Slukem 	Sockbuf_IO_Desc				*sbiod;
3374e6df137Slukem 	ber_len_t				min_send;
3384e6df137Slukem 	ber_len_t				max_send;
3394e6df137Slukem 	ber_len_t				max_recv;
3404e6df137Slukem 	Sockbuf_Buf				sec_buf_in;
3414e6df137Slukem 	Sockbuf_Buf				buf_in;
3424e6df137Slukem 	Sockbuf_Buf				buf_out;
3434e6df137Slukem 	unsigned int				flags;
3444e6df137Slukem #define LDAP_PVT_SASL_PARTIAL_WRITE	1
3454e6df137Slukem };
3462de962bdSlukem 
3472de962bdSlukem #ifndef LDAP_PVT_SASL_LOCAL_SSF
3482de962bdSlukem #define LDAP_PVT_SASL_LOCAL_SSF	71	/* SSF for Unix Domain Sockets */
3492de962bdSlukem #endif /* ! LDAP_PVT_SASL_LOCAL_SSF */
3502de962bdSlukem 
3512de962bdSlukem struct ldap;
3522de962bdSlukem struct ldapmsg;
353*549b59edSchristos struct ldifrecord;
3542de962bdSlukem 
3552de962bdSlukem /* abandon */
3562de962bdSlukem LDAP_F ( int ) ldap_pvt_discard LDAP_P((
3572de962bdSlukem 	struct ldap *ld, ber_int_t msgid ));
3582de962bdSlukem 
359*549b59edSchristos /* init.c */
360*549b59edSchristos LDAP_F( int )
361*549b59edSchristos ldap_pvt_conf_option LDAP_P((
362*549b59edSchristos 	char *cmd, char *opt, int userconf ));
363*549b59edSchristos 
364*549b59edSchristos /* ldifutil.c */
365*549b59edSchristos LDAP_F( int )
366*549b59edSchristos ldap_parse_ldif_record_x LDAP_P((
367*549b59edSchristos 	struct berval *rbuf,
368*549b59edSchristos 	unsigned long linenum,
369*549b59edSchristos 	struct ldifrecord *lr,
370*549b59edSchristos 	const char *errstr,
371*549b59edSchristos 	unsigned int flags,
372*549b59edSchristos 	void *ctx ));
373*549b59edSchristos 
3742de962bdSlukem /* messages.c */
3752de962bdSlukem LDAP_F( BerElement * )
3762de962bdSlukem ldap_get_message_ber LDAP_P((
3772de962bdSlukem 	struct ldapmsg * ));
3782de962bdSlukem 
3792de962bdSlukem /* open */
3802de962bdSlukem LDAP_F (int) ldap_open_internal_connection LDAP_P((
3812de962bdSlukem 	struct ldap **ldp, ber_socket_t *fdp ));
3822de962bdSlukem 
3834e6df137Slukem /* sasl.c */
3844e6df137Slukem LDAP_F (int) ldap_pvt_sasl_generic_install LDAP_P(( Sockbuf *sb,
3854e6df137Slukem 	struct sb_sasl_generic_install *install_arg ));
3864e6df137Slukem LDAP_F (void) ldap_pvt_sasl_generic_remove LDAP_P(( Sockbuf *sb ));
3874e6df137Slukem 
3882de962bdSlukem /* search.c */
3892de962bdSlukem LDAP_F( int ) ldap_pvt_put_filter LDAP_P((
3902de962bdSlukem 	BerElement *ber,
3912de962bdSlukem 	const char *str ));
3922de962bdSlukem 
3932de962bdSlukem LDAP_F( char * )
3942de962bdSlukem ldap_pvt_find_wildcard LDAP_P((	const char *s ));
3952de962bdSlukem 
3962de962bdSlukem LDAP_F( ber_slen_t )
3972de962bdSlukem ldap_pvt_filter_value_unescape LDAP_P(( char *filter ));
3982de962bdSlukem 
3992de962bdSlukem LDAP_F( ber_len_t )
4002de962bdSlukem ldap_bv2escaped_filter_value_len LDAP_P(( struct berval *in ));
4012de962bdSlukem 
4022de962bdSlukem LDAP_F( int )
4032de962bdSlukem ldap_bv2escaped_filter_value_x LDAP_P(( struct berval *in, struct berval *out,
4042de962bdSlukem 	int inplace, void *ctx ));
4052de962bdSlukem 
4064e6df137Slukem LDAP_F (int) ldap_pvt_search LDAP_P((
4074e6df137Slukem 	struct ldap *ld,
4084e6df137Slukem 	LDAP_CONST char *base,
4094e6df137Slukem 	int scope,
4104e6df137Slukem 	LDAP_CONST char *filter,
4114e6df137Slukem 	char **attrs,
4124e6df137Slukem 	int attrsonly,
4134e6df137Slukem 	struct ldapcontrol **sctrls,
4144e6df137Slukem 	struct ldapcontrol **cctrls,
4154e6df137Slukem 	struct timeval *timeout,
4164e6df137Slukem 	int sizelimit,
4174e6df137Slukem 	int deref,
4184e6df137Slukem 	int *msgidp ));
4194e6df137Slukem 
4204e6df137Slukem LDAP_F(int) ldap_pvt_search_s LDAP_P((
4214e6df137Slukem 	struct ldap *ld,
4224e6df137Slukem 	LDAP_CONST char *base,
4234e6df137Slukem 	int scope,
4244e6df137Slukem 	LDAP_CONST char *filter,
4254e6df137Slukem 	char **attrs,
4264e6df137Slukem 	int attrsonly,
4274e6df137Slukem 	struct ldapcontrol **sctrls,
4284e6df137Slukem 	struct ldapcontrol **cctrls,
4294e6df137Slukem 	struct timeval *timeout,
4304e6df137Slukem 	int sizelimit,
4314e6df137Slukem 	int deref,
4324e6df137Slukem 	struct ldapmsg **res ));
4334e6df137Slukem 
4342de962bdSlukem /* string.c */
4352de962bdSlukem LDAP_F( char * )
4362de962bdSlukem ldap_pvt_str2upper LDAP_P(( char *str ));
4372de962bdSlukem 
4382de962bdSlukem LDAP_F( char * )
4392de962bdSlukem ldap_pvt_str2lower LDAP_P(( char *str ));
4402de962bdSlukem 
4412de962bdSlukem LDAP_F( struct berval * )
4422de962bdSlukem ldap_pvt_str2upperbv LDAP_P(( char *str, struct berval *bv ));
4432de962bdSlukem 
4442de962bdSlukem LDAP_F( struct berval * )
4452de962bdSlukem ldap_pvt_str2lowerbv LDAP_P(( char *str, struct berval *bv ));
4462de962bdSlukem 
4472de962bdSlukem /* tls.c */
448*549b59edSchristos LDAP_F (int) ldap_pvt_tls_config LDAP_P(( struct ldap *ld,
4492de962bdSlukem 	int option, const char *arg ));
4502de962bdSlukem LDAP_F (int) ldap_pvt_tls_get_option LDAP_P(( struct ldap *ld,
4512de962bdSlukem 	int option, void *arg ));
4522de962bdSlukem LDAP_F (int) ldap_pvt_tls_set_option LDAP_P(( struct ldap *ld,
4532de962bdSlukem 	int option, void *arg ));
4542de962bdSlukem 
4552de962bdSlukem LDAP_F (void) ldap_pvt_tls_destroy LDAP_P(( void ));
456*549b59edSchristos LDAP_F (int) ldap_pvt_tls_init LDAP_P(( int do_threads ));
4572de962bdSlukem LDAP_F (int) ldap_pvt_tls_init_def_ctx LDAP_P(( int is_server ));
4582de962bdSlukem LDAP_F (int) ldap_pvt_tls_accept LDAP_P(( Sockbuf *sb, void *ctx_arg ));
459*549b59edSchristos LDAP_F (int) ldap_pvt_tls_connect LDAP_P(( struct ldap *ld, Sockbuf *sb, const char *host ));
4602de962bdSlukem LDAP_F (int) ldap_pvt_tls_inplace LDAP_P(( Sockbuf *sb ));
4612de962bdSlukem LDAP_F (void *) ldap_pvt_tls_sb_ctx LDAP_P(( Sockbuf *sb ));
4622de962bdSlukem LDAP_F (void) ldap_pvt_tls_ctx_free LDAP_P(( void * ));
4632de962bdSlukem 
4642de962bdSlukem typedef int LDAPDN_rewrite_dummy LDAP_P (( void *dn, unsigned flags ));
4652de962bdSlukem 
4662de962bdSlukem typedef int (LDAP_TLS_CONNECT_CB) LDAP_P (( struct ldap *ld, void *ssl,
4672de962bdSlukem 	void *ctx, void *arg ));
4682de962bdSlukem 
4692de962bdSlukem LDAP_F (int) ldap_pvt_tls_get_my_dn LDAP_P(( void *ctx, struct berval *dn,
4702de962bdSlukem 	LDAPDN_rewrite_dummy *func, unsigned flags ));
4712de962bdSlukem LDAP_F (int) ldap_pvt_tls_get_peer_dn LDAP_P(( void *ctx, struct berval *dn,
4722de962bdSlukem 	LDAPDN_rewrite_dummy *func, unsigned flags ));
4732de962bdSlukem LDAP_F (int) ldap_pvt_tls_get_strength LDAP_P(( void *ctx ));
474*549b59edSchristos LDAP_F (int) ldap_pvt_tls_get_unique LDAP_P(( void *ctx, struct berval *buf, int is_server ));
475*549b59edSchristos LDAP_F (int) ldap_pvt_tls_get_endpoint LDAP_P(( void *ctx, struct berval *buf, int is_server ));
476*549b59edSchristos LDAP_F (const char *) ldap_pvt_tls_get_version LDAP_P(( void *ctx ));
477*549b59edSchristos LDAP_F (const char *) ldap_pvt_tls_get_cipher LDAP_P(( void *ctx ));
4782de962bdSlukem 
4792de962bdSlukem LDAP_END_DECL
4802de962bdSlukem 
4812de962bdSlukem /*
4822de962bdSlukem  * Multiple precision stuff
4832de962bdSlukem  *
4842de962bdSlukem  * May use OpenSSL's BIGNUM if built with TLS,
4852de962bdSlukem  * or GNU's multiple precision library. But if
4862de962bdSlukem  * long long is available, that's big enough
4872de962bdSlukem  * and much more efficient.
4882de962bdSlukem  *
4892de962bdSlukem  * If none is available, unsigned long data is used.
4902de962bdSlukem  */
4912de962bdSlukem 
4922de962bdSlukem LDAP_BEGIN_DECL
4932de962bdSlukem 
4942de962bdSlukem #ifdef USE_MP_BIGNUM
4952de962bdSlukem /*
4962de962bdSlukem  * Use OpenSSL's BIGNUM
4972de962bdSlukem  */
4982de962bdSlukem #include <openssl/crypto.h>
4992de962bdSlukem #include <openssl/bn.h>
5002de962bdSlukem 
5012de962bdSlukem typedef	BIGNUM* ldap_pvt_mp_t;
5022de962bdSlukem #define	LDAP_PVT_MP_INIT	(NULL)
5032de962bdSlukem 
5042de962bdSlukem #define	ldap_pvt_mp_init(mp) \
5052de962bdSlukem 	do { (mp) = BN_new(); } while (0)
5062de962bdSlukem 
5072de962bdSlukem /* FIXME: we rely on mpr being initialized */
5082de962bdSlukem #define	ldap_pvt_mp_init_set(mpr,mpv) \
5092de962bdSlukem 	do { ldap_pvt_mp_init((mpr)); BN_add((mpr), (mpr), (mpv)); } while (0)
5102de962bdSlukem 
5112de962bdSlukem #define	ldap_pvt_mp_add(mpr,mpv) \
5122de962bdSlukem 	BN_add((mpr), (mpr), (mpv))
5132de962bdSlukem 
5142de962bdSlukem #define	ldap_pvt_mp_add_ulong(mp,v) \
5152de962bdSlukem 	BN_add_word((mp), (v))
5162de962bdSlukem 
5172de962bdSlukem #define ldap_pvt_mp_clear(mp) \
5182de962bdSlukem 	do { BN_free((mp)); (mp) = 0; } while (0)
5192de962bdSlukem 
5202de962bdSlukem #elif defined(USE_MP_GMP)
5212de962bdSlukem /*
5222de962bdSlukem  * Use GNU's multiple precision library
5232de962bdSlukem  */
5242de962bdSlukem #include <gmp.h>
5252de962bdSlukem 
5262de962bdSlukem typedef mpz_t		ldap_pvt_mp_t;
5272de962bdSlukem #define	LDAP_PVT_MP_INIT	{ 0 }
5282de962bdSlukem 
5292de962bdSlukem #define ldap_pvt_mp_init(mp) \
5302de962bdSlukem 	mpz_init((mp))
5312de962bdSlukem 
5322de962bdSlukem #define	ldap_pvt_mp_init_set(mpr,mpv) \
5332de962bdSlukem 	mpz_init_set((mpr), (mpv))
5342de962bdSlukem 
5352de962bdSlukem #define	ldap_pvt_mp_add(mpr,mpv) \
5362de962bdSlukem 	mpz_add((mpr), (mpr), (mpv))
5372de962bdSlukem 
5382de962bdSlukem #define	ldap_pvt_mp_add_ulong(mp,v)	\
5392de962bdSlukem 	mpz_add_ui((mp), (mp), (v))
5402de962bdSlukem 
5412de962bdSlukem #define ldap_pvt_mp_clear(mp) \
5422de962bdSlukem 	mpz_clear((mp))
5432de962bdSlukem 
5442de962bdSlukem #else
5452de962bdSlukem /*
5462de962bdSlukem  * Use unsigned long long
5472de962bdSlukem  */
5482de962bdSlukem 
5492de962bdSlukem #ifdef USE_MP_LONG_LONG
5502de962bdSlukem typedef	unsigned long long	ldap_pvt_mp_t;
5512de962bdSlukem #define	LDAP_PVT_MP_INIT	(0LL)
5522de962bdSlukem #elif defined(USE_MP_LONG)
5532de962bdSlukem typedef	unsigned long		ldap_pvt_mp_t;
5542de962bdSlukem #define	LDAP_PVT_MP_INIT	(0L)
5552de962bdSlukem #elif defined(HAVE_LONG_LONG)
5562de962bdSlukem typedef	unsigned long long	ldap_pvt_mp_t;
5572de962bdSlukem #define	LDAP_PVT_MP_INIT	(0LL)
5582de962bdSlukem #else
5592de962bdSlukem typedef	unsigned long		ldap_pvt_mp_t;
5602de962bdSlukem #define	LDAP_PVT_MP_INIT	(0L)
5612de962bdSlukem #endif
5622de962bdSlukem 
5632de962bdSlukem #define ldap_pvt_mp_init(mp) \
5642de962bdSlukem 	do { (mp) = 0; } while (0)
5652de962bdSlukem 
5662de962bdSlukem #define	ldap_pvt_mp_init_set(mpr,mpv) \
5672de962bdSlukem 	do { (mpr) = (mpv); } while (0)
5682de962bdSlukem 
5692de962bdSlukem #define	ldap_pvt_mp_add(mpr,mpv) \
5702de962bdSlukem 	do { (mpr) += (mpv); } while (0)
5712de962bdSlukem 
5722de962bdSlukem #define	ldap_pvt_mp_add_ulong(mp,v) \
5732de962bdSlukem 	do { (mp) += (v); } while (0)
5742de962bdSlukem 
5752de962bdSlukem #define ldap_pvt_mp_clear(mp) \
5762de962bdSlukem 	do { (mp) = 0; } while (0)
5772de962bdSlukem 
5782de962bdSlukem #endif /* MP */
5792de962bdSlukem 
5802de962bdSlukem #include "ldap_pvt_uc.h"
5812de962bdSlukem 
5822de962bdSlukem LDAP_END_DECL
5832de962bdSlukem 
5842de962bdSlukem LDAP_BEGIN_DECL
5852de962bdSlukem 
5862de962bdSlukem #include <limits.h>				/* get CHAR_BIT */
5872de962bdSlukem 
5882de962bdSlukem /* Buffer space for sign, decimal digits and \0. Note: log10(2) < 146/485. */
5892de962bdSlukem #define LDAP_PVT_INTTYPE_CHARS(type) (((sizeof(type)*CHAR_BIT-1)*146)/485 + 3)
5902de962bdSlukem 
5912de962bdSlukem LDAP_END_DECL
5922de962bdSlukem 
5932de962bdSlukem #endif /* _LDAP_PVT_H */
594