summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorArthur de Jong <arthur@arthurdejong.org>2007-07-26 19:34:12 +0000
committerArthur de Jong <arthur@arthurdejong.org>2007-07-26 19:34:12 +0000
commit5f21d0c7bcf5845b53ff94dd054fb1be9692a777 (patch)
tree0858ef8b84f4df57b6cc025c42b362aca09d9efa
parent0f64fdb18864f3211844742029c5b94c5b6c48c2 (diff)
switch to the new attribute mapping code
git-svn-id: http://arthurdejong.org/svn/nss-pam-ldapd/nss-ldapd@331 ef36b2f9-881f-0410-afb5-c4e39611909c
-rw-r--r--nslcd/alias.c1
-rw-r--r--nslcd/attmap.c102
-rw-r--r--nslcd/attmap.h85
-rw-r--r--nslcd/cfg.c99
-rw-r--r--nslcd/cfg.h2
-rw-r--r--nslcd/ether.c1
-rw-r--r--nslcd/group.c1
-rw-r--r--nslcd/host.c1
-rw-r--r--nslcd/ldap-nss.c51
-rw-r--r--nslcd/netgroup.c1
-rw-r--r--nslcd/network.c1
-rw-r--r--nslcd/passwd.c1
-rw-r--r--nslcd/protocol.c1
-rw-r--r--nslcd/rpc.c1
-rw-r--r--nslcd/service.c1
-rw-r--r--nslcd/shadow.c1
16 files changed, 160 insertions, 190 deletions
diff --git a/nslcd/alias.c b/nslcd/alias.c
index 5a43236..a19ac70 100644
--- a/nslcd/alias.c
+++ b/nslcd/alias.c
@@ -43,6 +43,7 @@
#include "common.h"
#include "log.h"
#include "attmap.h"
+#include "ldap-schema.h"
static enum nss_status _nss_ldap_parse_alias(
LDAPMessage *e,struct ldap_state UNUSED(*pvt),void *result,
diff --git a/nslcd/attmap.c b/nslcd/attmap.c
index 9e0b712..4029d43 100644
--- a/nslcd/attmap.c
+++ b/nslcd/attmap.c
@@ -20,11 +20,16 @@
02110-1301 USA
*/
+#include "config.h"
+#include <stdlib.h>
+#include <strings.h>
+#include "attmap.h"
-#ifdef NEW_DISABLED_FOR_NOW
+const char *attmap_objectClass = "objectClass";
+
/**
* Vendor-specific attributes and object classes.
@@ -59,7 +64,8 @@ const char *attmap_group_cn = "cn";
const char *attmap_group_userPassword = "userPassword";
const char *attmap_group_gidNumber = "gidNumber";
const char *attmap_group_memberUid = "memberUid";
-/* probably also support uniqueMember and memberOf attributes */
+const char *attmap_group_uniqueMember = "uniqueMember";
+const char *attmap_group_memberOf = "memberOf";
/*
* ( nisSchema.2.6 NAME 'ipHost' SUP top AUXILIARY
@@ -80,7 +86,7 @@ const char *attmap_host_ipHostNumber = "ipHostNumber";
* MAY ( nisNetgroupTriple $ memberNisNetgroup $ description ) )
*/
const char *attmap_netgroup_objectClass = "nisNetgroup";
-/*const char *attmap_netgroup_cn = "cn";*/
+const char *attmap_netgroup_cn = "cn";
const char *attmap_netgroup_nisNetgroupTriple = "nisNetgroupTriple";
const char *attmap_netgroup_memberNisNetgroup = "memberNisNetgroup";
@@ -171,4 +177,92 @@ const char *attmap_shadow_shadowInactive = "shadowInactive";
const char *attmap_shadow_shadowExpire = "shadowExpire";
const char *attmap_shadow_shadowFlag = "shadowFlag";
-#endif /* NEW_DISABLED_FOR_NOW */
+const char **attmap_get_var(const char *name)
+{
+ if (strncasecmp(name,"alias.",6)==0)
+ {
+ if (strcasecmp(name+6,"objectClass")==0) return &attmap_alias_objectClass;
+ if (strcasecmp(name+6,"cn")==0) return &attmap_alias_cn;
+ if (strcasecmp(name+6,"rfc822MailMember")==0) return &attmap_alias_rfc822MailMember;
+ }
+ else if (strncasecmp(name,"ether.",6)==0)
+ {
+ if (strcasecmp(name+6,"objectClass")==0) return &attmap_ether_objectClass;
+ if (strcasecmp(name+6,"cn")==0) return &attmap_ether_cn;
+ if (strcasecmp(name+6,"macAddress")==0) return &attmap_ether_macAddress;
+ }
+ else if (strncasecmp(name,"group.",6)==0)
+ {
+ if (strcasecmp(name+6,"objectClass")==0) return &attmap_group_objectClass;
+ if (strcasecmp(name+6,"cn")==0) return &attmap_group_cn;
+ if (strcasecmp(name+6,"userPassword")==0) return &attmap_group_userPassword;
+ if (strcasecmp(name+6,"gidNumber")==0) return &attmap_group_gidNumber;
+ if (strcasecmp(name+6,"memberUid")==0) return &attmap_group_memberUid;
+ if (strcasecmp(name+6,"uniqueMember")==0) return &attmap_group_uniqueMember;
+ if (strcasecmp(name+6,"memberOf")==0) return &attmap_group_memberOf;
+ }
+ else if (strncasecmp(name,"host.",5)==0)
+ {
+ if (strcasecmp(name+5,"objectClass")==0) return &attmap_host_objectClass;
+ if (strcasecmp(name+5,"cn")==0) return &attmap_host_cn;
+ if (strcasecmp(name+5,"ipHostNumber")==0) return &attmap_host_ipHostNumber;
+ }
+ else if (strncasecmp(name,"netgroup.",9)==0)
+ {
+ if (strcasecmp(name+9,"objectClass")==0) return &attmap_netgroup_objectClass;
+ if (strcasecmp(name+9,"cn")==0) return &attmap_netgroup_cn;
+ if (strcasecmp(name+9,"nisNetgroupTriple")==0) return &attmap_netgroup_nisNetgroupTriple;
+ if (strcasecmp(name+9,"memberNisNetgroup")==0) return &attmap_netgroup_memberNisNetgroup;
+ }
+ else if (strncasecmp(name,"network.",8)==0)
+ {
+ if (strcasecmp(name+8,"objectClass")==0) return &attmap_network_objectClass;
+ if (strcasecmp(name+8,"cn")==0) return &attmap_network_cn;
+ if (strcasecmp(name+8,"ipNetworkNumber")==0) return &attmap_network_ipNetworkNumber;
+ }
+ else if (strncasecmp(name,"passwd.",7)==0)
+ {
+ if (strcasecmp(name+7,"objectClass")==0) return &attmap_passwd_objectClass;
+ if (strcasecmp(name+7,"uid")==0) return &attmap_passwd_uid;
+ if (strcasecmp(name+7,"userPassword")==0) return &attmap_passwd_userPassword;
+ if (strcasecmp(name+7,"uidNumber")==0) return &attmap_passwd_uidNumber;
+ if (strcasecmp(name+7,"gidNumber")==0) return &attmap_passwd_gidNumber;
+ if (strcasecmp(name+7,"gecos")==0) return &attmap_passwd_gecos;
+ if (strcasecmp(name+7,"cn")==0) return &attmap_passwd_cn;
+ if (strcasecmp(name+7,"homeDirectory")==0) return &attmap_passwd_homeDirectory;
+ if (strcasecmp(name+7,"loginShell")==0) return &attmap_passwd_loginShell;
+ }
+ else if (strncasecmp(name,"protocol.",9)==0)
+ {
+ if (strcasecmp(name+9,"objectClass")==0) return &attmap_protocol_objectClass;
+ if (strcasecmp(name+9,"cn")==0) return &attmap_protocol_cn;
+ if (strcasecmp(name+9,"ipProtocolNumber")==0) return &attmap_protocol_ipProtocolNumber;
+ }
+ else if (strncasecmp(name,"rpc.",4)==0)
+ {
+ if (strcasecmp(name+9,"objectClass")==0) return &attmap_rpc_objectClass;
+ if (strcasecmp(name+9,"cn")==0) return &attmap_rpc_cn;
+ if (strcasecmp(name+9,"oncRpcNumber")==0) return &attmap_rpc_oncRpcNumber;
+ }
+ else if (strncasecmp(name,"service.",8)==0)
+ {
+ if (strcasecmp(name+8,"objectClass")==0) return &attmap_service_objectClass;
+ if (strcasecmp(name+8,"cn")==0) return &attmap_service_cn;
+ if (strcasecmp(name+8,"ipServicePort")==0) return &attmap_service_ipServicePort;
+ if (strcasecmp(name+8,"ipServiceProtocol")==0) return &attmap_service_ipServiceProtocol;
+ }
+ else if (strncasecmp(name,"shadow.",7)==0)
+ {
+ if (strcasecmp(name+7,"objectClass")==0) return &attmap_shadow_objectClass;
+ if (strcasecmp(name+7,"uid")==0) return &attmap_shadow_uid;
+ if (strcasecmp(name+7,"userPassword")==0) return &attmap_shadow_userPassword;
+ if (strcasecmp(name+7,"shadowLastChange")==0) return &attmap_shadow_shadowLastChange;
+ if (strcasecmp(name+7,"shadowMin")==0) return &attmap_shadow_shadowMin;
+ if (strcasecmp(name+7,"shadowMax")==0) return &attmap_shadow_shadowMax;
+ if (strcasecmp(name+7,"shadowWarning")==0) return &attmap_shadow_shadowWarning;
+ if (strcasecmp(name+7,"shadowInactive")==0) return &attmap_shadow_shadowInactive;
+ if (strcasecmp(name+7,"shadowExpire")==0) return &attmap_shadow_shadowExpire;
+ if (strcasecmp(name+7,"shadowFlag")==0) return &attmap_shadow_shadowFlag;
+ }
+ return NULL;
+}
diff --git a/nslcd/attmap.h b/nslcd/attmap.h
index 83f2e7e..d2d22f7 100644
--- a/nslcd/attmap.h
+++ b/nslcd/attmap.h
@@ -26,78 +26,9 @@
/* What follows is a list of attribute names per database. */
-#include <ldap-schema.h>
-
-#define attmap_objectClass _nss_ldap_map_at(LM_NONE,AT_objectClass)
-
-#define attmap_alias_objectClass _nss_ldap_map_oc(LM_NONE,OC_nisMailAlias)
-#define attmap_alias_cn _nss_ldap_map_at(LM_ALIASES,AT_cn)
-#define attmap_alias_rfc822MailMember _nss_ldap_map_at(LM_NONE,AT_rfc822MailMember)
-
-#define attmap_ether_objectClass _nss_ldap_map_oc(LM_NONE,OC_ieee802Device)
-#define attmap_ether_cn _nss_ldap_map_at(LM_ETHERS,AT_cn)
-#define attmap_ether_macAddress _nss_ldap_map_at(LM_NONE,AT_macAddress)
-
-#define attmap_group_objectClass _nss_ldap_map_oc(LM_NONE,OC_posixGroup)
-#define attmap_group_cn _nss_ldap_map_at(LM_GROUP,AT_cn)
-#define attmap_group_userPassword _nss_ldap_map_at(LM_GROUP,AT_userPassword)
-#define attmap_group_gidNumber _nss_ldap_map_at(LM_GROUP,AT_gidNumber)
-#define attmap_group_memberUid _nss_ldap_map_at(LM_GROUP,AT_memberUid)
-#define attmap_group_uniqueMember _nss_ldap_map_at(LM_GROUP,AT_uniqueMember)
-#define attmap_group_memberOf _nss_ldap_map_at(LM_GROUP,AT_memberOf)
-
-#define attmap_host_objectClass _nss_ldap_map_oc(LM_NONE,OC_ipHost)
-#define attmap_host_cn _nss_ldap_map_at(LM_HOSTS,AT_cn)
-#define attmap_host_ipHostNumber _nss_ldap_map_at(LM_NONE,AT_ipHostNumber)
-
-#define attmap_netgroup_objectClass _nss_ldap_map_oc(LM_NONE,OC_nisNetgroup)
-#define attmap_netgroup_cn _nss_ldap_map_at(LM_NETGROUP,AT_cn)
-#define attmap_netgroup_nisNetgroupTriple _nss_ldap_map_at(LM_NONE,AT_nisNetgroupTriple)
-#define attmap_netgroup_memberNisNetgroup _nss_ldap_map_at(LM_NONE,AT_memberNisNetgroup)
-
-#define attmap_network_objectClass _nss_ldap_map_oc(LM_NONE,OC_ipNetwork)
-#define attmap_network_cn _nss_ldap_map_at(LM_NETWORKS,AT_cn)
-#define attmap_network_ipNetworkNumber _nss_ldap_map_at(LM_NONE,AT_ipNetworkNumber)
-
-#define attmap_passwd_objectClass _nss_ldap_map_oc(LM_NONE,OC_posixAccount)
-#define attmap_passwd_uid _nss_ldap_map_at(LM_PASSWD,AT_uid)
-#define attmap_passwd_userPassword _nss_ldap_map_at(LM_PASSWD,AT_userPassword)
-#define attmap_passwd_uidNumber _nss_ldap_map_at(LM_NONE,AT_uidNumber)
-#define attmap_passwd_gidNumber _nss_ldap_map_at(LM_PASSWD,AT_gidNumber)
-#define attmap_passwd_gecos _nss_ldap_map_at(LM_NONE,AT_gecos)
-#define attmap_passwd_cn _nss_ldap_map_at(LM_PASSWD,AT_cn)
-#define attmap_passwd_homeDirectory _nss_ldap_map_at(LM_NONE,AT_homeDirectory)
-#define attmap_passwd_loginShell _nss_ldap_map_at(LM_NONE,AT_loginShell)
-
-#define attmap_protocol_objectClass _nss_ldap_map_oc(LM_NONE,OC_ipProtocol)
-#define attmap_protocol_cn _nss_ldap_map_at(LM_PROTOCOLS,AT_cn)
-#define attmap_protocol_ipProtocolNumber _nss_ldap_map_at(LM_NONE,AT_ipProtocolNumber)
-
-#define attmap_rpc_objectClass _nss_ldap_map_oc(LM_NONE,OC_oncRpc)
-#define attmap_rpc_cn _nss_ldap_map_at(LM_RPC,AT_cn)
-#define attmap_rpc_oncRpcNumber _nss_ldap_map_at(LM_NONE,AT_oncRpcNumber)
-
-#define attmap_service_objectClass _nss_ldap_map_oc(LM_NONE,OC_ipService)
-#define attmap_service_cn _nss_ldap_map_at(LM_SERVICES,AT_cn)
-#define attmap_service_ipServicePort _nss_ldap_map_at(LM_NONE,AT_ipServicePort)
-#define attmap_service_ipServiceProtocol _nss_ldap_map_at(LM_NONE,AT_ipServiceProtocol)
-
-#define attmap_shadow_objectClass _nss_ldap_map_oc(LM_NONE,OC_shadowAccount)
-#define attmap_shadow_uid _nss_ldap_map_at(LM_SHADOW,AT_uid)
-#define attmap_shadow_userPassword _nss_ldap_map_at(LM_SHADOW,AT_userPassword)
-#define attmap_shadow_shadowLastChange _nss_ldap_map_at(LM_NONE,AT_shadowLastChange)
-#define attmap_shadow_shadowMin _nss_ldap_map_at(LM_NONE,AT_shadowMin)
-#define attmap_shadow_shadowMax _nss_ldap_map_at(LM_NONE,AT_shadowMax)
-#define attmap_shadow_shadowWarning _nss_ldap_map_at(LM_NONE,AT_shadowWarning)
-#define attmap_shadow_shadowInactive _nss_ldap_map_at(LM_NONE,AT_shadowInactive)
-#define attmap_shadow_shadowExpire _nss_ldap_map_at(LM_NONE,AT_shadowExpire)
-#define attmap_shadow_shadowFlag _nss_ldap_map_at(LM_NONE,AT_shadowFlag)
-
-
-#ifdef NEW_DISABLED_FOR_NOW
-
-/* This is new code to be put in place as new attribute mapping stuff.
- This will just use strings that may be replaced elsewhere. */
+/* TODO: replace the objectClass name mapping with filter definitions */
+
+extern const char *attmap_objectClass;
/**
* Vendor-specific attributes and object classes.
@@ -132,7 +63,8 @@ extern const char *attmap_group_cn;
extern const char *attmap_group_userPassword;
extern const char *attmap_group_gidNumber;
extern const char *attmap_group_memberUid;
-/* probably also support uniqueMember and memberOf attributes */
+extern const char *attmap_group_uniqueMember;
+extern const char *attmap_group_memberOf;
/*
* ( nisSchema.2.6 NAME 'ipHost' SUP top AUXILIARY
@@ -153,7 +85,7 @@ extern const char *attmap_host_ipHostNumber;
* MAY ( nisNetgroupTriple $ memberNisNetgroup $ description ) )
*/
extern const char *attmap_netgroup_objectClass;
-/*extern const char *attmap_netgroup_cn;*/
+extern const char *attmap_netgroup_cn;
extern const char *attmap_netgroup_nisNetgroupTriple;
extern const char *attmap_netgroup_memberNisNetgroup;
@@ -244,6 +176,9 @@ extern const char *attmap_shadow_shadowInactive;
extern const char *attmap_shadow_shadowExpire;
extern const char *attmap_shadow_shadowFlag;
-#endif /* NEW_DISABLED_FOR_NOW */
+/* return a reference to the attribute mapping varoan;e forthe specified name
+ the name is the name after the attmap_... variables above with the
+ underscode replaced by a dot (e.g passwd.homeDirectory) */
+const char **attmap_get_var(const char *name);
#endif /* not _ATTMAP_H */
diff --git a/nslcd/cfg.c b/nslcd/cfg.c
index d26ab55..94e5511 100644
--- a/nslcd/cfg.c
+++ b/nslcd/cfg.c
@@ -38,6 +38,7 @@
#include "log.h"
#include "ldap-schema.h"
#include "cfg.h"
+#include "attmap.h"
struct ldap_config *nslcd_cfg=NULL;
@@ -111,9 +112,8 @@ int _nss_ldap_test_config_flag(unsigned int flag)
(nslcd_cfg->ldc_flags&flag);
}
-static enum nss_status _nss_ldap_init_config(struct ldap_config *result)
+static void _nss_ldap_init_config(struct ldap_config *result)
{
- int i, j;
memset (result, 0, sizeof (*result));
@@ -166,18 +166,6 @@ static enum nss_status _nss_ldap_init_config(struct ldap_config *result)
result->ldc_reconnect_maxsleeptime = LDAP_NSS_MAXSLEEPTIME;
result->ldc_reconnect_maxconntries = LDAP_NSS_MAXCONNTRIES;
result->ldc_initgroups_ignoreusers = NULL;
-
- for (i=0;i<=LM_NONE;i++)
- {
- for (j=0;j<=MAP_MAX;j++)
- {
- result->ldc_maps[i][j]=dict_new();
- if (result->ldc_maps[i][j] == NULL)
- return NSS_STATUS_UNAVAIL;
- }
- }
-
- return NSS_STATUS_SUCCESS;
}
static enum nss_status
@@ -275,44 +263,6 @@ static enum ldap_map_selector _nss_ldap_str2selector(const char *key)
return sel;
}
-static enum nss_status _nss_ldap_map_put(
- struct ldap_config *config,
- enum ldap_map_selector sel,
- enum ldap_map_type type,
- const char *from,
- const char *to)
-{
- DICT *map;
- /* we do some special handling for attribute type mapping to do some
- basic detection of what kind of LDAP server we're talking to */
- if (type==MAP_ATTRIBUTE)
- {
- /* special handling for attribute mapping */
- if (strcasecmp(from,"userPassword")==0)
- {
- if (strcasecmp(to,"userPassword")==0)
- config->ldc_password_type=LU_RFC2307_USERPASSWORD;
- else if (strcasecmp (to,"authPassword")==0)
- config->ldc_password_type=LU_RFC3112_AUTHPASSWORD;
- else
- config->ldc_password_type=LU_OTHER_PASSWORD;
- }
- else if (strcasecmp(from,"shadowLastChange")==0)
- {
- if (strcasecmp(to,"shadowLastChange")==0)
- config->ldc_shadow_type=LS_RFC2307_SHADOW;
- else if (strcasecmp (to,"pwdLastSet")==0)
- config->ldc_shadow_type=LS_AD_SHADOW;
- }
- }
- assert(sel <= LM_NONE);
- map=config->ldc_maps[sel][type];
- assert(map!=NULL);
- if (dict_put(map,from,to))
- return NSS_STATUS_TRYAGAIN;
- return NSS_STATUS_SUCCESS;
-}
-
static enum nss_status do_parse_map_statement(
struct ldap_config *cfg,char *statement,
enum ldap_map_type type)
@@ -320,6 +270,7 @@ static enum nss_status do_parse_map_statement(
char *key,*val;
enum ldap_map_selector sel=LM_NONE;
char *p;
+ const char **var;
key=(char *)statement;
val=key;
while (*val!=' '&&*val!='\t')
@@ -334,7 +285,43 @@ static enum nss_status do_parse_map_statement(
sel=_nss_ldap_str2selector(key);
key=++p;
}
- return _nss_ldap_map_put(cfg,sel,type,key,val);
+
+ if (type==MAP_ATTRIBUTE)
+ {
+ /* special handling for attribute mapping */
+ if (strcasecmp(key,"passwd.userPassword")==0)
+ {
+ if (strcasecmp(val,"userPassword")==0)
+ cfg->ldc_password_type=LU_RFC2307_USERPASSWORD;
+ else if (strcasecmp (val,"authPassword")==0)
+ cfg->ldc_password_type=LU_RFC3112_AUTHPASSWORD;
+ else
+ cfg->ldc_password_type=LU_OTHER_PASSWORD;
+ }
+ else if (strcasecmp(key,"shadow.shadowLastChange")==0)
+ {
+ if (strcasecmp(val,"shadowLastChange")==0)
+ cfg->ldc_shadow_type=LS_RFC2307_SHADOW;
+ else if (strcasecmp (val,"pwdLastSet")==0)
+ cfg->ldc_shadow_type=LS_AD_SHADOW;
+ }
+ }
+ var=attmap_get_var(key);
+ if (var==NULL)
+ /* the used mapping key was unknown */
+ return NSS_STATUS_NOTFOUND;
+ /* check if the value actually changed */
+ if (strcmp(*var,val)!=0)
+ {
+ /* Note: we have a memory leak here if a single mapping is
+ changed multiple times in one config
+ (deemed not a problem) */
+ *var=strdup(val);
+ if (*var==NULL)
+ /* memory allocation failed */
+ return NSS_STATUS_TRYAGAIN;
+ }
+ return NSS_STATUS_SUCCESS;
}
/* parse a comma-separated list */
@@ -501,11 +488,7 @@ static enum nss_status _nss_ldap_readconfig(struct ldap_config ** presult, char
*buffer += sizeof (struct ldap_config);
*buflen -= sizeof (struct ldap_config);
- status = _nss_ldap_init_config(result);
- if (status != NSS_STATUS_SUCCESS)
- {
- return NSS_STATUS_SUCCESS;
- }
+ _nss_ldap_init_config(result);
fp = fopen (NSS_LDAP_PATH_CONF, "r");
if (fp == NULL)
diff --git a/nslcd/cfg.h b/nslcd/cfg.h
index 7473464..f23e05f 100644
--- a/nslcd/cfg.h
+++ b/nslcd/cfg.h
@@ -132,8 +132,6 @@ struct ldap_config
/* krb5 ccache name */
char *ldc_krb5_ccname;
#endif /* CONFIGURE_KRB5_CCNAME */
- /* attribute/objectclass maps relative to this config */
- DICT *ldc_maps[LM_NONE + 1][MAP_MAX];
/* is userPassword "userPassword" or not? ie. do we need {crypt} to be stripped */
enum ldap_userpassword_selector ldc_password_type;
/* Use active directory time offsets? */
diff --git a/nslcd/ether.c b/nslcd/ether.c
index 44472fc..7d12166 100644
--- a/nslcd/ether.c
+++ b/nslcd/ether.c
@@ -60,6 +60,7 @@
#include "common.h"
#include "log.h"
#include "attmap.h"
+#include "ldap-schema.h"
#ifndef HAVE_STRUCT_ETHER_ADDR
struct ether_addr {
diff --git a/nslcd/group.c b/nslcd/group.c
index 3549759..c677568 100644
--- a/nslcd/group.c
+++ b/nslcd/group.c
@@ -50,6 +50,7 @@
#include "log.h"
#include "cfg.h"
#include "attmap.h"
+#include "ldap-schema.h"
/* FIXME: fix following problem:
if the entry has multiple cn fields we may end up
diff --git a/nslcd/host.c b/nslcd/host.c
index 68fb1de..35531ac 100644
--- a/nslcd/host.c
+++ b/nslcd/host.c
@@ -54,6 +54,7 @@
#include "common.h"
#include "log.h"
#include "attmap.h"
+#include "ldap-schema.h"
#ifndef MAXALIASES
#define MAXALIASES 35
diff --git a/nslcd/ldap-nss.c b/nslcd/ldap-nss.c
index 76dd9b8..b61f55d 100644
--- a/nslcd/ldap-nss.c
+++ b/nslcd/ldap-nss.c
@@ -2914,57 +2914,6 @@ int has_objectclass(LDAPMessage *entry,const char *objectclass)
return 0;
}
-static enum nss_status
-_nss_ldap_map_get (enum ldap_map_selector sel,
- enum ldap_map_type type,
- const char *from, const char **to);
-
-const char *
-_nss_ldap_map_at (enum ldap_map_selector sel, const char *attribute)
-{
- const char *mapped = NULL;
- enum nss_status stat;
-
- stat = _nss_ldap_map_get (sel, MAP_ATTRIBUTE, attribute, &mapped);
-
- return (stat == NSS_STATUS_SUCCESS) ? mapped : attribute;
-}
-
-const char *
-_nss_ldap_map_oc (enum ldap_map_selector sel, const char *objectclass)
-{
- const char *mapped = NULL;
- enum nss_status stat;
-
- stat = _nss_ldap_map_get (sel, MAP_OBJECTCLASS, objectclass, &mapped);
-
- return (stat == NSS_STATUS_SUCCESS) ? mapped : objectclass;
-}
-
-static enum nss_status
-_nss_ldap_map_get (enum ldap_map_selector sel,
- enum ldap_map_type type,
- const char *from, const char **to)
-{
- DICT *map;
- if (_nss_ldap_map_get == NULL || sel > LM_NONE || type > MAP_MAX)
- return NSS_STATUS_NOTFOUND;
- map=nslcd_cfg->ldc_maps[sel][type];
- if (map!=NULL)
- {
- *to=(const char *)dict_get(map,from);
- if ((*to==NULL) && (sel!=LM_NONE))
- {
- map=nslcd_cfg->ldc_maps[LM_NONE][type];
- if (map!=NULL)
- *to=(const char *)dict_get(map,from);
- }
- }
- if (*to==NULL)
- return NSS_STATUS_NOTFOUND;
- return NSS_STATUS_SUCCESS;
-}
-
/*
* Proxy bind support for AIX. Very simple, but should do
* the job.
diff --git a/nslcd/netgroup.c b/nslcd/netgroup.c
index 42cef7f..13007ce 100644
--- a/nslcd/netgroup.c
+++ b/nslcd/netgroup.c
@@ -53,6 +53,7 @@
#include "common.h"
#include "log.h"
#include "attmap.h"
+#include "ldap-schema.h"
/* A netgroup can consist of names of other netgroups. We have to
track which netgroups were read and which still have to be read. */
diff --git a/nslcd/network.c b/nslcd/network.c
index bb14093..b45fbbf 100644
--- a/nslcd/network.c
+++ b/nslcd/network.c
@@ -51,6 +51,7 @@
#include "common.h"
#include "log.h"
#include "attmap.h"
+#include "ldap-schema.h"
#if defined(HAVE_USERSEC_H)
#define MAXALIASES 35
diff --git a/nslcd/passwd.c b/nslcd/passwd.c
index 8434052..a564156 100644
--- a/nslcd/passwd.c
+++ b/nslcd/passwd.c
@@ -49,6 +49,7 @@
#include "common.h"
#include "log.h"
#include "attmap.h"
+#include "ldap-schema.h"
#ifndef UID_NOBODY
#define UID_NOBODY (-2)
diff --git a/nslcd/protocol.c b/nslcd/protocol.c
index 01a872c..98873c4 100644
--- a/nslcd/protocol.c
+++ b/nslcd/protocol.c
@@ -53,6 +53,7 @@
#include "common.h"
#include "log.h"
#include "attmap.h"
+#include "ldap-schema.h"
static enum nss_status _nss_ldap_parse_proto (LDAPMessage *e,
struct ldap_state UNUSED(*pvt),
diff --git a/nslcd/rpc.c b/nslcd/rpc.c
index d63daf6..5c886b3 100644
--- a/nslcd/rpc.c
+++ b/nslcd/rpc.c
@@ -57,6 +57,7 @@
#include "common.h"
#include "log.h"
#include "attmap.h"
+#include "ldap-schema.h"
/* macros for expanding the NSLCD_RPC macro */
#define NSLCD_STRING(field) WRITE_STRING(fp,field)
diff --git a/nslcd/service.c b/nslcd/service.c
index 830cdbc..7bf2438 100644
--- a/nslcd/service.c
+++ b/nslcd/service.c
@@ -57,6 +57,7 @@
#include "common.h"
#include "log.h"
#include "attmap.h"
+#include "ldap-schema.h"
/* macros for expanding the NSLCD_SERVICE macro */
#define NSLCD_STRING(field) WRITE_STRING(fp,field)
diff --git a/nslcd/shadow.c b/nslcd/shadow.c
index 53e9baa..71d4134 100644
--- a/nslcd/shadow.c
+++ b/nslcd/shadow.c
@@ -50,6 +50,7 @@
#include "log.h"
#include "attmap.h"
#include "cfg.h"
+#include "ldap-schema.h"
static int
_nss_ldap_shadow_date (const char *val)