summaryrefslogtreecommitdiff
path: root/nss/netgroup.c
diff options
context:
space:
mode:
authorArthur de Jong <arthur@arthurdejong.org>2010-10-10 20:21:39 +0000
committerArthur de Jong <arthur@arthurdejong.org>2010-10-10 20:21:39 +0000
commit002ed77f4772e6d028bd4ef7900c518005bc913e (patch)
treefc360b1707c22862d3e80c8b8616d554e13a8796 /nss/netgroup.c
parent5ec1d7dacd5b0610ddcbcfce0508e6978df532e4 (diff)
generate Solaris NSS functions using same macros that are used for Glibc, splitting functionality to make a string representation into a single function per NSS map
git-svn-id: http://arthurdejong.org/svn/nss-pam-ldapd/nss-pam-ldapd-solaris@1258 ef36b2f9-881f-0410-afb5-c4e39611909c
Diffstat (limited to 'nss/netgroup.c')
-rw-r--r--nss/netgroup.c36
1 files changed, 15 insertions, 21 deletions
diff --git a/nss/netgroup.c b/nss/netgroup.c
index e3a86de..4ad50e7 100644
--- a/nss/netgroup.c
+++ b/nss/netgroup.c
@@ -117,9 +117,8 @@ nss_status_t _nss_ldap_getnetgrent_r(
struct __netgrent *result,
char *buffer,size_t buflen,int *errnop)
{
- NSS_GETENT(netgrentfp,NSLCD_ACTION_NETGROUP_BYNAME,buffer,buflen,
+ NSS_GETENT(netgrentfp,NSLCD_ACTION_NETGROUP_BYNAME,
read_netgrent(netgrentfp,result,buffer,buflen,errnop));
- return retv;
}
/* close the stream opened with setnetgrent() above */
@@ -192,13 +191,6 @@ static char *_nss_ldap_chase_netgroup(nss_ldap_netgr_backend_t *ngbe)
/* thread-local file pointer to an ongoing request */
static __thread TFILE *netgrentfp;
-static nss_status_t _nss_nslcd_getnetgrent_r(struct __netgrent *result,char *buffer,size_t buflen,int *errnop)
-{
- NSS_GETENT(netgrentfp,NSLCD_ACTION_NETGROUP_BYNAME,buffer,buflen,
- read_netgrent(netgrentfp,result,buffer,buflen,errnop));
- return retv;
-}
-
static nss_status_t _nss_nslcd_setnetgrent(const char *group,struct __netgrent UNUSED(*result))
{
/* we cannot use NSS_SETENT() here because we have a parameter that is only
@@ -206,8 +198,7 @@ static nss_status_t _nss_nslcd_setnetgrent(const char *group,struct __netgrent U
int32_t tmpint32;
int errnocp;
int *errnop;
- if (!_nss_ldap_enablelookups)
- return NSS_STATUS_UNAVAIL;
+ NSS_AVAILCHECK;
errnop=&errnocp;
/* check parameter */
if ((group==NULL)||(group[0]=='\0'))
@@ -217,6 +208,12 @@ static nss_status_t _nss_nslcd_setnetgrent(const char *group,struct __netgrent U
return NSS_STATUS_SUCCESS;
}
+static nss_status_t _nss_nslcd_getnetgrent_r(struct __netgrent *result,char *buffer,size_t buflen,void *args)
+{
+ NSS_GETENT(netgrentfp,NSLCD_ACTION_NETGROUP_BYNAME,
+ read_netgrent(netgrentfp,result,buffer,buflen,errnop));
+}
+
static nss_status_t _xnss_ldap_getnetgrent_r(nss_backend_t *_be,void *_args)
{
nss_ldap_netgr_backend_t *ngbe=(nss_ldap_netgr_backend_t *)_be;
@@ -224,15 +221,14 @@ static nss_status_t _xnss_ldap_getnetgrent_r(nss_backend_t *_be,void *_args)
struct __netgrent result;
char *group=NULL;
int done=0;
- int err;
nss_status_t status,rc;
args->status=NSS_NETGR_NO;
while (!done)
{
- status=_nss_nslcd_getnetgrent_r(&result,args->buffer,args->buflen,&err);
+ status=_nss_nslcd_getnetgrent_r(&result,args->buffer,args->buflen,args);
if (status!=NSS_STATUS_SUCCESS)
{
- if (err==ENOENT)
+ if (errno==ENOENT)
{
/* done with the current netgroup */
/* explore nested netgroup,if any */
@@ -298,7 +294,7 @@ static nss_status_t _xnss_ldap_endnetgrent(nss_backend_t UNUSED(*be),void UNUSED
NSS_ENDENT(netgrentfp);
}
-static nss_status_t _xnss_ldap_netgroup_destr(nss_backend_t *be,void UNUSED(*args))
+static nss_status_t destructor(nss_backend_t *be,void UNUSED(*args))
{
nss_ldap_netgr_backend_t *ngbe=(nss_ldap_netgr_backend_t *)be;
/* free list of nested netgroups */
@@ -311,7 +307,7 @@ static nss_status_t _xnss_ldap_netgroup_destr(nss_backend_t *be,void UNUSED(*arg
static nss_status_t _xnss_ldap_netgr_set(nss_backend_t *be,void *_args);
static nss_backend_op_t netgroup_ops[]={
- _xnss_ldap_netgroup_destr, /* NSS_DBOP_DESTRUCTOR */
+ destructor, /* NSS_DBOP_DESTRUCTOR */
_xnss_ldap_endnetgrent, /* NSS_DBOP_ENDENT */
_xnss_ldap_setnetgrent, /* NSS_DBOP_SETNET */
_xnss_ldap_getnetgrent_r, /* NSS_DBOP_GETENT */
@@ -325,7 +321,6 @@ static nss_status_t _xnss_ldap_netgr_set(nss_backend_t *be,void *_args)
struct nss_setnetgrent_args *args;
nss_ldap_netgr_backend_t *ngbe;
struct __netgrent result;
- char *group=NULL;
args=(struct nss_setnetgrent_args *)_args;
args->iterator=NULL; /* initialize */
ngbe=(nss_ldap_netgr_backend_t *)malloc(sizeof(*ngbe));
@@ -336,18 +331,17 @@ static nss_status_t _xnss_ldap_netgr_set(nss_backend_t *be,void *_args)
ngbe->state=NULL;
ngbe->known_groups=NULL;
ngbe->needed_groups=NULL;
- group=(char *)args->netgroup;
- stat=_nss_nslcd_setnetgrent(group,&result);
+ stat=_nss_nslcd_setnetgrent(args->netgroup,&result);
if (stat!=NSS_STATUS_SUCCESS)
{
free(be);
return stat;
}
/* place the group name in known list */
- stat=_nss_ldap_namelist_push(&ngbe->known_groups,group);
+ stat=_nss_ldap_namelist_push(&ngbe->known_groups,args->netgroup);
if (stat!=NSS_STATUS_SUCCESS)
{
- _xnss_ldap_netgroup_destr((nss_backend_t *)ngbe,NULL);
+ destructor((nss_backend_t *)ngbe,NULL);
return stat;
}
args->iterator=(nss_backend_t *)ngbe;