lists.arthurdejong.org
RSS feed

[nssldap] Re: Solaris 10: As soon as nscd is running getpwnam on a ldap account fails

[Date Prev][Date Next] [Thread Prev][Thread Next]

[nssldap] Re: Solaris 10: As soon as nscd is running getpwnam on a ldap account fails



Hello,
I used the opensolaris source browser to find some information about the
missing symbols:

http://src.opensolaris.org/source/xref/onnv/onnv-gate/usr/src/lib/nsswitch/ldap/common/mapfile-vers

http://src.opensolaris.org/source/xref/onnv/onnv-gate/usr/src/lib/nsswitch/ldap/common/getauuser.c

nss_backend_t *
_nss_ldap_audit_user_constr(const char *dummy1,
const char *dummy2,
const char *dummy3,
const char *dummy4,
const char *dummy5)
{
        return ((nss_backend_t *)_nss_ldap_constr(auuser_ops,
                sizeof (auuser_ops)/sizeof (auuser_ops[0]), _AUUSER,
                auuser_attrs, _nss_ldap_au2str));
}

http://src.opensolaris.org/source/xref/onnv/onnv-gate/usr/src/lib/nsswitch/ldap/common/gethostent6.c

nss_backend_t *
_nss_ldap_ipnodes_constr(const char *dummy1, const char *dummy2,
                        const char *dummy3)
{

        return ((nss_backend_t *)_nss_ldap_constr(ipnodes_ops,
                sizeof (ipnodes_ops)/sizeof (ipnodes_ops[0]), _HOSTS6,
                ipnodes_attrs, _nss_ldap_hosts2str));
}

http://src.opensolaris.org/source/xref/onnv/onnv-gate/usr/src/lib/nsswitch/ldap/common/getnetmasks.c

nss_backend_t *
_nss_ldap_netmasks_constr(const char *dummy1, const char *dummy2,
                        const char *dummy3)
{

        return ((nss_backend_t *)_nss_ldap_constr(netmasks_ops,
                sizeof (netmasks_ops)/sizeof (netmasks_ops[0]), _NETMASKS,
                netmasks_attrs, _nss_ldap_netmasks2str));
}

http://src.opensolaris.org/source/xref/onnv/onnv-gate/usr/src/lib/nsswitch/ldap/common/getprinter.c

nss_backend_t *
_nss_ldap_printers_constr(const char *dummy1, const char *dummy2,
                        const char *dummy3)
{

        return ((nss_backend_t *)_nss_ldap_constr(printers_ops,
                sizeof (printers_ops)/sizeof (printers_ops[0]), _PRINTERS,
                printer_attrs, _nss_ldap_printers2str));
}

http://src.opensolaris.org/source/xref/onnv/onnv-gate/usr/src/lib/nsswitch/ldap/common/getprofattr.c

nss_backend_t *
_nss_ldap_prof_attr_constr(const char *dummy1,
    const char *dummy2,
    const char *dummy3,
    const char *dummy4,
    const char *dummy5)
{
        return ((nss_backend_t *)_nss_ldap_constr(profattr_ops,
                sizeof (profattr_ops)/sizeof (profattr_ops[0]), _PROFATTR,
                prof_attrs, _nss_ldap_prof2str));
}

http://src.opensolaris.org/source/xref/onnv/onnv-gate/usr/src/lib/nsswitch/ldap/common/getprojent.c

nss_backend_t *
_nss_ldap_project_constr(const char *dummy1, const char *dummy2,
const char *dummy3)
{
        return (_nss_ldap_constr(project_ops,
        sizeof (project_ops) / sizeof (project_ops[0]),
        _PROJECT, project_attrs, _nss_ldap_proj2str));
}

http://src.opensolaris.org/source/xref/onnv/onnv-gate/usr/src/lib/nsswitch/ldap/common/getkeyent.c

nss_backend_t *
_nss_ldap_publickey_constr(const char *dummy1, const char *dummy2,
                        const char *dummy3)
{

        return ((nss_backend_t *)_nss_ldap_constr(keys_ops,
                    sizeof (keys_ops)/sizeof (keys_ops[0]),
                    _PUBLICKEY, keys_attrs, _nss_ldap_key2str));
}

http://src.opensolaris.org/source/xref/onnv/onnv-gate/usr/src/lib/nsswitch/ldap/common/tsol_getrhent.c

nss_backend_t *
_nss_ldap_tnrhdb_constr(const char *dummy1,
    const char *dummy2,
    const char *dummy3,
    const char *dummy4,
    const char *dummy5)
{
        return ((nss_backend_t *)_nss_ldap_constr(tnrhdb_ops,
                sizeof (tnrhdb_ops)/sizeof (tnrhdb_ops[0]), _TNRHDB,
                tnrhdb_attrs, _nss_ldap_tnrhdb2str));
}

