Arthur de Jong

Open Source / Free Software developer

summaryrefslogtreecommitdiffstats
path: root/nss/networks.c
diff options
context:
space:
mode:
authorArthur de Jong <arthur@arthurdejong.org>2010-10-03 23:57:11 +0200
committerArthur de Jong <arthur@arthurdejong.org>2010-10-03 23:57:11 +0200
commitbebac035f67df5083daba4613c77cbc412faee86 (patch)
treea19f3e450cc3581bf88d02f5cc7fbaee0d7b623c /nss/networks.c
parent7d3e113db9f89f3ed2fbe3854bd9e441a460483b (diff)
first attempt to split Solaris and Glibc code more and determine NSS flavour in configure script
git-svn-id: http://arthurdejong.org/svn/nss-pam-ldapd/nss-pam-ldapd-solaris@1236 ef36b2f9-881f-0410-afb5-c4e39611909c
Diffstat (limited to 'nss/networks.c')
-rw-r--r--nss/networks.c141
1 files changed, 85 insertions, 56 deletions
diff --git a/nss/networks.c b/nss/networks.c
index 623fca8..205179a 100644
--- a/nss/networks.c
+++ b/nss/networks.c
@@ -25,6 +25,9 @@
#include <string.h>
#include <errno.h>
+#include <sys/socket.h>
+#include <netinet/in.h>
+#include <arpa/inet.h>
#include "prototypes.h"
#include "common.h"
@@ -100,19 +103,6 @@ static nss_status_t read_netent(
return retv;
}
-#ifdef HAVE_NSSWITCH_H
-nss_status_t _nss_nslcd_getnetbyname_r(
-#else /* not HAVE_NSSWITCH_H */
-nss_status_t _nss_ldap_getnetbyname_r(
-#endif /* HAVE_NSSWITCH_H */
- const char *name,struct netent *result,char *buffer,
- size_t buflen,int *errnop,int *h_errnop)
-{
- NSS_BYNAME(NSLCD_ACTION_NETWORK_BYNAME,
- name,
- read_netent(fp,result,buffer,buflen,errnop,h_errnop));
-}
-
/* write an address value */
/* version 2.10 of glibc changed the address from network to host order
(changelog entry 2009-07-01) */
@@ -121,56 +111,67 @@ nss_status_t _nss_ldap_getnetbyname_r(
WRITE_INT32(fp,4); \
WRITE_INT32(fp,htonl(addr));
+#ifdef NSS_FLAVOUR_GLIBC
+
+nss_status_t _nss_ldap_getnetbyname_r(
+ const char *name,struct netent *result,char *buffer,
+ size_t buflen,int *errnop,int *h_errnop)
+{
+ NSS_BYNAME(NSLCD_ACTION_NETWORK_BYNAME,buffer,buflen,
+ name,
+ read_netent(fp,result,buffer,buflen,errnop,h_errnop));
+ return retv;
+}
+
/* Note: the af parameter is ignored and is assumed to be AF_INET */
/* TODO: implement handling of af parameter */
-#ifdef HAVE_NSSWITCH_H
-nss_status_t _nss_nslcd_getnetbyaddr_r(
-#else /* not HAVE_NSSWITCH_H */
nss_status_t _nss_ldap_getnetbyaddr_r(
-#endif /* HAVE_NSSWITCH_H */
uint32_t addr,int UNUSED(af),struct netent *result,
char *buffer,size_t buflen,int *errnop,int *h_errnop)
{
- NSS_BYGEN(NSLCD_ACTION_NETWORK_BYADDR,
+ NSS_BYGEN(NSLCD_ACTION_NETWORK_BYADDR,buffer,buflen,
WRITE_ADDRESS(fp,addr),
read_netent(fp,result,buffer,buflen,errnop,h_errnop))
+ return retv;
}
/* thread-local file pointer to an ongoing request */
static __thread TFILE *netentfp;
-#ifdef HAVE_NSSWITCH_H
-nss_status_t _nss_ldap_setnetent(nss_backend_t *net_context,void *fakeargs)
-#else /* not HAVE_NSSWITCH_H */
nss_status_t _nss_ldap_setnetent(int UNUSED(stayopen))
-#endif /* HAVE_NSSWITCH_H */
{
NSS_SETENT(netentfp);
}
-#ifdef HAVE_NSSWITCH_H
-nss_status_t _nss_nslcd_getnetent_r(
-#else /* not HAVE_NSSWITCH_H */
nss_status_t _nss_ldap_getnetent_r(
-#endif /* HAVE_NSSWITCH_H */
struct netent *result,char *buffer,size_t buflen,
int *errnop,int *h_errnop)
{
- NSS_GETENT(netentfp,NSLCD_ACTION_NETWORK_ALL,
+ NSS_GETENT(netentfp,NSLCD_ACTION_NETWORK_ALL,buffer,buflen,
read_netent(netentfp,result,buffer,buflen,errnop,h_errnop));
+ return retv;
}
-#ifdef HAVE_NSSWITCH_H
-nss_status_t _nss_ldap_endnetent(nss_backend_t *net_context,void *fakeargs)
-#else /* not HAVE_NSSWITCH_H */
nss_status_t _nss_ldap_endnetent(void)
-#endif /* HAVE_NSSWITCH_H */
{
NSS_ENDENT(netentfp);
}
-#ifdef HAVE_NSSWITCH_H
-static nss_status_t _nss_ldap_getnetbyname_r(nss_backend_t *be,void *args)
+#endif /* NSS_FLAVOUR_GLIBC */
+
+#ifdef NSS_FLAVOUR_SOLARIS
+
+static nss_status_t _nss_nslcd_getnetbyname_r(
+ const char *name,struct netent *result,char *buffer,
+ size_t buflen,int *errnop,int *h_errnop)
+{
+ NSS_BYNAME(NSLCD_ACTION_NETWORK_BYNAME,buffer,buflen,
+ name,
+ read_netent(fp,result,buffer,buflen,errnop,h_errnop));
+ return retv;
+}
+
+static nss_status_t _xnss_ldap_getnetbyname_r(nss_backend_t *UNUSED(be),void *args)
{
struct netent priv_network;
struct netent *network=NSS_ARGS(args)->buf.result?(struct netent *)NSS_ARGS(args)->buf.result:&priv_network;
@@ -181,7 +182,7 @@ static nss_status_t _nss_ldap_getnetbyname_r(nss_backend_t *be,void *args)
int h_errno;
char *data_ptr;
nss_status_t status;
- if (NSS_ARGS(args)->buf.buflen < 0)
+ if (NSS_ARGS(args)->buf.buflen<0)
{
NSS_ARGS(args)->erange=1;
return NSS_STATUS_TRYAGAIN;
@@ -219,16 +220,26 @@ static nss_status_t _nss_ldap_getnetbyname_r(nss_backend_t *be,void *args)
NSS_ARGS(args)->h_errno=h_errno;
return status;
}
-#endif /* HAVE_NSSWITCH_H */
/* Note: the af parameter is ignored and is assumed to be AF_INET */
/* TODO: implement handling of af parameter */
-#ifdef HAVE_NSSWITCH_H
-static nss_status_t _nss_ldap_getnetbyaddr_r(nss_backend_t *be,void *args)
+static nss_status_t _nss_nslcd_getnetbyaddr_r(
+ uint32_t addr,int UNUSED(af),struct netent *result,
+ char *buffer,size_t buflen,int *errnop,int *h_errnop)
+{
+ NSS_BYGEN(NSLCD_ACTION_NETWORK_BYADDR,buffer,buflen,
+ WRITE_ADDRESS(fp,addr),
+ read_netent(fp,result,buffer,buflen,errnop,h_errnop))
+ return retv;
+}
+
+/* Note: the af parameter is ignored and is assumed to be AF_INET */
+/* TODO: implement handling of af parameter */
+static nss_status_t _xnss_ldap_getnetbyaddr_r(nss_backend_t *UNUSED(be),void *args)
{
struct netent priv_network;
struct netent *network=NSS_ARGS(args)->buf.result?(struct netent *)NSS_ARGS(args)->buf.result:&priv_network;
- int addr=NSS_ARGS(args)->key.netaddr.net;
+ int addr=NSS_ARGS(args)->key.netaddr.net; /* is an addr an int? */
int af=NSS_ARGS(args)->key.netaddr.type;
char *buffer=NSS_ARGS(args)->buf.buffer;
size_t buflen=NSS_ARGS(args)->buf.buflen;
@@ -236,7 +247,7 @@ static nss_status_t _nss_ldap_getnetbyaddr_r(nss_backend_t *be,void *args)
char *data_ptr;
struct in_addr in_addr;
nss_status_t status;
- if (NSS_ARGS(args)->buf.buflen < 0)
+ if (NSS_ARGS(args)->buf.buflen<0)
{
NSS_ARGS(args)->erange=1;
return NSS_STATUS_TRYAGAIN;
@@ -276,7 +287,21 @@ static nss_status_t _nss_ldap_getnetbyaddr_r(nss_backend_t *be,void *args)
return status;
}
-static nss_status_t _nss_ldap_getnetent_r(nss_backend_t *net_context,void *args)
+static nss_status_t _xnss_ldap_setnetent(nss_backend_t *UNUSED(be),void *UNUSED(args))
+{
+ NSS_SETENT(netentfp);
+}
+
+static nss_status_t _nss_nslcd_getnetent_r(
+ struct netent *result,char *buffer,size_t buflen,
+ int *errnop,int *h_errnop)
+{
+ NSS_GETENT(netentfp,NSLCD_ACTION_NETWORK_ALL,buffer,buflen,
+ read_netent(netentfp,result,buffer,buflen,errnop,h_errnop));
+ return retv;
+}
+
+static nss_status_t _xnss_ldap_getnetent_r(nss_backend_t *UNUSED(be),void *args)
{
struct netent priv_network;
struct netent *network=NSS_ARGS(args)->buf.result?(struct netent *)NSS_ARGS(args)->buf.result:&priv_network;
@@ -285,7 +310,7 @@ static nss_status_t _nss_ldap_getnetent_r(nss_backend_t *net_context,void *args)
int h_errno;
char *data_ptr;
nss_status_t status;
- if (NSS_ARGS(args)->buf.buflen < 0)
+ if (NSS_ARGS(args)->buf.buflen<0)
{
NSS_ARGS(args)->erange=1;
return NSS_STATUS_TRYAGAIN;
@@ -321,31 +346,35 @@ static nss_status_t _nss_ldap_getnetent_r(nss_backend_t *net_context,void *args)
return status;
}
-static nss_status_t _nss_ldap_networks_destr(nss_backend_t *net_context,void *args)
+static nss_status_t _xnss_ldap_endnetent(nss_backend_t *UNUSED(be),void *UNUSED(args))
{
- return _nss_ldap_default_destr(net_context,args);
+ NSS_ENDENT(netentfp);
+}
+
+static nss_status_t _xnss_ldap_networks_destr(nss_backend_t *be,void *UNUSED(args))
+{
+ free(be);
+ return NSS_STATUS_SUCCESS;
}
static nss_backend_op_t net_ops[]={
- _nss_ldap_networks_destr,
- _nss_ldap_endnetent,
- _nss_ldap_setnetent,
- _nss_ldap_getnetent_r,
- _nss_ldap_getnetbyname_r,
- _nss_ldap_getnetbyaddr_r
+ _xnss_ldap_networks_destr,
+ _xnss_ldap_endnetent,
+ _xnss_ldap_setnetent,
+ _xnss_ldap_getnetent_r,
+ _xnss_ldap_getnetbyname_r,
+ _xnss_ldap_getnetbyaddr_r
};
-nss_backend_t *_nss_ldap_networks_constr(const char *db_name,
- const char *src_name,const char *cfg_args)
+nss_backend_t *_nss_ldap_networks_constr(const char *UNUSED(db_name),
+ const char *UNUSED(src_name),const char *UNUSED(cfg_args))
{
- nss_ldap_backend_t *be;
- if (!(be=(nss_ldap_backend_t *)malloc(sizeof(*be))))
+ nss_backend_t *be;
+ if (!(be=(nss_backend_t *)malloc(sizeof(*be))))
return NULL;
be->ops=net_ops;
be->n_ops=sizeof(net_ops)/sizeof(nss_backend_op_t);
- if (_nss_ldap_default_constr(be)!=NSS_STATUS_SUCCESS)
- return NULL;
return (nss_backend_t *)be;
}
-#endif /* HAVE_NSSWITCH_H */
+#endif /* NSS_FLAVOUR_SOLARIS */