diff options
author | Arthur de Jong <arthur@arthurdejong.org> | 2007-07-26 19:34:12 +0000 |
---|---|---|
committer | Arthur de Jong <arthur@arthurdejong.org> | 2007-07-26 19:34:12 +0000 |
commit | 5f21d0c7bcf5845b53ff94dd054fb1be9692a777 (patch) | |
tree | 0858ef8b84f4df57b6cc025c42b362aca09d9efa | |
parent | 0f64fdb18864f3211844742029c5b94c5b6c48c2 (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.c | 1 | ||||
-rw-r--r-- | nslcd/attmap.c | 102 | ||||
-rw-r--r-- | nslcd/attmap.h | 85 | ||||
-rw-r--r-- | nslcd/cfg.c | 99 | ||||
-rw-r--r-- | nslcd/cfg.h | 2 | ||||
-rw-r--r-- | nslcd/ether.c | 1 | ||||
-rw-r--r-- | nslcd/group.c | 1 | ||||
-rw-r--r-- | nslcd/host.c | 1 | ||||
-rw-r--r-- | nslcd/ldap-nss.c | 51 | ||||
-rw-r--r-- | nslcd/netgroup.c | 1 | ||||
-rw-r--r-- | nslcd/network.c | 1 | ||||
-rw-r--r-- | nslcd/passwd.c | 1 | ||||
-rw-r--r-- | nslcd/protocol.c | 1 | ||||
-rw-r--r-- | nslcd/rpc.c | 1 | ||||
-rw-r--r-- | nslcd/service.c | 1 | ||||
-rw-r--r-- | nslcd/shadow.c | 1 |
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) |