140266059SGregory Neil Shapiro /* 240266059SGregory Neil Shapiro * Copyright (c) 2001-2002 Sendmail, Inc. and its suppliers. 340266059SGregory Neil Shapiro * All rights reserved. 440266059SGregory Neil Shapiro * 540266059SGregory Neil Shapiro * By using this file, you agree to the terms and conditions set 640266059SGregory Neil Shapiro * forth in the LICENSE file which can be found at the top level of 740266059SGregory Neil Shapiro * the sendmail distribution. 840266059SGregory Neil Shapiro * 9605302a5SGregory Neil Shapiro * $Id: ldap.h,v 1.22 2002/03/05 02:17:26 ca Exp $ 1040266059SGregory Neil Shapiro */ 1140266059SGregory Neil Shapiro 1240266059SGregory Neil Shapiro #ifndef SM_LDAP_H 1340266059SGregory Neil Shapiro # define SM_LDAP_H 1440266059SGregory Neil Shapiro 1540266059SGregory Neil Shapiro # include <sm/conf.h> 1640266059SGregory Neil Shapiro # include <sm/rpool.h> 1740266059SGregory Neil Shapiro 18605302a5SGregory Neil Shapiro /* 19605302a5SGregory Neil Shapiro ** NOTE: These should be changed from LDAPMAP_* to SM_LDAP_* 20605302a5SGregory Neil Shapiro ** in the next major release (8.13) of sendmail. 21605302a5SGregory Neil Shapiro */ 22605302a5SGregory Neil Shapiro 2340266059SGregory Neil Shapiro # ifndef LDAPMAP_MAX_ATTR 2440266059SGregory Neil Shapiro # define LDAPMAP_MAX_ATTR 64 2540266059SGregory Neil Shapiro # endif /* ! LDAPMAP_MAX_ATTR */ 2640266059SGregory Neil Shapiro # ifndef LDAPMAP_MAX_FILTER 2740266059SGregory Neil Shapiro # define LDAPMAP_MAX_FILTER 1024 2840266059SGregory Neil Shapiro # endif /* ! LDAPMAP_MAX_FILTER */ 2940266059SGregory Neil Shapiro # ifndef LDAPMAP_MAX_PASSWD 3040266059SGregory Neil Shapiro # define LDAPMAP_MAX_PASSWD 256 3140266059SGregory Neil Shapiro # endif /* ! LDAPMAP_MAX_PASSWD */ 3240266059SGregory Neil Shapiro 3340266059SGregory Neil Shapiro # if LDAPMAP 3440266059SGregory Neil Shapiro 3540266059SGregory Neil Shapiro # if _FFR_LDAP_RECURSION 3640266059SGregory Neil Shapiro 3740266059SGregory Neil Shapiro /* Attribute types */ 38605302a5SGregory Neil Shapiro # define SM_LDAP_ATTR_NONE (-1) 39605302a5SGregory Neil Shapiro # define SM_LDAP_ATTR_OBJCLASS 0 40605302a5SGregory Neil Shapiro # define SM_LDAP_ATTR_NORMAL 1 41605302a5SGregory Neil Shapiro # define SM_LDAP_ATTR_DN 2 42605302a5SGregory Neil Shapiro # define SM_LDAP_ATTR_FILTER 3 43605302a5SGregory Neil Shapiro # define SM_LDAP_ATTR_URL 4 4440266059SGregory Neil Shapiro 4540266059SGregory Neil Shapiro /* sm_ldap_results() flags */ 4640266059SGregory Neil Shapiro # define SM_LDAP_SINGLEMATCH 0x0001 4740266059SGregory Neil Shapiro # define SM_LDAP_MATCHONLY 0x0002 48605302a5SGregory Neil Shapiro # define SM_LDAP_USE_ALLATTR 0x0004 49605302a5SGregory Neil Shapiro 5040266059SGregory Neil Shapiro # endif /* _FFR_LDAP_RECURSION */ 5140266059SGregory Neil Shapiro 5240266059SGregory Neil Shapiro struct sm_ldap_struct 5340266059SGregory Neil Shapiro { 5440266059SGregory Neil Shapiro /* needed for ldap_open or ldap_init */ 55605302a5SGregory Neil Shapiro char *ldap_target; 5640266059SGregory Neil Shapiro int ldap_port; 57605302a5SGregory Neil Shapiro # if _FFR_LDAP_URI 58605302a5SGregory Neil Shapiro bool ldap_uri; 59605302a5SGregory Neil Shapiro # endif /* _FFR_LDAP_URI */ 60605302a5SGregory Neil Shapiro # if _FFR_LDAP_SETVERSION 61605302a5SGregory Neil Shapiro int ldap_version; 62605302a5SGregory Neil Shapiro # endif /* _FFR_LDAP_SETVERSION */ 6340266059SGregory Neil Shapiro pid_t ldap_pid; 6440266059SGregory Neil Shapiro 6540266059SGregory Neil Shapiro /* options set in ld struct before ldap_bind_s */ 6640266059SGregory Neil Shapiro int ldap_deref; 6740266059SGregory Neil Shapiro time_t ldap_timelimit; 6840266059SGregory Neil Shapiro int ldap_sizelimit; 6940266059SGregory Neil Shapiro int ldap_options; 7040266059SGregory Neil Shapiro 7140266059SGregory Neil Shapiro /* args for ldap_bind_s */ 7240266059SGregory Neil Shapiro LDAP *ldap_ld; 7340266059SGregory Neil Shapiro char *ldap_binddn; 7440266059SGregory Neil Shapiro char *ldap_secret; 7540266059SGregory Neil Shapiro int ldap_method; 7640266059SGregory Neil Shapiro 7740266059SGregory Neil Shapiro /* args for ldap_search */ 7840266059SGregory Neil Shapiro char *ldap_base; 7940266059SGregory Neil Shapiro int ldap_scope; 8040266059SGregory Neil Shapiro char *ldap_filter; 8140266059SGregory Neil Shapiro char *ldap_attr[LDAPMAP_MAX_ATTR + 1]; 8240266059SGregory Neil Shapiro # if _FFR_LDAP_RECURSION 8340266059SGregory Neil Shapiro int ldap_attr_type[LDAPMAP_MAX_ATTR + 1]; 84605302a5SGregory Neil Shapiro char *ldap_attr_needobjclass[LDAPMAP_MAX_ATTR + 1]; 8540266059SGregory Neil Shapiro # endif /* _FFR_LDAP_RECURSION */ 8640266059SGregory Neil Shapiro bool ldap_attrsonly; 8740266059SGregory Neil Shapiro 8840266059SGregory Neil Shapiro /* args for ldap_result */ 8940266059SGregory Neil Shapiro struct timeval ldap_timeout; 9040266059SGregory Neil Shapiro LDAPMessage *ldap_res; 9140266059SGregory Neil Shapiro 9240266059SGregory Neil Shapiro /* ldapmap_lookup options */ 9340266059SGregory Neil Shapiro char ldap_attrsep; 9440266059SGregory Neil Shapiro 9540266059SGregory Neil Shapiro /* Linked list of maps sharing the same LDAP binding */ 9640266059SGregory Neil Shapiro void *ldap_next; 9740266059SGregory Neil Shapiro }; 9840266059SGregory Neil Shapiro 9940266059SGregory Neil Shapiro typedef struct sm_ldap_struct SM_LDAP_STRUCT; 10040266059SGregory Neil Shapiro 10140266059SGregory Neil Shapiro # if _FFR_LDAP_RECURSION 102605302a5SGregory Neil Shapiro struct sm_ldap_recurse_entry 10340266059SGregory Neil Shapiro { 10440266059SGregory Neil Shapiro char *lr_search; 10540266059SGregory Neil Shapiro int lr_type; 106605302a5SGregory Neil Shapiro bool lr_done; 10740266059SGregory Neil Shapiro }; 10840266059SGregory Neil Shapiro 109605302a5SGregory Neil Shapiro struct sm_ldap_recurse_list 110605302a5SGregory Neil Shapiro { 111605302a5SGregory Neil Shapiro int lr_size; 112605302a5SGregory Neil Shapiro int lr_cnt; 113605302a5SGregory Neil Shapiro struct sm_ldap_recurse_entry **lr_data; 114605302a5SGregory Neil Shapiro }; 115605302a5SGregory Neil Shapiro 116605302a5SGregory Neil Shapiro typedef struct sm_ldap_recurse_entry SM_LDAP_RECURSE_ENTRY; 11740266059SGregory Neil Shapiro typedef struct sm_ldap_recurse_list SM_LDAP_RECURSE_LIST; 11840266059SGregory Neil Shapiro # endif /* _FFR_LDAP_RECURSION */ 11940266059SGregory Neil Shapiro 12040266059SGregory Neil Shapiro /* functions */ 12140266059SGregory Neil Shapiro extern void sm_ldap_clear __P((SM_LDAP_STRUCT *)); 12240266059SGregory Neil Shapiro extern bool sm_ldap_start __P((char *, SM_LDAP_STRUCT *)); 12340266059SGregory Neil Shapiro extern int sm_ldap_search __P((SM_LDAP_STRUCT *, char *)); 12440266059SGregory Neil Shapiro # if _FFR_LDAP_RECURSION 125605302a5SGregory Neil Shapiro extern int sm_ldap_results __P((SM_LDAP_STRUCT *, int, int, int, 126605302a5SGregory Neil Shapiro SM_RPOOL_T *, char **, int *, int *, 12740266059SGregory Neil Shapiro SM_LDAP_RECURSE_LIST *)); 12840266059SGregory Neil Shapiro # endif /* _FFR_LDAP_RECURSION */ 12940266059SGregory Neil Shapiro extern void sm_ldap_setopts __P((LDAP *, SM_LDAP_STRUCT *)); 13040266059SGregory Neil Shapiro extern int sm_ldap_geterrno __P((LDAP *)); 13140266059SGregory Neil Shapiro extern void sm_ldap_close __P((SM_LDAP_STRUCT *)); 13240266059SGregory Neil Shapiro 133605302a5SGregory Neil Shapiro /* Portability defines */ 134605302a5SGregory Neil Shapiro # if !SM_CONF_LDAP_MEMFREE 135605302a5SGregory Neil Shapiro # define ldap_memfree(x) ((void) 0) 136605302a5SGregory Neil Shapiro # endif /* !SM_CONF_LDAP_MEMFREE */ 137605302a5SGregory Neil Shapiro 138605302a5SGregory Neil Shapiro # endif /* LDAPMAP */ 13940266059SGregory Neil Shapiro #endif /* ! SM_LDAP_H */ 140