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