diff options
Diffstat (limited to 'nslcd/util.h')
-rw-r--r-- | nslcd/util.h | 121 |
1 files changed, 121 insertions, 0 deletions
diff --git a/nslcd/util.h b/nslcd/util.h new file mode 100644 index 0000000..f193916 --- /dev/null +++ b/nslcd/util.h @@ -0,0 +1,121 @@ +/* + util.h - LDAP utility functions + This file was part of the nss_ldap library which has been + forked into the nss-ldapd library. + + Copyright (C) 1997-2005 Luke Howard + Copyright (C) 2006 West Consulting + Copyright (C) 2006 Arthur de Jong + + This 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. + + This 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 this library; if not, write to the Free + Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, + MA 02110-1301 USA +*/ + +#ifndef _LDAP_NSS_LDAP_UTIL_H +#define _LDAP_NSS_LDAP_UTIL_H + +/* + * get the RDN's value: eg. if the RDN was cn=lukeh, getrdnvalue(entry) + * would return lukeh. + */ +enum nss_status _nss_ldap_getrdnvalue(LDAPMessage *entry, + const char *rdntype, + char **rval, char **buf, size_t * len); + +int _nss_ldap_write_rndvalue(FILE *fp,LDAPMessage *entry,const char *rdntype); + +/* + * map a distinguished name to a login name, or group entry + */ +enum nss_status _nss_ldap_dn2uid (const char *dn, + char **uid, char **buf, size_t * len, + int *pIsNestedGroup, LDAPMessage ** pRes); + + +#define NSS_LDAP_CONFIG_BUFSIZ 4096 + +/* + * 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_PREFIX "nss_base_" +#define NSS_LDAP_KEY_NSS_BASE_PREFIX_LEN ( sizeof(NSS_LDAP_KEY_NSS_BASE_PREFIX) - 1 ) + +/* + * Flags that are exposed via _nss_ldap_test_config_flag() + */ +#define NSS_LDAP_FLAGS_INITGROUPS_BACKLINK 0x0001 +#define NSS_LDAP_FLAGS_PAGED_RESULTS 0x0002 +#define NSS_LDAP_FLAGS_RFC2307BIS 0x0004 +#define NSS_LDAP_FLAGS_CONNECT_POLICY_ONESHOT 0x0008 + +/* + * 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 + */ + +enum nss_status _nss_ldap_readconfig (struct ldap_config ** result, char **buffer, size_t *buflen); +enum nss_status _nss_ldap_validateconfig (struct ldap_config *config); + +/* + * Escape '*' in a string for use as a filter + */ + +enum nss_status _nss_ldap_escape_string (const char *str, + char *buf, size_t buflen); + +struct ldap_datum +{ + void *data; + size_t size; +}; + +#define NSS_LDAP_DATUM_ZERO(d) do { \ + (d)->data = NULL; \ + (d)->size = 0; \ + } while (0) + +#define NSS_LDAP_DB_NORMALIZE_CASE 0x1 + +enum nss_status _nss_ldap_db_put (void *db, + unsigned flags, + const struct ldap_datum * key, + const struct ldap_datum * value); +enum nss_status _nss_ldap_db_get (void *db, + unsigned flags, + const struct ldap_datum * key, + struct ldap_datum * value); + +/* Routines for managing namelists */ + +enum nss_status _nss_ldap_namelist_push (struct name_list **head, const char *name); +void _nss_ldap_namelist_pop (struct name_list **head); +int _nss_ldap_namelist_find (struct name_list *head, const char *netgroup); +void _nss_ldap_namelist_destroy (struct name_list **head); + +enum nss_status +_nss_ldap_add_uri (struct ldap_config *result, const char *uri, + char **buffer, size_t *buflen); + +#endif /* _LDAP_NSS_LDAP_UTIL_H */ |