summaryrefslogtreecommitdiff
path: root/compat
diff options
context:
space:
mode:
authorArthur de Jong <arthur@arthurdejong.org>2010-06-17 19:05:33 +0000
committerArthur de Jong <arthur@arthurdejong.org>2010-06-17 19:05:33 +0000
commitbe3ddc301fff77c686f63eb5ac9e9563ef4873f3 (patch)
treef2f9a01115993afa80e727ef8a5880fdbbacbbcd /compat
parentd202a4cb8d2b777c692b0b9af7cee13633ae5ce7 (diff)
have more compatibility code for NSS module and move compatibility code to compat directory
git-svn-id: http://arthurdejong.org/svn/nss-pam-ldapd/nss-pam-ldapd@1146 ef36b2f9-881f-0410-afb5-c4e39611909c
Diffstat (limited to 'compat')
-rw-r--r--compat/Makefile.am1
-rw-r--r--compat/nss_compat.h112
2 files changed, 113 insertions, 0 deletions
diff --git a/compat/Makefile.am b/compat/Makefile.am
index 06ac51b..63c2f05 100644
--- a/compat/Makefile.am
+++ b/compat/Makefile.am
@@ -25,6 +25,7 @@ AM_CFLAGS = -fPIC
EXTRA_DIST = getopt_long.c getopt_long.h \
daemon.c daemon.h \
ether.c ether.h \
+ nss_compat.h \
ldap_compat.h pagectrl.c ldap_passwd_s.c ldap_initialize.c \
pam_compat.h pam_get_authtok.c pam_prompt.c
diff --git a/compat/nss_compat.h b/compat/nss_compat.h
new file mode 100644
index 0000000..b438b8f
--- /dev/null
+++ b/compat/nss_compat.h
@@ -0,0 +1,112 @@
+/*
+ nss_compat.h - compatibility definitions for NSS functions
+
+ Copyright (C) 2010 Arthur de Jong
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 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
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with this library; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA
+*/
+
+#ifndef COMPAT__NSS_H
+#define COMPAT__NSS_H
+
+#include <nss.h>
+#ifdef HAVE_ALIASES_H
+#include <aliases.h>
+#endif
+#include <sys/socket.h>
+#include <sys/types.h>
+#include <grp.h>
+#include <netdb.h>
+#include <pwd.h>
+#ifdef HAVE_SHADOW_H
+#include <shadow.h>
+#endif /* HAVE_SHADOW_H */
+#ifdef HAVE_RPC_RPCENT_H
+#include <rpc/rpcent.h>
+#endif /* HAVE_RPC_RPCENT_H */
+
+#include "compat/ether.h"
+
+/* Define an aliasent if it was not found on the system. */
+#ifndef HAVE_STRUCT_ALIASENT
+struct aliasent
+{
+ char *alias_name;
+ size_t alias_members_len;
+ char **alias_members;
+ int alias_local;
+};
+#endif /* not HAVE_STRUCT_ALIASENT */
+
+/* Define an rpcent if it was not found on the system */
+#ifndef HAVE_STRUCT_RPCENT
+struct rpcent
+{
+ char *r_name;
+ char **r_aliases;
+ int r_number;
+};
+#endif /* not HAVE_STRUCT_RPCENT */
+
+/* We define struct etherent here because it does not seem to
+ be defined in any publicly available header file exposed
+ by glibc. This is taken from include/netinet/ether.h
+ of the glibc (2.3.6) source tarball. */
+#ifndef HAVE_STRUCT_ETHERENT
+struct etherent
+{
+ const char *e_name;
+ struct ether_addr e_addr;
+};
+#endif /* not HAVE_STRUCT_ETHERENT */
+
+/* We also define struct __netgrent because it's definition is
+ not publically available. This is taken from inet/netgroup.h
+ of the glibc (2.3.6) source tarball.
+ The first part of the struct is the only part that is modified
+ by our getnetgrent() function, all the other fields are not
+ touched at all. */
+struct __netgrent
+{
+ enum { triple_val, group_val } type;
+ union
+ {
+ struct
+ {
+ const char *host;
+ const char *user;
+ const char *domain;
+ } triple;
+ const char *group;
+ } val;
+ /* the following stuff is used by some NSS services
+ but not by ours (it's not completely clear how these
+ are shared between different services) or is used
+ by our caller */
+ char *data;
+ size_t data_size;
+ union
+ {
+ char *cursor;
+ unsigned long int position;
+ } insertedname; /* added name to union to avoid warning */
+ int first;
+ struct name_list *known_groups;
+ struct name_list *needed_groups;
+ void *nip; /* changed from `service_user *nip' */
+};
+
+#endif /* not COMPAT__NSS_H */