mirror of
https://git.freebsd.org/ports.git
synced 2025-07-18 01:39:16 -04:00
Add netgroup support.
Submitted by: markj@
This commit is contained in:
parent
9b0734ea61
commit
d3085a8d85
Notes:
svn2git
2021-03-31 03:12:20 +00:00
svn path=/head/; revision=477119
3 changed files with 115 additions and 3 deletions
|
@ -3,7 +3,7 @@
|
||||||
|
|
||||||
PORTNAME= nss_ldap
|
PORTNAME= nss_ldap
|
||||||
PORTVERSION= 1.${NSS_LDAP_VERSION}
|
PORTVERSION= 1.${NSS_LDAP_VERSION}
|
||||||
PORTREVISION= 12
|
PORTREVISION= 13
|
||||||
CATEGORIES= net
|
CATEGORIES= net
|
||||||
MASTER_SITES= http://www.padl.com/download/ \
|
MASTER_SITES= http://www.padl.com/download/ \
|
||||||
LOCAL/martymac
|
LOCAL/martymac
|
||||||
|
|
|
@ -1,7 +1,8 @@
|
||||||
#include <errno.h>
|
|
||||||
#include <stdlib.h>
|
|
||||||
#include <sys/param.h>
|
#include <sys/param.h>
|
||||||
#include <netinet/in.h>
|
#include <netinet/in.h>
|
||||||
|
|
||||||
|
#include <errno.h>
|
||||||
|
#include <stdlib.h>
|
||||||
#include <pwd.h>
|
#include <pwd.h>
|
||||||
#include <grp.h>
|
#include <grp.h>
|
||||||
#include <nss.h>
|
#include <nss.h>
|
||||||
|
@ -39,6 +40,14 @@ extern enum nss_status _nss_ldap_gethostbyaddr_r (struct in_addr * addr, int len
|
||||||
struct hostent * result, char *buffer,
|
struct hostent * result, char *buffer,
|
||||||
size_t buflen, int *errnop, int *h_errnop);
|
size_t buflen, int *errnop, int *h_errnop);
|
||||||
|
|
||||||
|
struct __netgrent;
|
||||||
|
extern enum nss_status _nss_ldap_netgrp_load_result(struct __netgrent *result,
|
||||||
|
char **hostp, char **userp, char **domp);
|
||||||
|
extern enum nss_status _nss_ldap_getnetgrent_r(struct __netgrent *result, char *buffer,
|
||||||
|
size_t buflen, int *errnop);
|
||||||
|
extern enum nss_status _nss_ldap_setnetgrent(char *group, struct __netgrent *result);
|
||||||
|
extern enum nss_status _nss_ldap_endnetgrent(struct __netgrent *result);
|
||||||
|
|
||||||
NSS_METHOD_PROTOTYPE(__nss_compat_getgrnam_r);
|
NSS_METHOD_PROTOTYPE(__nss_compat_getgrnam_r);
|
||||||
NSS_METHOD_PROTOTYPE(__nss_compat_getgrgid_r);
|
NSS_METHOD_PROTOTYPE(__nss_compat_getgrgid_r);
|
||||||
NSS_METHOD_PROTOTYPE(__nss_compat_getgrent_r);
|
NSS_METHOD_PROTOTYPE(__nss_compat_getgrent_r);
|
||||||
|
@ -56,6 +65,10 @@ NSS_METHOD_PROTOTYPE(__nss_compat_gethostbyname);
|
||||||
NSS_METHOD_PROTOTYPE(__nss_compat_gethostbyname2);
|
NSS_METHOD_PROTOTYPE(__nss_compat_gethostbyname2);
|
||||||
NSS_METHOD_PROTOTYPE(__nss_compat_gethostbyaddr);
|
NSS_METHOD_PROTOTYPE(__nss_compat_gethostbyaddr);
|
||||||
|
|
||||||
|
static NSS_METHOD_PROTOTYPE(__nss_compat_getnetgrent_r);
|
||||||
|
static NSS_METHOD_PROTOTYPE(__nss_compat_setnetgrent);
|
||||||
|
static NSS_METHOD_PROTOTYPE(__nss_compat_endnetgrent);
|
||||||
|
|
||||||
static ns_mtab methods[] = {
|
static ns_mtab methods[] = {
|
||||||
{ NSDB_GROUP, "getgrnam_r", __nss_compat_getgrnam_r, _nss_ldap_getgrnam_r },
|
{ NSDB_GROUP, "getgrnam_r", __nss_compat_getgrnam_r, _nss_ldap_getgrnam_r },
|
||||||
{ NSDB_GROUP, "getgrgid_r", __nss_compat_getgrgid_r, _nss_ldap_getgrgid_r },
|
{ NSDB_GROUP, "getgrgid_r", __nss_compat_getgrgid_r, _nss_ldap_getgrgid_r },
|
||||||
|
@ -74,6 +87,10 @@ static ns_mtab methods[] = {
|
||||||
{ NSDB_HOSTS, "gethostbyaddr", __nss_compat_gethostbyaddr, _nss_ldap_gethostbyaddr_r },
|
{ NSDB_HOSTS, "gethostbyaddr", __nss_compat_gethostbyaddr, _nss_ldap_gethostbyaddr_r },
|
||||||
{ NSDB_HOSTS, "gethostbyname2", __nss_compat_gethostbyname2, _nss_ldap_gethostbyname2_r },
|
{ NSDB_HOSTS, "gethostbyname2", __nss_compat_gethostbyname2, _nss_ldap_gethostbyname2_r },
|
||||||
|
|
||||||
|
{ NSDB_NETGROUP, "getnetgrent_r", __nss_compat_getnetgrent_r, _nss_ldap_getnetgrent_r },
|
||||||
|
{ NSDB_NETGROUP, "setnetgrent", __nss_compat_setnetgrent, _nss_ldap_setnetgrent },
|
||||||
|
{ NSDB_NETGROUP, "endnetgrent", __nss_compat_endnetgrent, _nss_ldap_endnetgrent },
|
||||||
|
|
||||||
{ NSDB_GROUP_COMPAT, "getgrnam_r", __nss_compat_getgrnam_r, _nss_ldap_getgrnam_r },
|
{ NSDB_GROUP_COMPAT, "getgrnam_r", __nss_compat_getgrnam_r, _nss_ldap_getgrnam_r },
|
||||||
{ NSDB_GROUP_COMPAT, "getgrgid_r", __nss_compat_getgrgid_r, _nss_ldap_getgrgid_r },
|
{ NSDB_GROUP_COMPAT, "getgrgid_r", __nss_compat_getgrgid_r, _nss_ldap_getgrgid_r },
|
||||||
{ NSDB_GROUP_COMPAT, "getgrent_r", __nss_compat_getgrent_r, _nss_ldap_getgrent_r },
|
{ NSDB_GROUP_COMPAT, "getgrent_r", __nss_compat_getgrent_r, _nss_ldap_getgrent_r },
|
||||||
|
@ -217,3 +234,67 @@ static int __freebsd_getgroupmembership(void *retval, void *mdata, va_list ap)
|
||||||
|
|
||||||
return __nss_compat_result(s, err);
|
return __nss_compat_result(s, err);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void *_netgr_result;
|
||||||
|
|
||||||
|
static int
|
||||||
|
__nss_compat_getnetgrent_r(void *retval, void *mdata, va_list ap)
|
||||||
|
{
|
||||||
|
char **hostp, **userp, **domp;
|
||||||
|
char *buffer;
|
||||||
|
size_t bufsize;
|
||||||
|
enum nss_status rv;
|
||||||
|
int *errorp;
|
||||||
|
int ret;
|
||||||
|
|
||||||
|
hostp = va_arg(ap, char **);
|
||||||
|
userp = va_arg(ap, char **);
|
||||||
|
domp = va_arg(ap, char **);
|
||||||
|
buffer = va_arg(ap, char *);
|
||||||
|
bufsize = va_arg(ap, size_t);
|
||||||
|
errorp = va_arg(ap, int *);
|
||||||
|
|
||||||
|
do {
|
||||||
|
*errorp = 0;
|
||||||
|
rv = _nss_ldap_getnetgrent_r(_netgr_result, buffer, bufsize,
|
||||||
|
errorp);
|
||||||
|
ret = __nss_compat_result(rv, *errorp);
|
||||||
|
if (ret != NS_SUCCESS)
|
||||||
|
return (ret);
|
||||||
|
rv = _nss_ldap_netgrp_load_result(_netgr_result, hostp, userp,
|
||||||
|
domp);
|
||||||
|
ret = __nss_compat_result(rv, 0);
|
||||||
|
} while (ret == NS_TRYAGAIN);
|
||||||
|
|
||||||
|
return (NS_SUCCESS);
|
||||||
|
}
|
||||||
|
|
||||||
|
extern size_t _nss_ldap_netgrent_sz;
|
||||||
|
|
||||||
|
static int
|
||||||
|
__nss_compat_setnetgrent(void *retval, void *mdata, va_list ap)
|
||||||
|
{
|
||||||
|
const char *netgroup;
|
||||||
|
int ret;
|
||||||
|
|
||||||
|
netgroup = va_arg(ap, const char *);
|
||||||
|
|
||||||
|
if (_netgr_result != NULL)
|
||||||
|
free(_netgr_result);
|
||||||
|
_netgr_result = calloc(1, _nss_ldap_netgrent_sz);
|
||||||
|
if (_netgr_result == NULL)
|
||||||
|
return (NS_TRYAGAIN);
|
||||||
|
|
||||||
|
return (_nss_ldap_setnetgrent(netgroup, _netgr_result));
|
||||||
|
}
|
||||||
|
|
||||||
|
static int
|
||||||
|
__nss_compat_endnetgrent(void *retval, void *mdata, va_list ap)
|
||||||
|
{
|
||||||
|
int ret;
|
||||||
|
|
||||||
|
ret = _nss_ldap_endnetgrent(_netgr_result);
|
||||||
|
free(_netgr_result);
|
||||||
|
_netgr_result = NULL;
|
||||||
|
return (ret);
|
||||||
|
}
|
||||||
|
|
31
net/nss_ldap/files/patch-ldap-netgrp.c
Normal file
31
net/nss_ldap/files/patch-ldap-netgrp.c
Normal file
|
@ -0,0 +1,31 @@
|
||||||
|
--- ldap-netgrp.c.orig 2016-06-05 21:43:56 UTC
|
||||||
|
+++ ldap-netgrp.c
|
||||||
|
@@ -161,6 +161,8 @@ struct __netgrent
|
||||||
|
struct name_list *needed_groups;
|
||||||
|
};
|
||||||
|
|
||||||
|
+size_t _nss_ldap_netgrent_sz = sizeof(struct __netgrent);
|
||||||
|
+
|
||||||
|
static char *
|
||||||
|
strip_whitespace (char *str)
|
||||||
|
{
|
||||||
|
@@ -384,6 +386,19 @@ _nss_ldap_getnetgrent_r (struct __netgre
|
||||||
|
{
|
||||||
|
return _nss_ldap_parse_netgr (result, buffer, buflen);
|
||||||
|
}
|
||||||
|
+
|
||||||
|
+enum nss_status
|
||||||
|
+_nss_ldap_netgrp_load_result (struct __netgrent *result,
|
||||||
|
+ char **hostp, char **userp, char **domp)
|
||||||
|
+{
|
||||||
|
+
|
||||||
|
+ if (result->type == group_val)
|
||||||
|
+ return NSS_TRYAGAIN;
|
||||||
|
+ *hostp = result->val.triple.host;
|
||||||
|
+ *userp = result->val.triple.user;
|
||||||
|
+ *domp = result->val.triple.domain;
|
||||||
|
+ return NSS_SUCCESS;
|
||||||
|
+}
|
||||||
|
#endif /* HAVE_NSS_H */
|
||||||
|
|
||||||
|
#if defined(HAVE_NSSWITCH_H) || defined(HAVE_IRS_H)
|
Loading…
Add table
Reference in a new issue