1*0Sstevel@tonic-gate /* 2*0Sstevel@tonic-gate * Copyright 1995-2002 Sun Microsystems, Inc. All rights reserved. 3*0Sstevel@tonic-gate * Use is subject to license terms. 4*0Sstevel@tonic-gate */ 5*0Sstevel@tonic-gate 6*0Sstevel@tonic-gate #pragma ident "%Z%%M% %I% %E% SMI" 7*0Sstevel@tonic-gate 8*0Sstevel@tonic-gate /* 9*0Sstevel@tonic-gate * Copyright (c) 1995 Regents of the University of Michigan. 10*0Sstevel@tonic-gate * All rights reserved. 11*0Sstevel@tonic-gate * 12*0Sstevel@tonic-gate * ldap-int.h - defines & prototypes internal to the LDAP library 13*0Sstevel@tonic-gate */ 14*0Sstevel@tonic-gate 15*0Sstevel@tonic-gate #include <stdlib.h> /* rri */ 16*0Sstevel@tonic-gate #include <pthread.h> /* rri */ 17*0Sstevel@tonic-gate #include <netinet/in.h> 18*0Sstevel@tonic-gate 19*0Sstevel@tonic-gate #define LDAP_URL_PREFIX "ldap://" 20*0Sstevel@tonic-gate #define LDAP_URL_PREFIX_LEN 7 21*0Sstevel@tonic-gate #define LDAP_URL_URLCOLON "URL:" 22*0Sstevel@tonic-gate #define LDAP_URL_URLCOLON_LEN 4 23*0Sstevel@tonic-gate 24*0Sstevel@tonic-gate #ifdef LDAP_REFERRALS 25*0Sstevel@tonic-gate #define LDAP_REF_STR "Referral:\n" 26*0Sstevel@tonic-gate #define LDAP_REF_STR_LEN 10 27*0Sstevel@tonic-gate #define LDAP_LDAP_REF_STR LDAP_URL_PREFIX 28*0Sstevel@tonic-gate #define LDAP_LDAP_REF_STR_LEN LDAP_URL_PREFIX_LEN 29*0Sstevel@tonic-gate #ifdef LDAP_DNS 30*0Sstevel@tonic-gate #define LDAP_DX_REF_STR "dx://" 31*0Sstevel@tonic-gate #define LDAP_DX_REF_STR_LEN 5 32*0Sstevel@tonic-gate #endif /* LDAP_DNS */ 33*0Sstevel@tonic-gate #endif /* LDAP_REFERRALS */ 34*0Sstevel@tonic-gate 35*0Sstevel@tonic-gate 36*0Sstevel@tonic-gate /* 37*0Sstevel@tonic-gate * in cache.c 38*0Sstevel@tonic-gate */ 39*0Sstevel@tonic-gate #ifdef NEEDPROTOS 40*0Sstevel@tonic-gate void add_request_to_cache( LDAP *ld, unsigned int msgtype, 41*0Sstevel@tonic-gate BerElement *request ); 42*0Sstevel@tonic-gate void add_result_to_cache( LDAP *ld, LDAPMessage *result ); 43*0Sstevel@tonic-gate int check_cache( LDAP *ld, unsigned int msgtype, BerElement *request ); 44*0Sstevel@tonic-gate #else /* NEEDPROTOS */ 45*0Sstevel@tonic-gate void add_request_to_cache(); 46*0Sstevel@tonic-gate void add_result_to_cache(); 47*0Sstevel@tonic-gate int check_cache(); 48*0Sstevel@tonic-gate #endif /* NEEDPROTOS */ 49*0Sstevel@tonic-gate 50*0Sstevel@tonic-gate 51*0Sstevel@tonic-gate #ifdef KERBEROS 52*0Sstevel@tonic-gate /* 53*0Sstevel@tonic-gate * in kerberos.c 54*0Sstevel@tonic-gate */ 55*0Sstevel@tonic-gate #ifdef NEEDPROTOS 56*0Sstevel@tonic-gate char *get_kerberosv4_credentials( LDAP *ld, char *who, char *service, 57*0Sstevel@tonic-gate int *len ); 58*0Sstevel@tonic-gate #else /* NEEDPROTOS */ 59*0Sstevel@tonic-gate char *get_kerberosv4_credentials(); 60*0Sstevel@tonic-gate #endif /* NEEDPROTOS */ 61*0Sstevel@tonic-gate 62*0Sstevel@tonic-gate #endif /* KERBEROS */ 63*0Sstevel@tonic-gate 64*0Sstevel@tonic-gate /* 65*0Sstevel@tonic-gate * in notif.c 66*0Sstevel@tonic-gate */ 67*0Sstevel@tonic-gate int ldap_insert_notif(LDAP *ld, LDAPMessage *notif); 68*0Sstevel@tonic-gate int ldap_add_notif(LDAP *ld, LDAPMessage *notif); 69*0Sstevel@tonic-gate 70*0Sstevel@tonic-gate 71*0Sstevel@tonic-gate /* 72*0Sstevel@tonic-gate * in open.c 73*0Sstevel@tonic-gate */ 74*0Sstevel@tonic-gate int ldap_thr_index(); /* rri */ 75*0Sstevel@tonic-gate #ifdef NEEDPROTOS 76*0Sstevel@tonic-gate int open_default_ldap_connection(LDAP *ld); 77*0Sstevel@tonic-gate int open_ldap_connection( LDAP *ld, Sockbuf *sb, char *host, int defport, 78*0Sstevel@tonic-gate char **krbinstancep, int async ); 79*0Sstevel@tonic-gate #else /* NEEDPROTOS */ 80*0Sstevel@tonic-gate int open_default_ldap_connection(); 81*0Sstevel@tonic-gate int open_ldap_connection(); 82*0Sstevel@tonic-gate #endif /* NEEDPROTOS */ 83*0Sstevel@tonic-gate 84*0Sstevel@tonic-gate /* 85*0Sstevel@tonic-gate * in options.c 86*0Sstevel@tonic-gate */ 87*0Sstevel@tonic-gate 88*0Sstevel@tonic-gate int ldap_get_option (LDAP *ld, int option, void *outvalue); 89*0Sstevel@tonic-gate 90*0Sstevel@tonic-gate /* 91*0Sstevel@tonic-gate * in os-ip.c 92*0Sstevel@tonic-gate */ 93*0Sstevel@tonic-gate void close_ldap_connection( Sockbuf *sb ); /* rri */ 94*0Sstevel@tonic-gate #ifdef NEEDPROTOS 95*0Sstevel@tonic-gate int connect_to_host(Sockbuf *sb, char *host, in_addr_t address, int port, 96*0Sstevel@tonic-gate int async, int bindTimeout); 97*0Sstevel@tonic-gate void close_connection( Sockbuf *sb ); 98*0Sstevel@tonic-gate #else /* NEEDPROTOS */ 99*0Sstevel@tonic-gate int connect_to_host(); 100*0Sstevel@tonic-gate void close_connection(); 101*0Sstevel@tonic-gate #endif /* NEEDPROTOS */ 102*0Sstevel@tonic-gate 103*0Sstevel@tonic-gate #ifdef KERBEROS 104*0Sstevel@tonic-gate #ifdef NEEDPROTOS 105*0Sstevel@tonic-gate char *host_connected_to( Sockbuf *sb ); 106*0Sstevel@tonic-gate #else /* NEEDPROTOS */ 107*0Sstevel@tonic-gate char *host_connected_to(); 108*0Sstevel@tonic-gate #endif /* NEEDPROTOS */ 109*0Sstevel@tonic-gate #endif /* KERBEROS */ 110*0Sstevel@tonic-gate 111*0Sstevel@tonic-gate #ifdef LDAP_REFERRALS 112*0Sstevel@tonic-gate #ifdef NEEDPROTOS 113*0Sstevel@tonic-gate int do_ldap_select( LDAP *ld, struct timeval *timeout ); 114*0Sstevel@tonic-gate void *new_select_info( void ); 115*0Sstevel@tonic-gate void free_select_info( void *sip ); 116*0Sstevel@tonic-gate void mark_select_write( LDAP *ld, Sockbuf *sb ); 117*0Sstevel@tonic-gate void mark_select_read( LDAP *ld, Sockbuf *sb ); 118*0Sstevel@tonic-gate void mark_select_clear( LDAP *ld, Sockbuf *sb ); 119*0Sstevel@tonic-gate long is_read_ready( LDAP *ld, Sockbuf *sb ); 120*0Sstevel@tonic-gate long is_write_ready( LDAP *ld, Sockbuf *sb ); 121*0Sstevel@tonic-gate #else /* NEEDPROTOS */ 122*0Sstevel@tonic-gate int do_ldap_select(); 123*0Sstevel@tonic-gate void *new_select_info(); 124*0Sstevel@tonic-gate void free_select_info(); 125*0Sstevel@tonic-gate void mark_select_write(); 126*0Sstevel@tonic-gate void mark_select_read(); 127*0Sstevel@tonic-gate void mark_select_clear(); 128*0Sstevel@tonic-gate long is_read_ready(); 129*0Sstevel@tonic-gate long is_write_ready(); 130*0Sstevel@tonic-gate #endif /* NEEDPROTOS */ 131*0Sstevel@tonic-gate #endif /* LDAP_REFERRALS */ 132*0Sstevel@tonic-gate 133*0Sstevel@tonic-gate /* 134*0Sstevel@tonic-gate * in regex.c (rri) 135*0Sstevel@tonic-gate */ 136*0Sstevel@tonic-gate int re_exec( char *lp ); 137*0Sstevel@tonic-gate 138*0Sstevel@tonic-gate /* 139*0Sstevel@tonic-gate * in request.c 140*0Sstevel@tonic-gate */ 141*0Sstevel@tonic-gate #ifdef NEEDPROTOS 142*0Sstevel@tonic-gate int send_initial_request( LDAP *ld, unsigned int msgtype, 143*0Sstevel@tonic-gate char *dn, BerElement *ber ); 144*0Sstevel@tonic-gate BerElement *alloc_ber_with_options( LDAP *ld ); 145*0Sstevel@tonic-gate void set_ber_options( LDAP *ld, BerElement *ber ); 146*0Sstevel@tonic-gate #else /* NEEDPROTOS */ 147*0Sstevel@tonic-gate int send_initial_request(); 148*0Sstevel@tonic-gate BerElement *alloc_ber_with_options(); 149*0Sstevel@tonic-gate void set_ber_options(); 150*0Sstevel@tonic-gate #endif /* NEEDPROTOS */ 151*0Sstevel@tonic-gate 152*0Sstevel@tonic-gate #if defined( LDAP_REFERRALS ) || defined( LDAP_DNS ) 153*0Sstevel@tonic-gate #ifdef NEEDPROTOS 154*0Sstevel@tonic-gate int send_server_request( LDAP *ld, BerElement *ber, int msgid, 155*0Sstevel@tonic-gate LDAPRequest *parentreq, LDAPServer *srvlist, LDAPConn *lc, 156*0Sstevel@tonic-gate int bind ); 157*0Sstevel@tonic-gate LDAPConn *new_connection( LDAP *ld, LDAPServer **srvlistp, int use_ldsb, 158*0Sstevel@tonic-gate int connect, int bind ); 159*0Sstevel@tonic-gate LDAPRequest *find_request_by_msgid( LDAP *ld, int msgid ); 160*0Sstevel@tonic-gate void free_request( LDAP *ld, LDAPRequest *lr ); 161*0Sstevel@tonic-gate void free_connection( LDAP *ld, LDAPConn *lc, int force, int unbind ); 162*0Sstevel@tonic-gate void dump_connection( LDAP *ld, LDAPConn *lconns, int all ); 163*0Sstevel@tonic-gate void dump_requests_and_responses( LDAP *ld ); 164*0Sstevel@tonic-gate #else /* NEEDPROTOS */ 165*0Sstevel@tonic-gate int send_server_request(); 166*0Sstevel@tonic-gate LDAPConn *new_connection(); 167*0Sstevel@tonic-gate LDAPRequest *find_request_by_msgid(); 168*0Sstevel@tonic-gate void free_request(); 169*0Sstevel@tonic-gate void free_connection(); 170*0Sstevel@tonic-gate void dump_connection(); 171*0Sstevel@tonic-gate void dump_requests_and_responses(); 172*0Sstevel@tonic-gate #endif /* NEEDPROTOS */ 173*0Sstevel@tonic-gate #endif /* LDAP_REFERRALS || LDAP_DNS */ 174*0Sstevel@tonic-gate 175*0Sstevel@tonic-gate #ifdef LDAP_REFERRALS 176*0Sstevel@tonic-gate #ifdef NEEDPROTOS 177*0Sstevel@tonic-gate int chase_referrals( LDAP *ld, LDAPRequest *lr, char **refs, int *count, int samerequest ); 178*0Sstevel@tonic-gate char ** ldap_errormsg2referrals(char *errmsg); 179*0Sstevel@tonic-gate char *ldap_referral2error_msg(char ** refs); 180*0Sstevel@tonic-gate int append_referral( LDAP *ld, char **referralsp, char *s ); 181*0Sstevel@tonic-gate #else /* NEEDPROTOS */ 182*0Sstevel@tonic-gate int chase_referrals(); 183*0Sstevel@tonic-gate char ** ldap_errormsg2referrals(); 184*0Sstevel@tonic-gate char *ldap_referral2error_msg(); 185*0Sstevel@tonic-gate int append_referral(); 186*0Sstevel@tonic-gate #endif /* NEEDPROTOS */ 187*0Sstevel@tonic-gate #endif /* LDAP_REFERRALS */ 188*0Sstevel@tonic-gate 189*0Sstevel@tonic-gate void nsldapi_connection_lost_nolock( LDAP *ld, Sockbuf *sb ); 190*0Sstevel@tonic-gate 191*0Sstevel@tonic-gate /* 192*0Sstevel@tonic-gate * in search.c 193*0Sstevel@tonic-gate */ 194*0Sstevel@tonic-gate #ifdef NEEDPROTOS 195*0Sstevel@tonic-gate BerElement *ldap_build_search_req( LDAP *ld, char *base, int scope, 196*0Sstevel@tonic-gate char *filter, char **attrs, int attrsonly, LDAPControl ** serverctrls, 197*0Sstevel@tonic-gate struct timeval *timeoutp, int sizelimit ); 198*0Sstevel@tonic-gate #else /* NEEDPROTOS */ 199*0Sstevel@tonic-gate BerElement *ldap_build_search_req(); 200*0Sstevel@tonic-gate #endif /* NEEDPROTOS */ 201*0Sstevel@tonic-gate 202*0Sstevel@tonic-gate static int put_extensible_filter( BerElement *ber, char *type, char *val ); 203*0Sstevel@tonic-gate 204*0Sstevel@tonic-gate /* 205*0Sstevel@tonic-gate * in unbind.c 206*0Sstevel@tonic-gate */ 207*0Sstevel@tonic-gate #ifdef NEEDPROTOS 208*0Sstevel@tonic-gate int ldap_ld_free( LDAP *ld, int close ); 209*0Sstevel@tonic-gate int send_unbind( LDAP *ld, Sockbuf *sb ); 210*0Sstevel@tonic-gate #else /* NEEDPROTOS */ 211*0Sstevel@tonic-gate int ldap_ld_free(); 212*0Sstevel@tonic-gate int send_unbind(); 213*0Sstevel@tonic-gate #endif /* NEEDPROTOS */ 214*0Sstevel@tonic-gate 215*0Sstevel@tonic-gate 216*0Sstevel@tonic-gate #ifdef LDAP_DNS 217*0Sstevel@tonic-gate /* 218*0Sstevel@tonic-gate * in getdxbyname.c 219*0Sstevel@tonic-gate */ 220*0Sstevel@tonic-gate #ifdef NEEDPROTOS 221*0Sstevel@tonic-gate char **getdxbyname( char *domain ); 222*0Sstevel@tonic-gate #else /* NEEDPROTOS */ 223*0Sstevel@tonic-gate char **getdxbyname(); 224*0Sstevel@tonic-gate #endif /* NEEDPROTOS */ 225*0Sstevel@tonic-gate #endif /* LDAP_DNS */ 226*0Sstevel@tonic-gate 227*0Sstevel@tonic-gate /* 228*0Sstevel@tonic-gate * abandon.c 229*0Sstevel@tonic-gate */ 230*0Sstevel@tonic-gate #ifdef NEEDPROTOS 231*0Sstevel@tonic-gate BerElement * ldap_build_abandon_req( LDAP *ld, int msgid, LDAPControl ** serverctrls); 232*0Sstevel@tonic-gate #else 233*0Sstevel@tonic-gate BerElement * ldap_build_abandon_req(); 234*0Sstevel@tonic-gate #endif 235*0Sstevel@tonic-gate 236*0Sstevel@tonic-gate /* add.c */ 237*0Sstevel@tonic-gate #ifdef NEEDPROTOS 238*0Sstevel@tonic-gate BerElement * ldap_build_add_req(LDAP *ld, char *dn, LDAPMod **attrs, LDAPControl ** serverctrls); 239*0Sstevel@tonic-gate #else 240*0Sstevel@tonic-gate BerElement * ldap_build_add_req(); 241*0Sstevel@tonic-gate #endif 242*0Sstevel@tonic-gate 243*0Sstevel@tonic-gate /* 244*0Sstevel@tonic-gate * compare.c 245*0Sstevel@tonic-gate */ 246*0Sstevel@tonic-gate #ifdef NEEDPROTOS 247*0Sstevel@tonic-gate BerElement * ldap_build_compare_req(LDAP *ld, char *dn, char *attr, struct berval *bvalue, LDAPControl **serverctrls); 248*0Sstevel@tonic-gate #else 249*0Sstevel@tonic-gate BerElement * ldap_build_compare_req(); 250*0Sstevel@tonic-gate #endif 251*0Sstevel@tonic-gate 252*0Sstevel@tonic-gate /* 253*0Sstevel@tonic-gate * delete.c 254*0Sstevel@tonic-gate */ 255*0Sstevel@tonic-gate #ifdef NEEDPROTOS 256*0Sstevel@tonic-gate BerElement * ldap_build_delete_req(LDAP *ld, char *dn, LDAPControl **serverctrls); 257*0Sstevel@tonic-gate #else 258*0Sstevel@tonic-gate BerElement * ldap_build_delete_req(); 259*0Sstevel@tonic-gate #endif 260*0Sstevel@tonic-gate 261*0Sstevel@tonic-gate /* 262*0Sstevel@tonic-gate * extop.c 263*0Sstevel@tonic-gate */ 264*0Sstevel@tonic-gate #ifdef NEEDPROTOS 265*0Sstevel@tonic-gate BerElement * ldap_build_extended_operation_req(LDAP *ld, char *exoid, struct berval *exdata, LDAPControl ** serverctrls); 266*0Sstevel@tonic-gate #else 267*0Sstevel@tonic-gate BerElement * ldap_build_extended_operation_req(); 268*0Sstevel@tonic-gate #endif 269*0Sstevel@tonic-gate 270*0Sstevel@tonic-gate /* 271*0Sstevel@tonic-gate * modify.c 272*0Sstevel@tonic-gate */ 273*0Sstevel@tonic-gate #ifdef NEEDPROTOS 274*0Sstevel@tonic-gate BerElement * ldap_build_modify_req(LDAP *ld, char *dn, LDAPMod ** mods, LDAPControl **serverctrls); 275*0Sstevel@tonic-gate #else 276*0Sstevel@tonic-gate BerElement * ldap_build_modify_req(); 277*0Sstevel@tonic-gate #endif 278*0Sstevel@tonic-gate 279*0Sstevel@tonic-gate /* 280*0Sstevel@tonic-gate * rename.c 281*0Sstevel@tonic-gate */ 282*0Sstevel@tonic-gate #ifdef NEEDPROTOS 283*0Sstevel@tonic-gate BerElement * ldap_build_rename_req ( LDAP *ld, char *dn, char *newrdn, char *newparent, int deleteoldrdn, LDAPControl **serverctrls); 284*0Sstevel@tonic-gate #else 285*0Sstevel@tonic-gate BerElement * ldap_build_rename_req (); 286*0Sstevel@tonic-gate #endif 287*0Sstevel@tonic-gate 288*0Sstevel@tonic-gate /* 289*0Sstevel@tonic-gate * saslbind.c 290*0Sstevel@tonic-gate */ 291*0Sstevel@tonic-gate #ifdef NEEDPROTOS 292*0Sstevel@tonic-gate BerElement * ldap_build_sasl_bind_req( LDAP *ld, char *dn, char *mechanism, struct berval *creds, LDAPControl ** serverctrls); 293*0Sstevel@tonic-gate #else 294*0Sstevel@tonic-gate BerElement * ldap_build_sasl_bind_req(); 295*0Sstevel@tonic-gate #endif 296*0Sstevel@tonic-gate /* 297*0Sstevel@tonic-gate * sbind.c 298*0Sstevel@tonic-gate */ 299*0Sstevel@tonic-gate #ifdef NEEDPROTOS 300*0Sstevel@tonic-gate BerElement * ldap_build_simple_bind_req(LDAP *ld, char *dn, char *passwd, LDAPControl **serverctrls); 301*0Sstevel@tonic-gate #else 302*0Sstevel@tonic-gate BerElement * ldap_build_simple_bind_req(); 303*0Sstevel@tonic-gate #endif 304*0Sstevel@tonic-gate 305*0Sstevel@tonic-gate /* 306*0Sstevel@tonic-gate * utils.c 307*0Sstevel@tonic-gate */ 308*0Sstevel@tonic-gate 309*0Sstevel@tonic-gate #ifdef NEEDPROTOS 310*0Sstevel@tonic-gate void free_strarray(char **sap); 311*0Sstevel@tonic-gate #else 312*0Sstevel@tonic-gate void free_strarray(); 313*0Sstevel@tonic-gate #endif 314*0Sstevel@tonic-gate 315*0Sstevel@tonic-gate /* 316*0Sstevel@tonic-gate * Controls.c 317*0Sstevel@tonic-gate */ 318*0Sstevel@tonic-gate #ifdef NEEDPROTOS 319*0Sstevel@tonic-gate LDAPControl * ldap_control_dup(LDAPControl *ctrl); 320*0Sstevel@tonic-gate LDAPControl ** ldap_controls_dup(LDAPControl ** ctrls); 321*0Sstevel@tonic-gate int ldap_controls_code (BerElement *ber, LDAPControl **ctrls); 322*0Sstevel@tonic-gate LDAPControl ** ldap_controls_decode(BerElement *ber, int *errcode); 323*0Sstevel@tonic-gate int ldap_build_control(char *oid, BerElement *ber, int freeber, 324*0Sstevel@tonic-gate char iscritical, LDAPControl **ctrlp); 325*0Sstevel@tonic-gate #else 326*0Sstevel@tonic-gate LDAPControl * ldap_control_dup(); 327*0Sstevel@tonic-gate LDAPControl ** ldap_controls_dup(); 328*0Sstevel@tonic-gate int ldap_controls_code (); 329*0Sstevel@tonic-gate LDAPControl ** ldap_controls_decode(); 330*0Sstevel@tonic-gate int ldap_build_control(); 331*0Sstevel@tonic-gate #endif 332*0Sstevel@tonic-gate 333*0Sstevel@tonic-gate /* 334*0Sstevel@tonic-gate * ber/io.c 335*0Sstevel@tonic-gate */ 336*0Sstevel@tonic-gate #ifdef NEEDPROTOS 337*0Sstevel@tonic-gate int ber_flush(Sockbuf *sb, BerElement *ber, int freeit); 338*0Sstevel@tonic-gate unsigned int ber_get_next(Sockbuf *sb, unsigned int *len, BerElement *ber); 339*0Sstevel@tonic-gate #else 340*0Sstevel@tonic-gate int ber_flush(); 341*0Sstevel@tonic-gate unsigned int ber_get_next(); 342*0Sstevel@tonic-gate #endif 343*0Sstevel@tonic-gate 344