http://src.opensolaris.org/source/xref/onnv/onnv-gate/usr/src/lib/nsswitch/ldap/common/tsol_gettpent.c

nss_backend_t *
_nss_ldap_tnrhtp_constr(const char *dummy1,
    const char *dummy2,
    const char *dummy3,
    const char *dummy4,
    const char *dummy5)
{
        return ((nss_backend_t *)_nss_ldap_constr(tnrhtp_ops,
                sizeof (tnrhtp_ops)/sizeof (tnrhtp_ops[0]), _TNRHTP,
                tnrhtp_attrs, _nss_ldap_tnrhtp2str));
}

http://src.opensolaris.org/source/xref/onnv/onnv-gate/usr/src/lib/nsswitch/ldap/common/getuserattr.c

nss_backend_t *
_nss_ldap_user_attr_constr(const char *dummy1,
    const char *dummy2,
    const char *dummy3,
    const char *dummy4,
    const char *dummy5)
{
        return ((nss_backend_t *)_nss_ldap_constr(userattr_ops,
                sizeof (userattr_ops)/sizeof (userattr_ops[0]), _USERATTR,
                user_attrs, _nss_ldap_user2str));
}

http://src.opensolaris.org/source/xref/onnv/onnv-gate/usr/src/lib/nsswitch/ldap/common/getexecattr.c

nss_backend_t *
_nss_ldap_exec_attr_constr(const char *dummy1,
    const char *dummy2,
    const char *dummy3,
    const char *dummy4,
    const char *dummy5,
    const char *dummy6,
    const char *dummy7)
{
#ifdef  DEBUG
        (void) fprintf(stdout,
            "\n[getexecattr.c: _nss_ldap_exec_attr_constr]\n");
#endif
        return ((nss_backend_t *)_nss_ldap_constr(execattr_ops,
                sizeof (execattr_ops)/sizeof (execattr_ops[0]), _EXECATTR,
                exec_attrs, _nss_ldap_exec2str));
}

after that I tried to implement the stubs, all returning ,,NULL'' however this
did not make nscd work. Here is my patch if someone want's to build up on top
of it.

        Thomas
diff --git a/Makefile.am b/Makefile.am
index 4b05f13..dcb883e 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -21,7 +21,7 @@ man_MANS = nss_ldap.5
 nss_ldap_so_SOURCES = ldap-nss.c ldap-pwd.c ldap-grp.c ldap-netgrp.c 
ldap-rpc.c \
        ldap-hosts.c ldap-network.c ldap-proto.c ldap-spwd.c \
        ldap-alias.c ldap-service.c ldap-schema.c ldap-ethers.c \
-       ldap-bp.c ldap-automount.c util.c ltf.c snprintf.c resolve.c \
+       ldap-bp.c stubs.c ldap-automount.c util.c ltf.c snprintf.c resolve.c \
        dnsconfig.c irs-nss.c pagectrl.c ldap-sldap.c ldap-init-krb5-cache.c
 
 nss_ldap_so_LDFLAGS = @nss_ldap_so_LDFLAGS@
diff --git a/Makefile.in b/Makefile.in
index c5c098f..0c68864 100644
--- a/Makefile.in
+++ b/Makefile.in
@@ -68,7 +68,7 @@ am_nss_ldap_so_OBJECTS = ldap-nss.$(OBJEXT) 
ldap-pwd.$(OBJEXT) \
        ldap-hosts.$(OBJEXT) ldap-network.$(OBJEXT) \
        ldap-proto.$(OBJEXT) ldap-spwd.$(OBJEXT) ldap-alias.$(OBJEXT) \
        ldap-service.$(OBJEXT) ldap-schema.$(OBJEXT) \
-       ldap-ethers.$(OBJEXT) ldap-bp.$(OBJEXT) \
+       ldap-ethers.$(OBJEXT) ldap-bp.$(OBJEXT) stubs.$(OBJEXT) \
        ldap-automount.$(OBJEXT) util.$(OBJEXT) ltf.$(OBJEXT) \
        snprintf.$(OBJEXT) resolve.$(OBJEXT) dnsconfig.$(OBJEXT) \
        irs-nss.$(OBJEXT) pagectrl.$(OBJEXT) ldap-sldap.$(OBJEXT) \
@@ -211,7 +211,7 @@ man_MANS = nss_ldap.5
 nss_ldap_so_SOURCES = ldap-nss.c ldap-pwd.c ldap-grp.c ldap-netgrp.c 
ldap-rpc.c \
        ldap-hosts.c ldap-network.c ldap-proto.c ldap-spwd.c \
        ldap-alias.c ldap-service.c ldap-schema.c ldap-ethers.c \
