PERFORCE change 99671 for review
Michael Bushkov
bushman at FreeBSD.org
Tue Jun 20 14:06:35 UTC 2006
http://perforce.freebsd.org/chv.cgi?CH=99671
Change 99671 by bushman at bushman_nss_ldap_cached on 2006/06/20 14:06:17
Makefile's hierarchy changed so that modules are now built as the shared libraries + their sources are included to the libc sources so that statically linked programs would run normally. It would be better, though, to include nss-modules's source only for libc.a - and not for the libc.so.
Affected files ...
.. //depot/projects/soc2006/nss_ldap_cached/src/lib/libc/Makefile#2 edit
.. //depot/projects/soc2006/nss_ldap_cached/src/lib/libc/net/Makefile.inc#4 edit
.. //depot/projects/soc2006/nss_ldap_cached/src/lib/libc/net/getprotoent.c#3 edit
.. //depot/projects/soc2006/nss_ldap_cached/src/lib/libc/net/netdb_private.h#5 edit
.. //depot/projects/soc2006/nss_ldap_cached/src/lib/libc/net/nss_backends.h#2 edit
.. //depot/projects/soc2006/nss_ldap_cached/src/lib/libnssutil/Makefile#4 edit
.. //depot/projects/soc2006/nss_ldap_cached/src/lib/nss_compat/Makefile#2 edit
.. //depot/projects/soc2006/nss_ldap_cached/src/lib/nss_compat/compat_passwd.c#2 edit
.. //depot/projects/soc2006/nss_ldap_cached/src/lib/nss_compat/nss_compat.c#2 edit
.. //depot/projects/soc2006/nss_ldap_cached/src/lib/nss_dns/Makefile#5 edit
.. //depot/projects/soc2006/nss_ldap_cached/src/lib/nss_dns/nss_dns.c#5 edit
.. //depot/projects/soc2006/nss_ldap_cached/src/lib/nss_files/Makefile#5 edit
.. //depot/projects/soc2006/nss_ldap_cached/src/lib/nss_files/files_passwd.c#3 edit
.. //depot/projects/soc2006/nss_ldap_cached/src/lib/nss_files/files_proto.c#3 edit
.. //depot/projects/soc2006/nss_ldap_cached/src/lib/nss_files/nss_files.c#7 edit
.. //depot/projects/soc2006/nss_ldap_cached/src/lib/nss_icmp/Makefile#4 edit
.. //depot/projects/soc2006/nss_ldap_cached/src/lib/nss_icmp/icmp_hosts_namadr.c#2 edit
.. //depot/projects/soc2006/nss_ldap_cached/src/lib/nss_icmp/nss_icmp.c#2 edit
.. //depot/projects/soc2006/nss_ldap_cached/src/lib/nss_nis/Makefile#5 edit
.. //depot/projects/soc2006/nss_ldap_cached/src/lib/nss_nis/nss_nis.c#4 edit
Differences ...
==== //depot/projects/soc2006/nss_ldap_cached/src/lib/libc/Makefile#2 (text+ko) ====
@@ -110,7 +110,29 @@
.if defined(KMSRCS) && !empty(KMSRCS)
cp -p ${.ALLSRC} ${DESTDIR}/sys/libkern/${MACHINE_ARCH}
.endif
-
+
+# Include nss-modules's sources so that statically linked apps can work
+# normally
+CFLAGS+= -I${.CURDIR}/../libnssutil
+CFLAGS+= -I${.CURDIR/include -I${.CURDIR/net
+
+.PATH: ${.CURDIR}/../libnssutil
+.include "${.CURDIR}/../libnssutil/Makefile.inc"
+
+.PATH: ${.CURDIR}/../nss_files
+.include "${.CURDIR}/../nss_files/Makefile.inc"
+
+.PATH: ${.CURDIR}/../nss_dns
+.include "${.CURDIR}/../nss_dns/Makefile.inc"
+
+.if ${MK_NIS} != "no"
+.PATH: ${.CURDIR}/../nss_nis
+.include "${.CURDIR}/../nss_nis/Makefile.inc"
+.endif
+
+.PATH: ${.CURDIR}/../nss_compat
+.include "${.CURDIR}/../nss_compat/Makefile.inc"
+
.include <bsd.lib.mk>
# Disable warnings in contributed sources.
==== //depot/projects/soc2006/nss_ldap_cached/src/lib/libc/net/Makefile.inc#4 (text+ko) ====
@@ -7,7 +7,7 @@
SRCS+= addr2ascii.c ascii2addr.c base64.c ether_addr.c eui64.c \
gai_strerror.c getaddrinfo.c gethostnamadr.c \
getifaddrs.c getifmaddrs.c getnameinfo.c \
- getnetnamadr.c getproto.c getprotoent.c getprotoname.c getservent.c \
+ getnetnamadr.c getprotoent.c getservent.c \
if_indextoname.c if_nameindex.c if_nametoindex.c \
ip6opt.c linkaddr.c map_v4v6.c name6.c \
nsdispatch.c nslexer.c nsparser.c nss_compat.c \
==== //depot/projects/soc2006/nss_ldap_cached/src/lib/libc/net/getprotoent.c#3 (text+ko) ====
@@ -278,6 +278,66 @@
#endif /* NS_CACHING */
int
+getprotobyname_r(const char *name, struct protoent *pptr, char *buffer,
+ size_t buflen, struct protoent **result)
+{
+#ifdef NS_CACHING
+ static const nss_cache_info cache_info =
+ NS_COMMON_CACHE_INFO_INITIALIZER(
+ protocols, (void *)nss_lt_name,
+ __proto_id_func, __proto_marshal_func, __proto_unmarshal_func);
+#endif
+ static const ns_dtab dtab[] = {
+#ifdef NS_CACHING
+ NS_CACHE_CB(&cache_info)
+#endif
+ { NULL, NULL, NULL }
+ };
+ int rv, ret_errno;
+
+ ret_errno = 0;
+ *result = NULL;
+ rv = nsdispatch(result, dtab, NSDB_PROTOCOLS, "getprotobyname_r",
+ defaultsrc, name, pptr, buffer, buflen, &ret_errno);
+
+ if (rv == NS_SUCCESS)
+ return (0);
+ else
+ return (ret_errno);
+}
+
+int
+getprotobynumber_r(int proto, struct protoent *pptr, char *buffer,
+ size_t buflen, struct protoent **result)
+{
+#ifdef NS_CACHING
+ static const nss_cache_info cache_info =
+ NS_COMMON_CACHE_INFO_INITIALIZER(
+ protocols, (void *)nss_lt_id,
+ __proto_id_func, __proto_marshal_func, __proto_unmarshal_func);
+#endif
+
+ static const ns_dtab dtab[] = {
+#ifdef NS_CACHING
+ NS_CACHE_CB(&cache_info)
+#endif
+ { NULL, NULL, NULL }
+ };
+ int rv, ret_errno;
+
+ ret_errno = 0;
+ *result = NULL;
+ rv = nsdispatch(result, dtab, NSDB_PROTOCOLS, "getprotobynumber_r",
+ defaultsrc, proto, pptr, buffer, buflen, &ret_errno);
+
+ if (rv == NS_SUCCESS)
+ return (0);
+ else
+ return (ret_errno);
+}
+
+
+int
getprotoent_r(struct protoent *pptr, char *buffer, size_t buflen,
struct protoent **result)
{
@@ -345,6 +405,35 @@
}
struct protoent *
+getprotobyname(const char *name)
+{
+ struct protodata *pd;
+ struct protoent *rval;
+
+ if ((pd = __protodata_init()) == NULL)
+ return (NULL);
+ if (getprotobyname_r(name, &pd->proto, pd->data, sizeof(pd->data),
+ &rval) != 0)
+ return (NULL);
+ return (rval);
+}
+
+
+struct protoent *
+getprotobynumber(int proto)
+{
+ struct protodata *pd;
+ struct protoent *rval;
+
+ if ((pd = __protodata_init()) == NULL)
+ return (NULL);
+ if (getprotobynumber_r(proto, &pd->proto, pd->data, sizeof(pd->data),
+ &rval) != 0)
+ return (NULL);
+ return (rval);
+}
+
+struct protoent *
getprotoent(void)
{
struct protodata *pd;
==== //depot/projects/soc2006/nss_ldap_cached/src/lib/libc/net/netdb_private.h#5 (text+ko) ====
@@ -48,7 +48,7 @@
(thr_keycreate(&name##_key, name##_free) == 0); \
} \
\
-struct name * \
+static struct name * \
__##name##_init(void) \
{ \
struct name *he; \
==== //depot/projects/soc2006/nss_ldap_cached/src/lib/libc/net/nss_backends.h#2 (text+ko) ====
@@ -35,9 +35,12 @@
* Eventually, the implementations of existing built-in NSS functions
* may be moved into NSS modules and live here.
*/
-#if 0
+#if 1
NSS_BACKEND( files, _files_nss_module_register )
NSS_BACKEND( dns, _dns_nss_module_register )
+#ifdef YP
NSS_BACKEND( nis, _nis_nss_module_register )
+#endif
NSS_BACKEND( compat, _compat_nss_module_register )
+//NSS_BACKEND( icmp, _icmp_nss_module_register )
#endif
==== //depot/projects/soc2006/nss_ldap_cached/src/lib/libnssutil/Makefile#4 (text+ko) ====
@@ -1,9 +1,10 @@
# $FreeBSD$
-LIB= nssutil
-SRCS= copynetent.c copyhtent.c gr_scan.c pw_scan.c rpcunpack.c\
- servunpack.c
+LIB= nssutil
+#SRCS= copynetent.c copyhtent.c gr_scan.c pw_scan.c rpcunpack.c\
+# servunpack.c
INTERNAL=
NO_PIC=
+.include "Makefile.inc"
.include <bsd.lib.mk>
==== //depot/projects/soc2006/nss_ldap_cached/src/lib/nss_compat/Makefile#2 (text+ko) ====
@@ -7,8 +7,7 @@
SHLIBDIR?= /lib
# NOTE: dirty hack with nss_files's file_serv.c is used
-SRCS= nss_compat.c compat_group.c compat_passwd.c compat_serv.c\
- ${.CURDIR}/../nss_files/files_serv.c
+SRCS+= ${.CURDIR}/../nss_files/files_serv.c
CFLAGS+=-I${.CURDIR} -I${.CURDIR}/../libc/gen -I${.CURDIR}/../libc/include\
-I${.CURDIR}/../libc/net -I${.CURDIR}/../libnssutil
CFLAGS+=-DINET6
@@ -26,4 +25,5 @@
INCS=
MAN=
+.include "Makefile.inc"
.include <bsd.lib.mk>
==== //depot/projects/soc2006/nss_ldap_cached/src/lib/nss_compat/compat_passwd.c#2 (text+ko) ====
@@ -72,6 +72,7 @@
static void compat_endstate(void *);
NSS_TLS_HANDLING(compat);
+static void pwd_init(struct passwd *pwd);
static int pwdb_match_entry_v3(char *, size_t, enum nss_lookup_type,
const char *, uid_t);
static int pwdb_parse_entry_v3(char *, size_t, struct passwd *, int *);
@@ -79,7 +80,7 @@
const char *, uid_t);
static int pwdb_parse_entry_v4(char *, size_t, struct passwd *, int *);
-struct {
+static struct {
int (*match)(char *, size_t, enum nss_lookup_type, const char *,
uid_t);
int (*parse)(char *, size_t, struct passwd *, int *);
@@ -464,6 +465,22 @@
return (NS_SUCCESS);
}
+static void
+pwd_init(struct passwd *pwd)
+{
+ static char nul[] = "";
+
+ memset(pwd, 0, sizeof(*pwd));
+ pwd->pw_uid = (uid_t)-1; /* Considered least likely to lead to */
+ pwd->pw_gid = (gid_t)-1; /* a security issue. */
+ pwd->pw_name = nul;
+ pwd->pw_passwd = nul;
+ pwd->pw_class = nul;
+ pwd->pw_gecos = nul;
+ pwd->pw_dir = nul;
+ pwd->pw_shell = nul;
+}
+
static DB *
pwdbopen(int *version)
{
==== //depot/projects/soc2006/nss_ldap_cached/src/lib/nss_compat/nss_compat.c#2 (text+ko) ====
@@ -65,7 +65,7 @@
};
ns_mtab *
-nss_module_register(const char *source, unsigned int *mtabsize,
+_compat_nss_module_register(const char *source, unsigned int *mtabsize,
nss_module_unregister_fn *unreg)
{
*mtabsize = sizeof(methods) / sizeof(methods[0]);
@@ -74,8 +74,4 @@
return (methods);
}
-int
-main(int argc, char **argv)
-{
- return (0);
-}
+__weak_reference(_compat_nss_module_register, nss_module_register);
==== //depot/projects/soc2006/nss_ldap_cached/src/lib/nss_dns/Makefile#5 (text+ko) ====
@@ -2,12 +2,13 @@
.include <bsd.own.mk>
+LIB= nss_dns
SHLIB_MAJOR= 1
SHLIB_NAME= nss_dns.so.${SHLIB_MAJOR}
SHLIBDIR?= /lib
-SRCS= nss_dns.c dns_hosts_namadr.c dns_hosts_addrinfo.c dns_passwd.c\
- dns_group.c dns_net.c
+#SRCS= nss_dns.c dns_hosts_namadr.c dns_hosts_addrinfo.c dns_passwd.c\
+# dns_group.c dns_net.c
CFLAGS+=-I${.CURDIR} -I${.CURDIR}/../libc/gen -I${.CURDIR}/../libc/include\
-I${.CURDIR}/../libc/net -I${.CURDIR}/../libnssutil
CFLAGS+=-DINET6
@@ -25,4 +26,5 @@
INCS=
MAN=
+.include "Makefile.inc"
.include <bsd.lib.mk>
==== //depot/projects/soc2006/nss_ldap_cached/src/lib/nss_dns/nss_dns.c#5 (text+ko) ====
@@ -84,7 +84,7 @@
};
ns_mtab *
-nss_module_register(const char *source, unsigned int *mtabsize,
+_dns_nss_module_register(const char *source, unsigned int *mtabsize,
nss_module_unregister_fn *unreg)
{
*mtabsize = sizeof(methods) / sizeof(methods[0]);
@@ -93,8 +93,4 @@
return (methods);
}
-int
-main(int argc, char **argv)
-{
- return (0);
-}
+__weak_reference(_dns_nss_module_register, nss_module_register);
==== //depot/projects/soc2006/nss_ldap_cached/src/lib/nss_files/Makefile#5 (text+ko) ====
@@ -2,13 +2,14 @@
.include <bsd.own.mk>
+LIB= nss_files
SHLIB_MAJOR= 1
SHLIB_NAME= nss_files.so.${SHLIB_MAJOR}
SHLIBDIR?= /lib
-SRCS= nss_files.c files_passwd.c files_group.c files_hosts_namadr.c\
- files_hosts_addrinfo.c files_serv.c files_proto.c\
- files_net.c files_rpc.c
+#SRCS= nss_files.c files_passwd.c files_group.c files_hosts_namadr.c\
+# files_hosts_addrinfo.c files_serv.c files_proto.c\
+# files_net.c files_rpc.c
CFLAGS+=-I${.CURDIR} -I${.CURDIR}/../libc/gen -I${.CURDIR}/../libc/include\
-I${.CURDIR}/../libc/net -I${.CURDIR}/../libnssutil
CFLAGS+=-DINET6
@@ -26,4 +27,5 @@
INCS=
MAN=
+.include "Makefile.inc"
.include <bsd.lib.mk>
==== //depot/projects/soc2006/nss_ldap_cached/src/lib/nss_files/files_passwd.c#3 (text+ko) ====
@@ -71,7 +71,7 @@
static int pwdb_parse_entry_v4(char *, size_t, struct passwd *, int *);
-struct {
+static struct {
int (*match)(char *, size_t, enum nss_lookup_type, const char *,
uid_t);
int (*parse)(char *, size_t, struct passwd *, int *);
==== //depot/projects/soc2006/nss_ldap_cached/src/lib/nss_files/files_proto.c#3 (text+ko) ====
@@ -62,7 +62,7 @@
}
static void
-protoent_data_free(void *ptr)
+files_protoent_data_free(void *ptr)
{
struct files_protoent_data *ped = ptr;
==== //depot/projects/soc2006/nss_ldap_cached/src/lib/nss_files/nss_files.c#7 (text+ko) ====
@@ -126,7 +126,7 @@
};
ns_mtab *
-nss_module_register(const char *source, unsigned int *mtabsize,
+_files_nss_module_register(const char *source, unsigned int *mtabsize,
nss_module_unregister_fn *unreg)
{
*mtabsize = sizeof(methods) / sizeof(methods[0]);
@@ -135,8 +135,4 @@
return (methods);
}
-int
-main(int argc, char **argv)
-{
- return (0);
-}
+__weak_reference(_files_nss_module_register, nss_module_register);
==== //depot/projects/soc2006/nss_ldap_cached/src/lib/nss_icmp/Makefile#4 (text+ko) ====
@@ -2,11 +2,11 @@
.include <bsd.own.mk>
-SHLIB_MAJOR= 1
-LIB= nss_icmp.so.${SHLIB_MAJOR}
-SHLIBDIR?= /lib
+SHLIB_MAJOR= 1
+SHLIB_NAME= nss_icmp.so.${SHLIB_MAJOR}
+SHLIBDIR?= /lib
-SRCS= nss_icmp.c icmp_hosts_namadr.c
+#SRCS= nss_icmp.c icmp_hosts_namadr.c
CFLAGS+=-I${.CURDIR} -I${.CURDIR}/../libc/gen -I${.CURDIR}/../libc/include\
-I${.CURDIR}/../libc/net -I${.CURDIR}/../libnssutil
CFLAGS+=-DINET6
@@ -19,9 +19,10 @@
.endif
LDADD+= -lnssutil
-LDFLAGS+= -L${.OBJDIR/../libnssutil
+LDFLAGS+= -L${.OBJDIR}/../libnssutil
INCS=
MAN=
+.include "Makefile.inc"
.include <bsd.lib.mk>
==== //depot/projects/soc2006/nss_ldap_cached/src/lib/nss_icmp/icmp_hosts_namadr.c#2 (text+ko) ====
@@ -119,6 +119,13 @@
#include "netdb_private.h"
#include "nss_icmp.h"
+#ifdef INET6
+#define ADDRLEN(af) ((af) == AF_INET6 ? sizeof(struct in6_addr) : \
+ sizeof(struct in_addr))
+#else
+#define ADDRLEN(af) sizeof(struct in_addr)
+#endif
+
NETDB_THREAD_ALLOC(hostent)
NETDB_THREAD_ALLOC(icmp_hostent_data)
==== //depot/projects/soc2006/nss_ldap_cached/src/lib/nss_icmp/nss_icmp.c#2 (text+ko) ====
@@ -44,7 +44,7 @@
};
ns_mtab *
-nss_module_register(const char *source, unsigned int *mtabsize,
+_icmp_nss_module_register(const char *source, unsigned int *mtabsize,
nss_module_unregister_fn *unreg)
{
*mtabsize = sizeof(methods) / sizeof(methods[0]);
@@ -53,8 +53,4 @@
return (methods);
}
-int
-main(int argc, char **argv)
-{
- return (0);
-}
+__weak_reference(_icmp_nss_module_register, nss_module_register);
==== //depot/projects/soc2006/nss_ldap_cached/src/lib/nss_nis/Makefile#5 (text+ko) ====
@@ -6,8 +6,8 @@
SHLIB_NAME= nss_nis.so.${SHLIB_MAJOR}
SHLIBDIR?= /lib
-SRCS= nss_nis.c nis_hosts_namadr.c nis_hosts_addrinfo.c nis_passwd.c\
- nis_group.c nis_net.c nis_rpc.c nis_serv.c
+#SRCS= nss_nis.c nis_hosts_namadr.c nis_hosts_addrinfo.c nis_passwd.c\
+# nis_group.c nis_net.c nis_rpc.c nis_serv.c
CFLAGS+=-I${.CURDIR} -I${.CURDIR}/../libc/gen -I${.CURDIR}/../libc/include\
-I${.CURDIR}/../libc/net -I${.CURDIR}/../libnssutil
CFLAGS+=-DINET6
@@ -25,4 +25,5 @@
INCS=
MAN=
+.include "Makefile.inc"
.include <bsd.lib.mk>
==== //depot/projects/soc2006/nss_ldap_cached/src/lib/nss_nis/nss_nis.c#4 (text+ko) ====
@@ -87,7 +87,7 @@
};
ns_mtab *
-nss_module_register(const char *source, unsigned int *mtabsize,
+_nis_nss_module_register(const char *source, unsigned int *mtabsize,
nss_module_unregister_fn *unreg)
{
*mtabsize = sizeof(methods) / sizeof(methods[0]);
@@ -96,8 +96,4 @@
return (methods);
}
-int
-main(int argc, char **argv)
-{
- return (0);
-}
+__weak_reference(_nis_nss_module_register, nss_module_register);
More information about the p4-projects
mailing list