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 * 9e92d3f3fSGregory Neil Shapiro * $Id: ldap.h,v 1.27 2003/12/20 09:23:47 gshapiro 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 /* Attribute types */ 36605302a5SGregory Neil Shapiro # define SM_LDAP_ATTR_NONE (-1) 37605302a5SGregory Neil Shapiro # define SM_LDAP_ATTR_OBJCLASS 0 38605302a5SGregory Neil Shapiro # define SM_LDAP_ATTR_NORMAL 1 39605302a5SGregory Neil Shapiro # define SM_LDAP_ATTR_DN 2 40605302a5SGregory Neil Shapiro # define SM_LDAP_ATTR_FILTER 3 41605302a5SGregory Neil Shapiro # define SM_LDAP_ATTR_URL 4 4240266059SGregory Neil Shapiro 4340266059SGregory Neil Shapiro /* sm_ldap_results() flags */ 4440266059SGregory Neil Shapiro # define SM_LDAP_SINGLEMATCH 0x0001 4540266059SGregory Neil Shapiro # define SM_LDAP_MATCHONLY 0x0002 46605302a5SGregory Neil Shapiro # define SM_LDAP_USE_ALLATTR 0x0004 47605302a5SGregory Neil Shapiro 4840266059SGregory Neil Shapiro struct sm_ldap_struct 4940266059SGregory Neil Shapiro { 5040266059SGregory Neil Shapiro /* needed for ldap_open or ldap_init */ 51e92d3f3fSGregory Neil Shapiro char *ldap_uri; 52e92d3f3fSGregory Neil Shapiro char *ldap_host; 5340266059SGregory Neil Shapiro int ldap_port; 54605302a5SGregory Neil Shapiro int ldap_version; 5540266059SGregory Neil Shapiro pid_t ldap_pid; 5640266059SGregory Neil Shapiro 5740266059SGregory Neil Shapiro /* options set in ld struct before ldap_bind_s */ 5840266059SGregory Neil Shapiro int ldap_deref; 5940266059SGregory Neil Shapiro time_t ldap_timelimit; 6040266059SGregory Neil Shapiro int ldap_sizelimit; 6140266059SGregory Neil Shapiro int ldap_options; 6240266059SGregory Neil Shapiro 6340266059SGregory Neil Shapiro /* args for ldap_bind_s */ 6440266059SGregory Neil Shapiro LDAP *ldap_ld; 6540266059SGregory Neil Shapiro char *ldap_binddn; 6640266059SGregory Neil Shapiro char *ldap_secret; 6740266059SGregory Neil Shapiro int ldap_method; 6840266059SGregory Neil Shapiro 6940266059SGregory Neil Shapiro /* args for ldap_search */ 7040266059SGregory Neil Shapiro char *ldap_base; 7140266059SGregory Neil Shapiro int ldap_scope; 7240266059SGregory Neil Shapiro char *ldap_filter; 7340266059SGregory Neil Shapiro char *ldap_attr[LDAPMAP_MAX_ATTR + 1]; 7440266059SGregory Neil Shapiro int ldap_attr_type[LDAPMAP_MAX_ATTR + 1]; 75605302a5SGregory Neil Shapiro char *ldap_attr_needobjclass[LDAPMAP_MAX_ATTR + 1]; 7640266059SGregory Neil Shapiro bool ldap_attrsonly; 7740266059SGregory Neil Shapiro 7840266059SGregory Neil Shapiro /* args for ldap_result */ 7940266059SGregory Neil Shapiro struct timeval ldap_timeout; 8040266059SGregory Neil Shapiro LDAPMessage *ldap_res; 8140266059SGregory Neil Shapiro 8240266059SGregory Neil Shapiro /* ldapmap_lookup options */ 8340266059SGregory Neil Shapiro char ldap_attrsep; 8440266059SGregory Neil Shapiro 8540266059SGregory Neil Shapiro /* Linked list of maps sharing the same LDAP binding */ 8640266059SGregory Neil Shapiro void *ldap_next; 8740266059SGregory Neil Shapiro }; 8840266059SGregory Neil Shapiro 8940266059SGregory Neil Shapiro typedef struct sm_ldap_struct SM_LDAP_STRUCT; 9040266059SGregory Neil Shapiro 91605302a5SGregory Neil Shapiro struct sm_ldap_recurse_entry 9240266059SGregory Neil Shapiro { 9340266059SGregory Neil Shapiro char *lr_search; 9440266059SGregory Neil Shapiro int lr_type; 95e92d3f3fSGregory Neil Shapiro LDAPURLDesc *lr_ludp; 96e92d3f3fSGregory Neil Shapiro char **lr_attrs; 97605302a5SGregory Neil Shapiro bool lr_done; 9840266059SGregory Neil Shapiro }; 9940266059SGregory Neil Shapiro 100605302a5SGregory Neil Shapiro struct sm_ldap_recurse_list 101605302a5SGregory Neil Shapiro { 102605302a5SGregory Neil Shapiro int lr_size; 103605302a5SGregory Neil Shapiro int lr_cnt; 104605302a5SGregory Neil Shapiro struct sm_ldap_recurse_entry **lr_data; 105605302a5SGregory Neil Shapiro }; 106605302a5SGregory Neil Shapiro 107605302a5SGregory Neil Shapiro typedef struct sm_ldap_recurse_entry SM_LDAP_RECURSE_ENTRY; 10840266059SGregory Neil Shapiro typedef struct sm_ldap_recurse_list SM_LDAP_RECURSE_LIST; 10940266059SGregory Neil Shapiro 11040266059SGregory Neil Shapiro /* functions */ 11140266059SGregory Neil Shapiro extern void sm_ldap_clear __P((SM_LDAP_STRUCT *)); 11240266059SGregory Neil Shapiro extern bool sm_ldap_start __P((char *, SM_LDAP_STRUCT *)); 11340266059SGregory Neil Shapiro extern int sm_ldap_search __P((SM_LDAP_STRUCT *, char *)); 114605302a5SGregory Neil Shapiro extern int sm_ldap_results __P((SM_LDAP_STRUCT *, int, int, int, 115605302a5SGregory Neil Shapiro SM_RPOOL_T *, char **, int *, int *, 11640266059SGregory Neil Shapiro SM_LDAP_RECURSE_LIST *)); 11740266059SGregory Neil Shapiro extern void sm_ldap_setopts __P((LDAP *, SM_LDAP_STRUCT *)); 11840266059SGregory Neil Shapiro extern int sm_ldap_geterrno __P((LDAP *)); 11940266059SGregory Neil Shapiro extern void sm_ldap_close __P((SM_LDAP_STRUCT *)); 12040266059SGregory Neil Shapiro 121605302a5SGregory Neil Shapiro /* Portability defines */ 122605302a5SGregory Neil Shapiro # if !SM_CONF_LDAP_MEMFREE 123605302a5SGregory Neil Shapiro # define ldap_memfree(x) ((void) 0) 124605302a5SGregory Neil Shapiro # endif /* !SM_CONF_LDAP_MEMFREE */ 125605302a5SGregory Neil Shapiro 126605302a5SGregory Neil Shapiro # endif /* LDAPMAP */ 12740266059SGregory Neil Shapiro #endif /* ! SM_LDAP_H */ 128