/*
* Copyright (C) 1997-2003 Luke Howard. This file is part of the nss_ldap library. Contributed by Luke Howard, <lukeh@padl.com>, 1997. (The author maintains a non-exclusive licence to distribute this file under their own conditions.)
*
* The nss_ldap library is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version.
*
* The nss_ldap library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public License for more details.
*
* You should have received a copy of the GNU Library General Public License along with the nss_ldap library; see the file COPYING.LIB. If not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
#ifndef _LDAP_NSS_LDAP_UTIL_H
#define _LDAP_NSS_LDAP_UTIL_H
/* utility routines. */
#define CN_ATTR "CN"
#define DC_ATTR "DC"
#define DC_ATTR_AVA DC_ATTR"="
#define DC_ATTR_AVA_LEN (sizeof(DC_ATTR_AVA) - 1)
/*
* get the RDN's value: eg. if the RDN was cn=lukeh, getrdnvalue(entry) would return lukeh.
*/
NSS_STATUS
_nss_ldap_getrdnvalue(LDAP * ld,
LDAPMessage * entry,
const char *rdntype,
char **rval, char **buf, size_t * len);
#ifdef RFC2307BIS
/*
* map a distinguished name to a login naem.
*/
NSS_STATUS
_nss_ldap_dn2uid(LDAP * ld,
const char *dn,
char **uid, char **buf, size_t * len);
#endif /* RFC2307BIS */
#ifdef AT_OC_MAP
#define NSS_LDAP_KEY_MAP_ATTRIBUTE "nss_map_attribute"
#define NSS_LDAP_KEY_MAP_OBJECTCLASS "nss_map_objectclass"
#endif /* AT_OC_MAP */
#define NSS_LDAP_CONFIG_BUFSIZ 4096
#define NSS_LDAP_KEY_HOST "host"
#define NSS_LDAP_KEY_SCOPE "scope"
#define NSS_LDAP_KEY_BASE "base"
#define NSS_LDAP_KEY_PORT "port"
#define NSS_LDAP_KEY_BINDDN "binddn"
#define NSS_LDAP_KEY_BINDPW "bindpw"
#define NSS_LDAP_KEY_USESASL "use_sasl"
#define NSS_LDAP_KEY_SASLID "sasl_auth_id"
#define NSS_LDAP_KEY_DEREF "deref"
#define NSS_LDAP_KEY_ROOTBINDDN "rootbinddn"
#define NSS_LDAP_KEY_ROOTUSESASL "rootuse_sasl"
#define NSS_LDAP_KEY_ROOTSASLID "rootsasl_auth_id"
#define NSS_LDAP_KEY_LDAP_VERSION "ldap_version"
#define NSS_LDAP_KEY_TIMELIMIT "timelimit"
#define NSS_LDAP_KEY_BIND_TIMELIMIT "bind_timelimit"
#define NSS_LDAP_KEY_SSL "ssl"
#define NSS_LDAP_KEY_SSLPATH "sslpath"
#define NSS_LDAP_KEY_REFERRALS "referrals"
#define NSS_LDAP_KEY_RESTART "restart"
#define NSS_LDAP_KEY_URI "uri"
#define NSS_LDAP_KEY_IDLE_TIMELIMIT "idle_timelimit"
#define NSS_LDAP_KEY_RECONNECT_POLICY "bind_policy"
/*
* support separate naming contexts for each map eventually this will support the syntax defined in the DUAConfigProfile searchDescriptor attribute
*/
#define NSS_LDAP_KEY_NSS_BASE_PASSWD "nss_base_passwd"
#define NSS_LDAP_KEY_NSS_BASE_SHADOW "nss_base_shadow"
#define NSS_LDAP_KEY_NSS_BASE_GROUP "nss_base_group"
#define NSS_LDAP_KEY_NSS_BASE_HOSTS "nss_base_hosts"
#define NSS_LDAP_KEY_NSS_BASE_SERVICES "nss_base_services"
#define NSS_LDAP_KEY_NSS_BASE_NETWORKS "nss_base_networks"
#define NSS_LDAP_KEY_NSS_BASE_PROTOCOLS "nss_base_protocols"
#define NSS_LDAP_KEY_NSS_BASE_RPC "nss_base_rpc"
#define NSS_LDAP_KEY_NSS_BASE_ETHERS "nss_base_ethers"
#define NSS_LDAP_KEY_NSS_BASE_NETMASKS "nss_base_netmasks"
#define NSS_LDAP_KEY_NSS_BASE_BOOTPARAMS "nss_base_bootparams"
#define NSS_LDAP_KEY_NSS_BASE_ALIASES "nss_base_aliases"
#define NSS_LDAP_KEY_NSS_BASE_NETGROUP "nss_base_netgroup"
#define NSS_LDAP_KEY_NSS_TEMPLATE_HOMEDIRECTORY "nss_template_homedirectory"
#define NSS_LDAP_KEY_NSS_TEMPLATE_LOGINSHELL "nss_template_loginshell"
/*
* There are a number of means of obtaining configuration information.
*
* (a) DHCP (Cf draft-hedstrom-dhc-ldap-00.txt) (b) a configuration file (/etc/ldap.conf) ** (c) a coldstart file & subsequent referrals from the LDAP server (d) a custom LDAP bind protocol (e) DNS **
*
* This should be opaque to the rest of the library. ** implemented
*/
void _nss_ldap_init_config(ldap_config_t *);
NSS_STATUS
_nss_ldap_readconfig(ldap_config_t ** result,
char *buf, size_t buflen);
/*
* Escape '*' in a string for use as a filter
*/
NSS_STATUS
_nss_ldap_escape_string(const char *str,
char *buf, size_t buflen);
#define MAP_H_ERRNO(nss_status, herr) do { \
if ((unsigned int) (nss_status - _NSS_LOOKUP_OFFSET) > _nss_ldap_herrno2nssstat_tab_count) \
herr = NO_RECOVERY; \
herr = _nss_ldap_herrno2nssstat_tab[nss_status - _NSS_LOOKUP_OFFSET]; \
} while (0)
#ifdef HAVE_IRS_H
#define MAP_ERRNO(nss_status, herr) do { \
if ((unsigned int) nss_status > _nss_ldap_errno2nssstat_tab_count) \
errno = EPERM; \
errno = _nss_ldap_errno2nssstat_tab[nss_status]; \
} while (0)
#endif /* HAVE_IRS_H */
#endif /* _LDAP_NSS_LDAP_UTIL_H */
syntax highlighted by Code2HTML, v. 0.9.1