140266059SGregory Neil Shapiro /* 25dd76dd0SGregory Neil Shapiro * Copyright (c) 2001-2003, 2005-2007 Proofpoint, 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 * 94313cc83SGregory Neil Shapiro * $Id: ldap.h,v 1.35 2013-11-22 20:51:31 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 25*5b0945b5SGregory Neil Shapiro # endif 2640266059SGregory Neil Shapiro # ifndef LDAPMAP_MAX_FILTER 2740266059SGregory Neil Shapiro # define LDAPMAP_MAX_FILTER 1024 28*5b0945b5SGregory Neil Shapiro # endif 2940266059SGregory Neil Shapiro # ifndef LDAPMAP_MAX_PASSWD 3040266059SGregory Neil Shapiro # define LDAPMAP_MAX_PASSWD 256 31*5b0945b5SGregory Neil Shapiro # endif 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 94*5b0945b5SGregory Neil Shapiro # if LDAP_NETWORK_TIMEOUT 959bd497b8SGregory Neil Shapiro int ldap_networktmo; 96*5b0945b5SGregory Neil Shapiro # endif 97*5b0945b5SGregory Neil Shapiro # if _FFR_SM_LDAP_DBG 98*5b0945b5SGregory Neil Shapiro int ldap_debug; 99*5b0945b5SGregory Neil Shapiro # endif 100ffb83623SGregory Neil Shapiro 10140266059SGregory Neil Shapiro /* Linked list of maps sharing the same LDAP binding */ 10240266059SGregory Neil Shapiro void *ldap_next; 10340266059SGregory Neil Shapiro }; 10440266059SGregory Neil Shapiro 10540266059SGregory Neil Shapiro typedef struct sm_ldap_struct SM_LDAP_STRUCT; 10640266059SGregory Neil Shapiro 107605302a5SGregory Neil Shapiro struct sm_ldap_recurse_entry 10840266059SGregory Neil Shapiro { 10940266059SGregory Neil Shapiro char *lr_search; 11040266059SGregory Neil Shapiro int lr_type; 111e92d3f3fSGregory Neil Shapiro LDAPURLDesc *lr_ludp; 112e92d3f3fSGregory Neil Shapiro char **lr_attrs; 113605302a5SGregory Neil Shapiro bool lr_done; 11440266059SGregory Neil Shapiro }; 11540266059SGregory Neil Shapiro 116605302a5SGregory Neil Shapiro struct sm_ldap_recurse_list 117605302a5SGregory Neil Shapiro { 118d0cef73dSGregory Neil Shapiro int lrl_size; 119d0cef73dSGregory Neil Shapiro int lrl_cnt; 120d0cef73dSGregory Neil Shapiro struct sm_ldap_recurse_entry **lrl_data; 121605302a5SGregory Neil Shapiro }; 122605302a5SGregory Neil Shapiro 123605302a5SGregory Neil Shapiro typedef struct sm_ldap_recurse_entry SM_LDAP_RECURSE_ENTRY; 12440266059SGregory Neil Shapiro typedef struct sm_ldap_recurse_list SM_LDAP_RECURSE_LIST; 12540266059SGregory Neil Shapiro 12640266059SGregory Neil Shapiro /* functions */ 12740266059SGregory Neil Shapiro extern void sm_ldap_clear __P((SM_LDAP_STRUCT *)); 12840266059SGregory Neil Shapiro extern bool sm_ldap_start __P((char *, SM_LDAP_STRUCT *)); 12940266059SGregory Neil Shapiro extern int sm_ldap_search __P((SM_LDAP_STRUCT *, char *)); 130d0cef73dSGregory Neil Shapiro extern int sm_ldap_search_m __P((SM_LDAP_STRUCT *, char **)); 131605302a5SGregory Neil Shapiro extern int sm_ldap_results __P((SM_LDAP_STRUCT *, int, int, int, 132605302a5SGregory Neil Shapiro SM_RPOOL_T *, char **, int *, int *, 13340266059SGregory Neil Shapiro SM_LDAP_RECURSE_LIST *)); 13440266059SGregory Neil Shapiro extern void sm_ldap_setopts __P((LDAP *, SM_LDAP_STRUCT *)); 13540266059SGregory Neil Shapiro extern int sm_ldap_geterrno __P((LDAP *)); 13640266059SGregory Neil Shapiro extern void sm_ldap_close __P((SM_LDAP_STRUCT *)); 13740266059SGregory Neil Shapiro 138605302a5SGregory Neil Shapiro /* Portability defines */ 139605302a5SGregory Neil Shapiro # if !SM_CONF_LDAP_MEMFREE 140605302a5SGregory Neil Shapiro # define ldap_memfree(x) ((void) 0) 141*5b0945b5SGregory Neil Shapiro # endif 142605302a5SGregory Neil Shapiro 143605302a5SGregory Neil Shapiro # endif /* LDAPMAP */ 14440266059SGregory Neil Shapiro #endif /* ! SM_LDAP_H */ 145