140266059SGregory Neil Shapiro /* 2ffb83623SGregory Neil Shapiro * Copyright (c) 2001-2003, 2005-2007 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 * 9ffb83623SGregory Neil Shapiro * $Id: ldap.h,v 1.33 2007/10/10 00:06:44 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_* 20d0cef73dSGregory Neil Shapiro ** in the next major release (8.x+1) 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 35d0cef73dSGregory Neil Shapiro /* maximum number of arguments in a map lookup, see sendmail.h: MAX_MAP_ARGS */ 36d0cef73dSGregory Neil Shapiro # define SM_LDAP_ARGS 10 37d0cef73dSGregory Neil Shapiro 38d0cef73dSGregory Neil Shapiro /* error codes from sm_ldap_search*() */ 39d0cef73dSGregory Neil Shapiro # define SM_LDAP_ERR (-1) /* generic error: ldap_search(3) */ 40d0cef73dSGregory Neil Shapiro # define SM_LDAP_ERR_ARG_MISS (-2) /* an argument is missing */ 41d0cef73dSGregory Neil Shapiro 4240266059SGregory Neil Shapiro /* Attribute types */ 43605302a5SGregory Neil Shapiro # define SM_LDAP_ATTR_NONE (-1) 44605302a5SGregory Neil Shapiro # define SM_LDAP_ATTR_OBJCLASS 0 45605302a5SGregory Neil Shapiro # define SM_LDAP_ATTR_NORMAL 1 46605302a5SGregory Neil Shapiro # define SM_LDAP_ATTR_DN 2 47605302a5SGregory Neil Shapiro # define SM_LDAP_ATTR_FILTER 3 48605302a5SGregory Neil Shapiro # define SM_LDAP_ATTR_URL 4 4940266059SGregory Neil Shapiro 5040266059SGregory Neil Shapiro /* sm_ldap_results() flags */ 5140266059SGregory Neil Shapiro # define SM_LDAP_SINGLEMATCH 0x0001 5240266059SGregory Neil Shapiro # define SM_LDAP_MATCHONLY 0x0002 53605302a5SGregory Neil Shapiro # define SM_LDAP_USE_ALLATTR 0x0004 544e4196cbSGregory Neil Shapiro # define SM_LDAP_SINGLEDN 0x0008 55605302a5SGregory Neil Shapiro 5640266059SGregory Neil Shapiro struct sm_ldap_struct 5740266059SGregory Neil Shapiro { 5840266059SGregory Neil Shapiro /* needed for ldap_open or ldap_init */ 59e92d3f3fSGregory Neil Shapiro char *ldap_uri; 60e92d3f3fSGregory Neil Shapiro char *ldap_host; 6140266059SGregory Neil Shapiro int ldap_port; 62605302a5SGregory Neil Shapiro int ldap_version; 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 int ldap_attr_type[LDAPMAP_MAX_ATTR + 1]; 83605302a5SGregory Neil Shapiro char *ldap_attr_needobjclass[LDAPMAP_MAX_ATTR + 1]; 8440266059SGregory Neil Shapiro bool ldap_attrsonly; 85d0cef73dSGregory Neil Shapiro bool ldap_multi_args; 8640266059SGregory Neil Shapiro 8740266059SGregory Neil Shapiro /* args for ldap_result */ 8840266059SGregory Neil Shapiro struct timeval ldap_timeout; 8940266059SGregory Neil Shapiro LDAPMessage *ldap_res; 9040266059SGregory Neil Shapiro 9140266059SGregory Neil Shapiro /* ldapmap_lookup options */ 9240266059SGregory Neil Shapiro char ldap_attrsep; 9340266059SGregory Neil Shapiro 94ffb83623SGregory Neil Shapiro # if _FFR_LDAP_NETWORK_TIMEOUT 95ffb83623SGregory Neil Shapiro struct timeval ldap_networktmo; 96ffb83623SGregory Neil Shapiro # endif /* _FFR_LDAP_NETWORK_TIMEOUT */ 97ffb83623SGregory Neil Shapiro 9840266059SGregory Neil Shapiro /* Linked list of maps sharing the same LDAP binding */ 9940266059SGregory Neil Shapiro void *ldap_next; 10040266059SGregory Neil Shapiro }; 10140266059SGregory Neil Shapiro 10240266059SGregory Neil Shapiro typedef struct sm_ldap_struct SM_LDAP_STRUCT; 10340266059SGregory Neil Shapiro 104605302a5SGregory Neil Shapiro struct sm_ldap_recurse_entry 10540266059SGregory Neil Shapiro { 10640266059SGregory Neil Shapiro char *lr_search; 10740266059SGregory Neil Shapiro int lr_type; 108e92d3f3fSGregory Neil Shapiro LDAPURLDesc *lr_ludp; 109e92d3f3fSGregory Neil Shapiro char **lr_attrs; 110605302a5SGregory Neil Shapiro bool lr_done; 11140266059SGregory Neil Shapiro }; 11240266059SGregory Neil Shapiro 113605302a5SGregory Neil Shapiro struct sm_ldap_recurse_list 114605302a5SGregory Neil Shapiro { 115d0cef73dSGregory Neil Shapiro int lrl_size; 116d0cef73dSGregory Neil Shapiro int lrl_cnt; 117d0cef73dSGregory Neil Shapiro struct sm_ldap_recurse_entry **lrl_data; 118605302a5SGregory Neil Shapiro }; 119605302a5SGregory Neil Shapiro 120605302a5SGregory Neil Shapiro typedef struct sm_ldap_recurse_entry SM_LDAP_RECURSE_ENTRY; 12140266059SGregory Neil Shapiro typedef struct sm_ldap_recurse_list SM_LDAP_RECURSE_LIST; 12240266059SGregory Neil Shapiro 12340266059SGregory Neil Shapiro /* functions */ 12440266059SGregory Neil Shapiro extern void sm_ldap_clear __P((SM_LDAP_STRUCT *)); 12540266059SGregory Neil Shapiro extern bool sm_ldap_start __P((char *, SM_LDAP_STRUCT *)); 12640266059SGregory Neil Shapiro extern int sm_ldap_search __P((SM_LDAP_STRUCT *, char *)); 127d0cef73dSGregory Neil Shapiro extern int sm_ldap_search_m __P((SM_LDAP_STRUCT *, char **)); 128605302a5SGregory Neil Shapiro extern int sm_ldap_results __P((SM_LDAP_STRUCT *, int, int, int, 129605302a5SGregory Neil Shapiro SM_RPOOL_T *, char **, int *, int *, 13040266059SGregory Neil Shapiro SM_LDAP_RECURSE_LIST *)); 13140266059SGregory Neil Shapiro extern void sm_ldap_setopts __P((LDAP *, SM_LDAP_STRUCT *)); 13240266059SGregory Neil Shapiro extern int sm_ldap_geterrno __P((LDAP *)); 13340266059SGregory Neil Shapiro extern void sm_ldap_close __P((SM_LDAP_STRUCT *)); 13440266059SGregory Neil Shapiro 135605302a5SGregory Neil Shapiro /* Portability defines */ 136605302a5SGregory Neil Shapiro # if !SM_CONF_LDAP_MEMFREE 137605302a5SGregory Neil Shapiro # define ldap_memfree(x) ((void) 0) 138605302a5SGregory Neil Shapiro # endif /* !SM_CONF_LDAP_MEMFREE */ 139605302a5SGregory Neil Shapiro 140605302a5SGregory Neil Shapiro # endif /* LDAPMAP */ 14140266059SGregory Neil Shapiro #endif /* ! SM_LDAP_H */ 142