openldap/include/ldap_pvt.h

462 lines
12 KiB
C
Raw Normal View History

1999-08-31 09:17:01 +08:00
/* $OpenLDAP$ */
2003-11-26 15:16:36 +08:00
/* This work is part of OpenLDAP Software <http://www.openldap.org/>.
*
2008-01-08 08:19:56 +08:00
* Copyright 1998-2008 The OpenLDAP Foundation.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted only as authorized by the OpenLDAP
2003-11-26 15:16:36 +08:00
* Public License.
*
* A copy of this license is available in file LICENSE in the
* top-level directory of the distribution or, alternatively, at
* <http://www.OpenLDAP.org/license.html>.
*/
2003-11-26 15:16:36 +08:00
/* ldap-pvt.h - Header for ldap_pvt_ functions.
* These are meant to be internal to OpenLDAP Software.
*/
#ifndef _LDAP_PVT_H
#define _LDAP_PVT_H 1
#include <lber.h> /* get ber_slen_t */
#include <lber_pvt.h> /* get Sockbuf_Buf */
1999-01-26 08:04:01 +08:00
LDAP_BEGIN_DECL
2000-08-18 12:25:00 +08:00
#define LDAP_PROTO_TCP 1 /* ldap:// */
#define LDAP_PROTO_UDP 2 /* reserved */
#define LDAP_PROTO_IPC 3 /* ldapi:// */
2007-02-12 12:20:24 +08:00
#define LDAP_PROTO_EXT 4 /* user-defined socket/sockbuf */
LDAP_F ( int )
ldap_pvt_url_scheme2proto LDAP_P((
const char * ));
LDAP_F ( int )
ldap_pvt_url_scheme2tls LDAP_P((
const char * ));
2004-08-28 11:53:31 +08:00
LDAP_F ( int )
ldap_pvt_url_scheme_port LDAP_P((
const char *, int ));
struct ldap_url_desc; /* avoid pulling in <ldap.h> */
#define LDAP_PVT_URL_PARSE_NONE (0x00U)
#define LDAP_PVT_URL_PARSE_NOEMPTY_HOST (0x01U)
#define LDAP_PVT_URL_PARSE_DEF_PORT (0x02U)
#define LDAP_PVT_URL_PARSE_NOEMPTY_DN (0x04U)
#define LDAP_PVT_URL_PARSE_NODEF_SCOPE (0x08U)
2007-06-20 06:59:53 +08:00
#define LDAP_PVT_URL_PARSE_HISTORIC (LDAP_PVT_URL_PARSE_NODEF_SCOPE | \
LDAP_PVT_URL_PARSE_NOEMPTY_HOST | \
LDAP_PVT_URL_PARSE_DEF_PORT)
LDAP_F( int )
ldap_url_parse_ext LDAP_P((
LDAP_CONST char *url,
struct ldap_url_desc **ludpp,
unsigned flags ));
2007-08-16 17:22:07 +08:00
LDAP_F (int) ldap_url_parselist LDAP_P(( /* deprecated, use ldap_url_parselist_ext() */
struct ldap_url_desc **ludlist,
const char *url ));
LDAP_F (int) ldap_url_parselist_ext LDAP_P((
struct ldap_url_desc **ludlist,
const char *url,
const char *sep,
unsigned flags ));
LDAP_F (char *) ldap_url_list2urls LDAP_P((
struct ldap_url_desc *ludlist ));
LDAP_F (void) ldap_free_urllist LDAP_P((
struct ldap_url_desc *ludlist ));
2006-09-06 20:04:33 +08:00
LDAP_F (int) ldap_pvt_scope2bv LDAP_P ((
int scope, struct berval *bv ));
LDAP_F (LDAP_CONST char *) ldap_pvt_scope2str LDAP_P ((
int scope ));
LDAP_F (int) ldap_pvt_bv2scope LDAP_P ((
struct berval *bv ));
LDAP_F (int) ldap_pvt_str2scope LDAP_P ((
LDAP_CONST char * ));
LDAP_F( char * )
Vienna Bulk Commit This commit includes many changes. All changes compile under NT but have not been tested under UNIX. A Summary of changes (likely incomplete): NT changes: Removed lint. Clean up configuration support for "Debug", "Release", "SDebug", and "SRelease" configurations. Share output directories for clients, libraries, and slapd. (maybe they should be combined further and moved to build/{,S}{Debug,Release}). Enable threading when _MT is defined. Enable debuging when _DEBUG is defined. Disable setting of NDEBUG under Release/SRelease. Asserts are disabled in <ac/assert.h> when LDAP_DEBUG is not defined. Added 'build/main.dsp' Master project. Removed non-slapd projects from slapd.dsp (see main.dsp). Removed replaced many uses of _WIN32 macro with feature based macros. ldap_cdefs.h changes #define LDAP_CONST const (see below) #define LDAP_F(type) LDAP_F_PRE type LDAP_F_POST To allow specifiers to be added before and after the type declaration. (For DLL handling) LBER/LDAP changes Namespace changes: s/lber_/ber_/ for here and there. s/NAME_ERROR/LDAP_NAME_ERROR/g Deleted NULLMSG and other NULL* macros for namespace reasons. "const" libraries. Installed headers (ie: lber.h, ldap.h) use LDAP_CONST macro. Normally set to 'const' when __STDC__. Can be set externally to enable/disable 'constification' of external interface. Internal interface always uses 'const'. Did not fix warnings in -lldif (in lieu of new LDIF parser). Added _ext API implementations (excepting search and bind). Need to implement ldap_int_get_controls() for reponses with controls. Added numberous assert() checks. LDAP_R _MT defines HAVE_NT_THREADS Added numberous assert() checks. Changed ldap_pthread_t back to unsigned long. Used cast to HANDLE in _join(). LDBM Replaced _WIN32 with HAVE_SYSLOG ud Added version string if MKVERSION is not defined. (MKVERSION needs to be set under UNIX). slapd Made connection sockbuf field a pointer to a sockbuf. This removed slap.h dependency on lber-int.h. lber-int.h now only included by those files needing to mess with the sockbuf. Used ber_* functions/macros to access sockbuf internals whenever possible. Added version string if MKVERSION is not defined. (MKVERSION needs to be set under UNIX). Removed FD_SET unsigned lint slapd/tools Used EXEEXT to added ".exe" to routines. Need to define EXEEXT under UNIX. ldappasswd Added ldappasswd.dsp. Ported to NT. Used getpid() to seed rand(). nt_debug Minor cleanup. Added "portable.h" include and used <ac/*.h> where appropriate. Added const to char* format argument.
1999-05-19 09:12:33 +08:00
ldap_pvt_ctime LDAP_P((
const time_t *tp,
char *buf ));
LDAP_F( char *) ldap_pvt_get_fqdn LDAP_P(( char * ));
struct hostent; /* avoid pulling in <netdb.h> */
LDAP_F( int )
Vienna Bulk Commit This commit includes many changes. All changes compile under NT but have not been tested under UNIX. A Summary of changes (likely incomplete): NT changes: Removed lint. Clean up configuration support for "Debug", "Release", "SDebug", and "SRelease" configurations. Share output directories for clients, libraries, and slapd. (maybe they should be combined further and moved to build/{,S}{Debug,Release}). Enable threading when _MT is defined. Enable debuging when _DEBUG is defined. Disable setting of NDEBUG under Release/SRelease. Asserts are disabled in <ac/assert.h> when LDAP_DEBUG is not defined. Added 'build/main.dsp' Master project. Removed non-slapd projects from slapd.dsp (see main.dsp). Removed replaced many uses of _WIN32 macro with feature based macros. ldap_cdefs.h changes #define LDAP_CONST const (see below) #define LDAP_F(type) LDAP_F_PRE type LDAP_F_POST To allow specifiers to be added before and after the type declaration. (For DLL handling) LBER/LDAP changes Namespace changes: s/lber_/ber_/ for here and there. s/NAME_ERROR/LDAP_NAME_ERROR/g Deleted NULLMSG and other NULL* macros for namespace reasons. "const" libraries. Installed headers (ie: lber.h, ldap.h) use LDAP_CONST macro. Normally set to 'const' when __STDC__. Can be set externally to enable/disable 'constification' of external interface. Internal interface always uses 'const'. Did not fix warnings in -lldif (in lieu of new LDIF parser). Added _ext API implementations (excepting search and bind). Need to implement ldap_int_get_controls() for reponses with controls. Added numberous assert() checks. LDAP_R _MT defines HAVE_NT_THREADS Added numberous assert() checks. Changed ldap_pthread_t back to unsigned long. Used cast to HANDLE in _join(). LDBM Replaced _WIN32 with HAVE_SYSLOG ud Added version string if MKVERSION is not defined. (MKVERSION needs to be set under UNIX). slapd Made connection sockbuf field a pointer to a sockbuf. This removed slap.h dependency on lber-int.h. lber-int.h now only included by those files needing to mess with the sockbuf. Used ber_* functions/macros to access sockbuf internals whenever possible. Added version string if MKVERSION is not defined. (MKVERSION needs to be set under UNIX). Removed FD_SET unsigned lint slapd/tools Used EXEEXT to added ".exe" to routines. Need to define EXEEXT under UNIX. ldappasswd Added ldappasswd.dsp. Ported to NT. Used getpid() to seed rand(). nt_debug Minor cleanup. Added "portable.h" include and used <ac/*.h> where appropriate. Added const to char* format argument.
1999-05-19 09:12:33 +08:00
ldap_pvt_gethostbyname_a LDAP_P((
const char *name,
struct hostent *resbuf,
char **buf,
struct hostent **result,
int *herrno_ptr ));
Vienna Bulk Commit This commit includes many changes. All changes compile under NT but have not been tested under UNIX. A Summary of changes (likely incomplete): NT changes: Removed lint. Clean up configuration support for "Debug", "Release", "SDebug", and "SRelease" configurations. Share output directories for clients, libraries, and slapd. (maybe they should be combined further and moved to build/{,S}{Debug,Release}). Enable threading when _MT is defined. Enable debuging when _DEBUG is defined. Disable setting of NDEBUG under Release/SRelease. Asserts are disabled in <ac/assert.h> when LDAP_DEBUG is not defined. Added 'build/main.dsp' Master project. Removed non-slapd projects from slapd.dsp (see main.dsp). Removed replaced many uses of _WIN32 macro with feature based macros. ldap_cdefs.h changes #define LDAP_CONST const (see below) #define LDAP_F(type) LDAP_F_PRE type LDAP_F_POST To allow specifiers to be added before and after the type declaration. (For DLL handling) LBER/LDAP changes Namespace changes: s/lber_/ber_/ for here and there. s/NAME_ERROR/LDAP_NAME_ERROR/g Deleted NULLMSG and other NULL* macros for namespace reasons. "const" libraries. Installed headers (ie: lber.h, ldap.h) use LDAP_CONST macro. Normally set to 'const' when __STDC__. Can be set externally to enable/disable 'constification' of external interface. Internal interface always uses 'const'. Did not fix warnings in -lldif (in lieu of new LDIF parser). Added _ext API implementations (excepting search and bind). Need to implement ldap_int_get_controls() for reponses with controls. Added numberous assert() checks. LDAP_R _MT defines HAVE_NT_THREADS Added numberous assert() checks. Changed ldap_pthread_t back to unsigned long. Used cast to HANDLE in _join(). LDBM Replaced _WIN32 with HAVE_SYSLOG ud Added version string if MKVERSION is not defined. (MKVERSION needs to be set under UNIX). slapd Made connection sockbuf field a pointer to a sockbuf. This removed slap.h dependency on lber-int.h. lber-int.h now only included by those files needing to mess with the sockbuf. Used ber_* functions/macros to access sockbuf internals whenever possible. Added version string if MKVERSION is not defined. (MKVERSION needs to be set under UNIX). Removed FD_SET unsigned lint slapd/tools Used EXEEXT to added ".exe" to routines. Need to define EXEEXT under UNIX. ldappasswd Added ldappasswd.dsp. Ported to NT. Used getpid() to seed rand(). nt_debug Minor cleanup. Added "portable.h" include and used <ac/*.h> where appropriate. Added const to char* format argument.
1999-05-19 09:12:33 +08:00
LDAP_F( int )
Vienna Bulk Commit This commit includes many changes. All changes compile under NT but have not been tested under UNIX. A Summary of changes (likely incomplete): NT changes: Removed lint. Clean up configuration support for "Debug", "Release", "SDebug", and "SRelease" configurations. Share output directories for clients, libraries, and slapd. (maybe they should be combined further and moved to build/{,S}{Debug,Release}). Enable threading when _MT is defined. Enable debuging when _DEBUG is defined. Disable setting of NDEBUG under Release/SRelease. Asserts are disabled in <ac/assert.h> when LDAP_DEBUG is not defined. Added 'build/main.dsp' Master project. Removed non-slapd projects from slapd.dsp (see main.dsp). Removed replaced many uses of _WIN32 macro with feature based macros. ldap_cdefs.h changes #define LDAP_CONST const (see below) #define LDAP_F(type) LDAP_F_PRE type LDAP_F_POST To allow specifiers to be added before and after the type declaration. (For DLL handling) LBER/LDAP changes Namespace changes: s/lber_/ber_/ for here and there. s/NAME_ERROR/LDAP_NAME_ERROR/g Deleted NULLMSG and other NULL* macros for namespace reasons. "const" libraries. Installed headers (ie: lber.h, ldap.h) use LDAP_CONST macro. Normally set to 'const' when __STDC__. Can be set externally to enable/disable 'constification' of external interface. Internal interface always uses 'const'. Did not fix warnings in -lldif (in lieu of new LDIF parser). Added _ext API implementations (excepting search and bind). Need to implement ldap_int_get_controls() for reponses with controls. Added numberous assert() checks. LDAP_R _MT defines HAVE_NT_THREADS Added numberous assert() checks. Changed ldap_pthread_t back to unsigned long. Used cast to HANDLE in _join(). LDBM Replaced _WIN32 with HAVE_SYSLOG ud Added version string if MKVERSION is not defined. (MKVERSION needs to be set under UNIX). slapd Made connection sockbuf field a pointer to a sockbuf. This removed slap.h dependency on lber-int.h. lber-int.h now only included by those files needing to mess with the sockbuf. Used ber_* functions/macros to access sockbuf internals whenever possible. Added version string if MKVERSION is not defined. (MKVERSION needs to be set under UNIX). Removed FD_SET unsigned lint slapd/tools Used EXEEXT to added ".exe" to routines. Need to define EXEEXT under UNIX. ldappasswd Added ldappasswd.dsp. Ported to NT. Used getpid() to seed rand(). nt_debug Minor cleanup. Added "portable.h" include and used <ac/*.h> where appropriate. Added const to char* format argument.
1999-05-19 09:12:33 +08:00
ldap_pvt_gethostbyaddr_a LDAP_P((
const char *addr,
int len,
int type,
struct hostent *resbuf,
char **buf,
struct hostent **result,
int *herrno_ptr ));
Vienna Bulk Commit This commit includes many changes. All changes compile under NT but have not been tested under UNIX. A Summary of changes (likely incomplete): NT changes: Removed lint. Clean up configuration support for "Debug", "Release", "SDebug", and "SRelease" configurations. Share output directories for clients, libraries, and slapd. (maybe they should be combined further and moved to build/{,S}{Debug,Release}). Enable threading when _MT is defined. Enable debuging when _DEBUG is defined. Disable setting of NDEBUG under Release/SRelease. Asserts are disabled in <ac/assert.h> when LDAP_DEBUG is not defined. Added 'build/main.dsp' Master project. Removed non-slapd projects from slapd.dsp (see main.dsp). Removed replaced many uses of _WIN32 macro with feature based macros. ldap_cdefs.h changes #define LDAP_CONST const (see below) #define LDAP_F(type) LDAP_F_PRE type LDAP_F_POST To allow specifiers to be added before and after the type declaration. (For DLL handling) LBER/LDAP changes Namespace changes: s/lber_/ber_/ for here and there. s/NAME_ERROR/LDAP_NAME_ERROR/g Deleted NULLMSG and other NULL* macros for namespace reasons. "const" libraries. Installed headers (ie: lber.h, ldap.h) use LDAP_CONST macro. Normally set to 'const' when __STDC__. Can be set externally to enable/disable 'constification' of external interface. Internal interface always uses 'const'. Did not fix warnings in -lldif (in lieu of new LDIF parser). Added _ext API implementations (excepting search and bind). Need to implement ldap_int_get_controls() for reponses with controls. Added numberous assert() checks. LDAP_R _MT defines HAVE_NT_THREADS Added numberous assert() checks. Changed ldap_pthread_t back to unsigned long. Used cast to HANDLE in _join(). LDBM Replaced _WIN32 with HAVE_SYSLOG ud Added version string if MKVERSION is not defined. (MKVERSION needs to be set under UNIX). slapd Made connection sockbuf field a pointer to a sockbuf. This removed slap.h dependency on lber-int.h. lber-int.h now only included by those files needing to mess with the sockbuf. Used ber_* functions/macros to access sockbuf internals whenever possible. Added version string if MKVERSION is not defined. (MKVERSION needs to be set under UNIX). Removed FD_SET unsigned lint slapd/tools Used EXEEXT to added ".exe" to routines. Need to define EXEEXT under UNIX. ldappasswd Added ldappasswd.dsp. Ported to NT. Used getpid() to seed rand(). nt_debug Minor cleanup. Added "portable.h" include and used <ac/*.h> where appropriate. Added const to char* format argument.
1999-05-19 09:12:33 +08:00
2003-03-05 09:37:56 +08:00
struct sockaddr;
LDAP_F( int )
ldap_pvt_get_hname LDAP_P((
const struct sockaddr * sa,
int salen,
char *name,
int namelen,
char **herr ));
/* charray.c */
LDAP_F( int )
ldap_charray_add LDAP_P((
char ***a,
const char *s ));
LDAP_F( int )
ldap_charray_merge LDAP_P((
char ***a,
char **s ));
LDAP_F( void )
ldap_charray_free LDAP_P(( char **a ));
LDAP_F( int )
ldap_charray_inlist LDAP_P((
char **a,
const char *s ));
LDAP_F( char ** )
ldap_charray_dup LDAP_P(( char **a ));
LDAP_F( char ** )
ldap_str2charray LDAP_P((
const char *str,
const char *brkstr ));
LDAP_F( char * )
ldap_charray2str LDAP_P((
char **array, const char* sep ));
/* getdn.c */
#ifdef LDAP_AVA_NULL /* in ldap.h */
LDAP_F( void ) ldap_rdnfree_x LDAP_P(( LDAPRDN rdn, void *ctx ));
LDAP_F( void ) ldap_dnfree_x LDAP_P(( LDAPDN dn, void *ctx ));
LDAP_F( int ) ldap_bv2dn_x LDAP_P((
struct berval *bv, LDAPDN *dn, unsigned flags, void *ctx ));
LDAP_F( int ) ldap_dn2bv_x LDAP_P((
LDAPDN dn, struct berval *bv, unsigned flags, void *ctx ));
LDAP_F( int ) ldap_bv2rdn_x LDAP_P((
struct berval *, LDAPRDN *, char **, unsigned flags, void *ctx ));
LDAP_F( int ) ldap_rdn2bv_x LDAP_P((
LDAPRDN rdn, struct berval *bv, unsigned flags, void *ctx ));
#endif /* LDAP_AVA_NULL */
/* url.c */
LDAP_F (void) ldap_pvt_hex_unescape LDAP_P(( char *s ));
/*
* these macros assume 'x' is an ASCII x
* and assume the "C" locale
*/
#define LDAP_ASCII(c) (!((c) & 0x80))
2000-06-30 10:19:39 +08:00
#define LDAP_SPACE(c) ((c) == ' ' || (c) == '\t' || (c) == '\n')
#define LDAP_DIGIT(c) ((c) >= '0' && (c) <= '9')
#define LDAP_LOWER(c) ((c) >= 'a' && (c) <= 'z')
#define LDAP_UPPER(c) ((c) >= 'A' && (c) <= 'Z')
#define LDAP_ALPHA(c) (LDAP_LOWER(c) || LDAP_UPPER(c))
#define LDAP_ALNUM(c) (LDAP_ALPHA(c) || LDAP_DIGIT(c))
#define LDAP_LDH(c) (LDAP_ALNUM(c) || (c) == '-')
#define LDAP_HEXLOWER(c) ((c) >= 'a' && (c) <= 'f')
#define LDAP_HEXUPPER(c) ((c) >= 'A' && (c) <= 'F')
#define LDAP_HEX(c) (LDAP_DIGIT(c) || \
LDAP_HEXLOWER(c) || LDAP_HEXUPPER(c))
2002-09-04 10:14:12 +08:00
/* controls.c */
2007-08-25 06:42:41 +08:00
struct ldapcontrol;
LDAP_F (int)
ldap_pvt_put_control LDAP_P((
const struct ldapcontrol *c,
BerElement *ber ));
LDAP_F (int) ldap_pvt_get_controls LDAP_P((
BerElement *be,
struct ldapcontrol ***ctrlsp));
2002-09-04 10:14:12 +08:00
#ifdef HAVE_CYRUS_SASL
/* cyrus.c */
struct sasl_security_properties; /* avoid pulling in <sasl.h> */
LDAP_F (int) ldap_pvt_sasl_secprops LDAP_P((
const char *in,
struct sasl_security_properties *secprops ));
LDAP_F (void) ldap_pvt_sasl_secprops_unparse LDAP_P((
struct sasl_security_properties *secprops,
struct berval *out ));
LDAP_F (void *) ldap_pvt_sasl_mutex_new LDAP_P((void));
LDAP_F (int) ldap_pvt_sasl_mutex_lock LDAP_P((void *mutex));
LDAP_F (int) ldap_pvt_sasl_mutex_unlock LDAP_P((void *mutex));
LDAP_F (void) ldap_pvt_sasl_mutex_dispose LDAP_P((void *mutex));
#endif /* HAVE_CYRUS_SASL */
struct sockbuf; /* avoid pulling in <lber.h> */
LDAP_F (int) ldap_pvt_sasl_install LDAP_P(( struct sockbuf *, void * ));
2003-05-01 06:41:37 +08:00
LDAP_F (void) ldap_pvt_sasl_remove LDAP_P(( struct sockbuf * ));
/*
* SASL encryption support for LBER Sockbufs
*/
struct sb_sasl_generic_data;
struct sb_sasl_generic_ops {
void (*init)(struct sb_sasl_generic_data *p,
ber_len_t *min_send,
ber_len_t *max_send,
ber_len_t *max_recv);
ber_int_t (*encode)(struct sb_sasl_generic_data *p,
unsigned char *buf,
ber_len_t len,
Sockbuf_Buf *dst);
ber_int_t (*decode)(struct sb_sasl_generic_data *p,
const Sockbuf_Buf *src,
Sockbuf_Buf *dst);
void (*reset_buf)(struct sb_sasl_generic_data *p,
Sockbuf_Buf *buf);
void (*fini)(struct sb_sasl_generic_data *p);
};
struct sb_sasl_generic_install {
const struct sb_sasl_generic_ops *ops;
void *ops_private;
};
struct sb_sasl_generic_data {
const struct sb_sasl_generic_ops *ops;
void *ops_private;
Sockbuf_IO_Desc *sbiod;
ber_len_t min_send;
ber_len_t max_send;
ber_len_t max_recv;
Sockbuf_Buf sec_buf_in;
Sockbuf_Buf buf_in;
Sockbuf_Buf buf_out;
};
#ifndef LDAP_PVT_SASL_LOCAL_SSF
#define LDAP_PVT_SASL_LOCAL_SSF 71 /* SSF for Unix Domain Sockets */
#endif /* ! LDAP_PVT_SASL_LOCAL_SSF */
2000-09-22 09:40:57 +08:00
struct ldap;
2003-04-25 07:15:59 +08:00
struct ldapmsg;
2006-10-29 02:13:12 +08:00
/* abandon */
LDAP_F ( int ) ldap_pvt_discard LDAP_P((
struct ldap *ld, ber_int_t msgid ));
2000-09-22 09:40:57 +08:00
/* messages.c */
LDAP_F( BerElement * )
ldap_get_message_ber LDAP_P((
struct ldapmsg * ));
2006-10-29 02:13:12 +08:00
/* open */
LDAP_F (int) ldap_open_internal_connection LDAP_P((
struct ldap **ldp, ber_socket_t *fdp ));
2007-02-12 12:20:24 +08:00
LDAP_F (int) ldap_init_fd LDAP_P((
ber_socket_t fd, int proto, LDAP_CONST char *url, struct ldap **ldp ));
2006-10-29 02:13:12 +08:00
/* search.c */
LDAP_F( int ) ldap_pvt_put_filter LDAP_P((
BerElement *ber,
const char *str ));
LDAP_F( char * )
ldap_pvt_find_wildcard LDAP_P(( const char *s ));
LDAP_F( ber_slen_t )
ldap_pvt_filter_value_unescape LDAP_P(( char *filter ));
LDAP_F( ber_len_t )
ldap_bv2escaped_filter_value_len LDAP_P(( struct berval *in ));
LDAP_F( int )
ldap_bv2escaped_filter_value_x LDAP_P(( struct berval *in, struct berval *out,
int inplace, void *ctx ));
/* string.c */
LDAP_F( char * )
ldap_pvt_str2upper LDAP_P(( char *str ));
LDAP_F( char * )
ldap_pvt_str2lower LDAP_P(( char *str ));
LDAP_F( struct berval * )
ldap_pvt_str2upperbv LDAP_P(( char *str, struct berval *bv ));
LDAP_F( struct berval * )
ldap_pvt_str2lowerbv LDAP_P(( char *str, struct berval *bv ));
1999-11-06 13:02:52 +08:00
/* tls.c */
2002-04-05 14:48:03 +08:00
LDAP_F (int) ldap_int_tls_config LDAP_P(( struct ldap *ld,
int option, const char *arg ));
LDAP_F (int) ldap_pvt_tls_get_option LDAP_P(( struct ldap *ld,
int option, void *arg ));
LDAP_F (int) ldap_pvt_tls_set_option LDAP_P(( struct ldap *ld,
int option, void *arg ));
LDAP_F (void) ldap_pvt_tls_destroy LDAP_P(( void ));
LDAP_F (int) ldap_pvt_tls_init LDAP_P(( void ));
LDAP_F (int) ldap_pvt_tls_init_def_ctx LDAP_P(( int is_server ));
LDAP_F (int) ldap_pvt_tls_accept LDAP_P(( Sockbuf *sb, void *ctx_arg ));
LDAP_F (int) ldap_pvt_tls_inplace LDAP_P(( Sockbuf *sb ));
2002-04-05 14:48:03 +08:00
LDAP_F (void *) ldap_pvt_tls_sb_ctx LDAP_P(( Sockbuf *sb ));
LDAP_F (void) ldap_pvt_tls_ctx_free LDAP_P(( void * ));
typedef int LDAPDN_rewrite_dummy LDAP_P (( void *dn, unsigned flags ));
typedef int (LDAP_TLS_CONNECT_CB) LDAP_P (( struct ldap *ld, void *ssl,
void *ctx, void *arg ));
LDAP_F (int) ldap_pvt_tls_get_my_dn LDAP_P(( void *ctx, struct berval *dn,
LDAPDN_rewrite_dummy *func, unsigned flags ));
LDAP_F (int) ldap_pvt_tls_get_peer_dn LDAP_P(( void *ctx, struct berval *dn,
LDAPDN_rewrite_dummy *func, unsigned flags ));
LDAP_F (int) ldap_pvt_tls_get_strength LDAP_P(( void *ctx ));
1999-01-26 08:04:01 +08:00
LDAP_END_DECL
/*
* Multiple precision stuff
*
* May use OpenSSL's BIGNUM if built with TLS,
2006-02-09 15:48:19 +08:00
* or GNU's multiple precision library. But if
* long long is available, that's big enough
* and much more efficient.
*
* If none is available, unsigned long data is used.
*/
2006-02-09 15:48:19 +08:00
LDAP_BEGIN_DECL
#ifdef USE_MP_BIGNUM
/*
* Use OpenSSL's BIGNUM
*/
#include <openssl/crypto.h>
#include <openssl/bn.h>
2006-02-10 16:21:02 +08:00
typedef BIGNUM* ldap_pvt_mp_t;
2005-11-07 07:27:09 +08:00
#define LDAP_PVT_MP_INIT (NULL)
#define ldap_pvt_mp_init(mp) \
2006-02-10 16:21:02 +08:00
do { (mp) = BN_new(); } while (0)
2000-09-08 07:31:59 +08:00
/* FIXME: we rely on mpr being initialized */
#define ldap_pvt_mp_init_set(mpr,mpv) \
do { ldap_pvt_mp_init((mpr)); BN_add((mpr), (mpr), (mpv)); } while (0)
#define ldap_pvt_mp_add(mpr,mpv) \
BN_add((mpr), (mpr), (mpv))
#define ldap_pvt_mp_add_ulong(mp,v) \
BN_add_word((mp), (v))
#define ldap_pvt_mp_clear(mp) \
do { BN_free((mp)); (mp) = 0; } while (0)
#elif defined(USE_MP_GMP)
/*
* Use GNU's multiple precision library
*/
#include <gmp.h>
typedef mpz_t ldap_pvt_mp_t;
2005-11-07 07:27:09 +08:00
#define LDAP_PVT_MP_INIT { 0 }
#define ldap_pvt_mp_init(mp) \
mpz_init((mp))
#define ldap_pvt_mp_init_set(mpr,mpv) \
mpz_init_set((mpr), (mpv))
#define ldap_pvt_mp_add(mpr,mpv) \
mpz_add((mpr), (mpr), (mpv))
#define ldap_pvt_mp_add_ulong(mp,v) \
mpz_add_ui((mp), (mp), (v))
#define ldap_pvt_mp_clear(mp) \
mpz_clear((mp))
2006-02-10 16:21:02 +08:00
#else
/*
2006-02-10 16:21:02 +08:00
* Use unsigned long long
*/
#ifdef USE_MP_LONG_LONG
typedef unsigned long long ldap_pvt_mp_t;
2005-11-07 07:27:09 +08:00
#define LDAP_PVT_MP_INIT (0LL)
#elif defined(USE_MP_LONG)
typedef unsigned long ldap_pvt_mp_t;
2005-11-07 07:27:09 +08:00
#define LDAP_PVT_MP_INIT (0L)
#elif defined(HAVE_LONG_LONG)
2006-02-10 16:21:02 +08:00
typedef unsigned long long ldap_pvt_mp_t;
#define LDAP_PVT_MP_INIT (0LL)
#else
typedef unsigned long ldap_pvt_mp_t;
#define LDAP_PVT_MP_INIT (0L)
#endif
#define ldap_pvt_mp_init(mp) \
2006-02-10 16:21:02 +08:00
do { (mp) = 0; } while (0)
#define ldap_pvt_mp_init_set(mpr,mpv) \
2006-02-10 16:21:02 +08:00
do { (mpr) = (mpv); } while (0)
#define ldap_pvt_mp_add(mpr,mpv) \
2006-02-10 16:21:02 +08:00
do { (mpr) += (mpv); } while (0)
#define ldap_pvt_mp_add_ulong(mp,v) \
2006-02-10 16:21:02 +08:00
do { (mp) += (v); } while (0)
#define ldap_pvt_mp_clear(mp) \
2006-02-10 16:21:02 +08:00
do { (mp) = 0; } while (0)
2006-02-10 16:21:02 +08:00
#endif /* MP */
#include "ldap_pvt_uc.h"
LDAP_END_DECL
LDAP_BEGIN_DECL
#include <limits.h> /* get CHAR_BIT */
/* Buffer space for sign, decimal digits and \0. Note: log10(2) < 146/485. */
#define LDAP_PVT_INTTYPE_CHARS(type) (((sizeof(type)*CHAR_BIT-1)*146)/485 + 3)
LDAP_END_DECL
2006-02-10 16:21:02 +08:00
#endif /* _LDAP_PVT_H */