-       ldap-bp.c ldap-automount.c util.c ltf.c snprintf.c resolve.c \
+       ldap-bp.c stubs.c ldap-automount.c util.c ltf.c snprintf.c resolve.c \
        dnsconfig.c irs-nss.c pagectrl.c ldap-sldap.c ldap-init-krb5-cache.c
 
 NSS_LDAP_SOURCES = ldap-nss.c ldap-grp.c ldap-pwd.c ldap-netgrp.c 
ldap-schema.c \
@@ -308,6 +308,7 @@ distclean-compile:
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ldap-alias.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ldap-automount.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ldap-bp.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/stubs.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ldap-ethers.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ldap-grp.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ldap-hosts.Po@am__quote@
diff --git a/exports.solaris b/exports.solaris
index 3ad3bd4..0dcd056 100644
--- a/exports.solaris
+++ b/exports.solaris
@@ -13,6 +13,16 @@ nss_ldap.so.1 {
                _nss_ldap_services_constr;
                _nss_ldap_shadow_constr;
                _nss_ldap_netgroup_constr;
+                _nss_ldap_exec_attr_constr;
+                _nss_ldap_ipnodes_constr;
+                _nss_ldap_netmasks_constr;
+                _nss_ldap_printers_constr;
+                _nss_ldap_prof_attr_constr;
+                _nss_ldap_project_constr;
+                _nss_ldap_publickey_constr;
+                _nss_ldap_tnrhdb_constr;
+                _nss_ldap_tnrhtp_constr;
+                _nss_ldap_user_attr_constr;
                # libsldap library interfaces
                __ns_ldap_getMappedAttributes;
                __ns_ldap_getMappedObjectClass;
diff --git a/ldap-sldap.c b/ldap-sldap.c
index 5f8f85f..0af8b67 100644
--- a/ldap-sldap.c
+++ b/ldap-sldap.c
@@ -247,7 +247,9 @@ __ns_ldap_getParam (const ParamIndexType type, void ***data,
       break;
     }
 
+#if 0
   debug ("<== __ns_ldap_getParam (ret=%s)", NS_LDAP_ERR2STR (ret));
+#endif
 
   return ret;
 }
@@ -566,8 +568,10 @@ __ns_ldap_parseEntry (LDAPMessage * msg, ldap_state_t * 
state,
            {
              __ns_ldap_freeEntry (&entry);
              cookie->ret = ret;
+#if 0
              debug ("<== __ns_ldap_parseEntry (failed to init result: %s)",
                     NS_LDAP_ERR2STR (ret));
+#endif
              return __ns_ldap_mapError (ret);
            }
          cookie->result->entry = entry;
@@ -597,7 +601,9 @@ __ns_ldap_parseEntry (LDAPMessage * msg, ldap_state_t * 
state,
 
   cookie->ret = ret;
 
+#if 0
   debug ("<== __ns_ldap_parseEntry (ret=%s)", NS_LDAP_ERR2STR (ret));
+#endif
 
   return __ns_ldap_mapError (ret);
 }
@@ -1150,8 +1156,10 @@ __ns_ldap_firstEntry (const char *service,
 
   *pCookie = cookie;
 
+#if 0
   debug ("<== __ns_ldap_firstEntry ret=%s cookie=%p", NS_LDAP_ERR2STR (ret),
         cookie);
+#endif
 
   return ret;
 }
@@ -1185,7 +1193,9 @@ __ns_ldap_nextEntry (void *_cookie,
 
   _nss_ldap_leave ();
 
+#if 0
   debug ("<== __ns_ldap_nextEntry ret=%s", NS_LDAP_ERR2STR (ret));
+#endif
 
   return ret;
 }
@@ -1273,7 +1283,9 @@ __ns_ldap_list (const char *map,
 
   _nss_ldap_leave ();
 
+#if 0
   debug ("<== __ns_ldap_list ret=%s", NS_LDAP_ERR2STR (ret));
+#endif
 
   return ret;
 }
diff --git a/stubs.c b/stubs.c
new file mode 100644
index 0000000..f1b5127
--- /dev/null
+++ b/stubs.c
@@ -0,0 +1,136 @@
+#include "config.h"
+
+#ifdef HAVE_PORT_BEFORE_H
+#include <port_before.h>
+#endif
+
+#if defined(HAVE_THREAD_H) && !defined(_AIX)
+#include <thread.h>
+#elif defined(HAVE_PTHREAD_H)
+#include <pthread.h>
+#endif
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <netdb.h>
+#include <sys/types.h>
+#include <sys/socket.h>
+#include <netinet/in.h>
+
+#ifdef HAVE_LBER_H
+#include <lber.h>
+#endif
+#ifdef HAVE_LDAP_H
+#include <ldap.h>
+#endif
+
+#include "ldap-nss.h"
+#include "ldap-bp.h"
+#include "util.h"
+
+#ifdef HAVE_PORT_AFTER_H
+#include <port_after.h>
+#endif
+
+#ifdef HAVE_NSS_H
+static ent_context_t *bp_context = NULL;
+#endif
+
+nss_backend_t *
+_nss_ldap_audit_user_constr(const char *dummy1,
+const char *dummy2,
+const char *dummy3,
+const char *dummy4,
+const char *dummy5)
+{
+        return NULL;
+}
+
+nss_backend_t *
+_nss_ldap_ipnodes_constr(const char *dummy1, const char *dummy2,
+                        const char *dummy3)
+{
+        return NULL;
+}
+
+nss_backend_t *
+_nss_ldap_netmasks_constr(const char *dummy1, const char *dummy2,
+                        const char *dummy3)
+{
+        return NULL;
+}
+
+nss_backend_t *
+_nss_ldap_printers_constr(const char *dummy1, const char *dummy2,
+                        const char *dummy3)
+{
+        return NULL;
+}
+
+nss_backend_t *
+_nss_ldap_prof_attr_constr(const char *dummy1,
+    const char *dummy2,
+    const char *dummy3,
+    const char *dummy4,
+    const char *dummy5)
+{
+        return NULL;
+}
+
+nss_backend_t *
+_nss_ldap_project_constr(const char *dummy1, const char *dummy2,
+const char *dummy3)
+{
+        return NULL;
+}
+
+nss_backend_t *
+_nss_ldap_publickey_constr(const char *dummy1, const char *dummy2,
+                        const char *dummy3)
+{
+        return NULL;
+}
+
+nss_backend_t *
+_nss_ldap_tnrhdb_constr(const char *dummy1,
+    const char *dummy2,
+    const char *dummy3,
+    const char *dummy4,
+    const char *dummy5)
+{
+        return NULL;
+}
+
+nss_backend_t *
+_nss_ldap_tnrhtp_constr(const char *dummy1,
+    const char *dummy2,
+    const char *dummy3,
+    const char *dummy4,
+    const char *dummy5)
+{
+        return NULL;
+}
+
+nss_backend_t *
+_nss_ldap_user_attr_constr(const char *dummy1,
+    const char *dummy2,
+    const char *dummy3,
+    const char *dummy4,
+    const char *dummy5)
+{
+        return NULL;
+}
+
+nss_backend_t *
+_nss_ldap_exec_attr_constr(const char *dummy1,
+    const char *dummy2,
+    const char *dummy3,
+    const char *dummy4,
+    const char *dummy5,
+    const char *dummy6,
+    const char *dummy7)
+{
+        return NULL;
+}
+
diff --git a/stubs.h b/stubs.h
new file mode 100644
index 0000000..903dd56
--- /dev/null
+++ b/stubs.h
@@ -0,0 +1,65 @@
+#ifndef _LDAP_NSS_LDAP_STUBS_H
+#define _LDAP_NSS_LDAP_STUBS_H
+
+nss_backend_t *
+_nss_ldap_audit_user_constr(const char *dummy1,
+        const char *dummy2,
+        const char *dummy3,
+        const char *dummy4,
+        const char *dummy5);
+
+nss_backend_t *
+_nss_ldap_ipnodes_constr(const char *dummy1,
+        const char *dummy2,
+        const char *dummy3);
+
+nss_backend_t *
+_nss_ldap_netmasks_constr(const char *dummy1,
+        const char *dummy2,
+        const char *dummy3);
+
+nss_backend_t *
+_nss_ldap_printers_constr(const char *dummy1,
+        const char *dummy2,
+        const char *dummy3);
+
+nss_backend_t *
+_nss_ldap_prof_attr_constr(const char *dummy1,
+        const char *dummy2,
+        const char *dummy3,
+        const char *dummy4,
+        const char *dummy5);
+
+nss_backend_t *
+_nss_ldap_project_constr(const char *dummy1,
+        const char *dummy2,
+        const char *dummy3);
+
+nss_backend_t *
+_nss_ldap_publickey_constr(const char *dummy1,
+        const char *dummy2,
+        const char *dummy3);
+
+
+nss_backend_t *
+_nss_ldap_tnrhdb_constr(const char *dummy1,
+        const char *dummy2,
+        const char *dummy3,
+        const char *dummy4,
+        const char *dummy5);
+
+nss_backend_t *
+_nss_ldap_tnrhtp_constr(const char *dummy1,
+        const char *dummy2,
+        const char *dummy3,
+        const char *dummy4,
+        const char *dummy5);
+
+nss_backend_t *
+_nss_ldap_user_attr_constr(const char *dummy1,
+        const char *dummy2,
+        const char *dummy3,
+        const char *dummy4,
+        const char *dummy5);
+
+#endif /* _LDAP_NSS_LDAP_STUBS_H */