[SCM] Samba Shared Repository - branch master updated - release-4-0-0alpha7-2032-g930ea7c

Günther Deschner gd at samba.org
Thu Jun 4 19:24:10 GMT 2009


The branch, master has been updated
       via  930ea7c8a8879e98826ffdc391bab8b5a2864c5f (commit)
      from  46e2bbd141b9fb88019462f90886b39cd3eac80b (commit)

http://gitweb.samba.org/?p=samba.git;a=shortlog;h=master


- Log -----------------------------------------------------------------
commit 930ea7c8a8879e98826ffdc391bab8b5a2864c5f
Author: Günther Deschner <gd at samba.org>
Date:   Thu Jun 4 20:12:27 2009 +0200

    nss_wrapper: remove getgrouplist from nwrap_ops table.
    
    Guenther

-----------------------------------------------------------------------

Summary of changes:
 lib/nss_wrapper/nss_wrapper.c |  136 +++++++++++++++++++----------------------
 1 files changed, 64 insertions(+), 72 deletions(-)


Changeset truncated at 500 lines:

diff --git a/lib/nss_wrapper/nss_wrapper.c b/lib/nss_wrapper/nss_wrapper.c
index 8789906..7b67e69 100644
--- a/lib/nss_wrapper/nss_wrapper.c
+++ b/lib/nss_wrapper/nss_wrapper.c
@@ -164,7 +164,6 @@ struct nwrap_ops {
 	int		(*nw_getgrent_r)(struct group *grdst, char *buf,
 				      size_t buflen, struct group **grdstp);
 	void		(*nw_endgrent)(void);
-	int		(*nw_getgrouplist)(const char *user, gid_t group, gid_t *groups, int *ngroups);
 };
 
 static struct passwd *nwrap_files_getpwnam(const char *name);
@@ -190,7 +189,6 @@ static struct group *nwrap_files_getgrent(void);
 static int nwrap_files_getgrent_r(struct group *grdst, char *buf,
 				  size_t buflen, struct group **grdstp);
 static void nwrap_files_endgrent(void);
-static int nwrap_files_getgrouplist(const char *user, gid_t group, gid_t *groups, int *ngroups);
 
 struct nwrap_ops nwrap_files_ops = {
 	.name		= "files",
@@ -211,7 +209,6 @@ struct nwrap_ops nwrap_files_ops = {
 	.nw_getgrent	= nwrap_files_getgrent,
 	.nw_getgrent_r	= nwrap_files_getgrent_r,
 	.nw_endgrent	= nwrap_files_endgrent,
-	.nw_getgrouplist= nwrap_files_getgrouplist
 };
 
 struct nwrap_main {
@@ -1124,74 +1121,6 @@ static void nwrap_files_endgrent(void)
 	nwrap_gr_global.idx = 0;
 }
 
-static int nwrap_files_getgrouplist(const char *user, gid_t group, gid_t *groups, int *ngroups)
-{
-	struct group *grp;
-	gid_t *groups_tmp;
-	int count = 1;
-	const char *name_of_group = NULL;
-
-	NWRAP_DEBUG(("%s: getgrouplist called for %s\n", __location__, user));
-
-	groups_tmp = (gid_t *)malloc(count * sizeof(gid_t));
-	if (!groups_tmp) {
-		NWRAP_ERROR(("%s:calloc failed\n",__location__));
-		errno = ENOMEM;
-		return -1;
-	}
-
-	memcpy(groups_tmp, &group, sizeof(gid_t));
-
-	grp = nwrap_files_getgrgid(group);
-	if (grp) {
-		name_of_group = grp->gr_name;
-	}
-
-	nwrap_files_setgrent();
-	while ((grp = nwrap_files_getgrent()) != NULL) {
-		int i = 0;
-
-		NWRAP_VERBOSE(("%s: inspecting %s for group membership\n",
-			       __location__, grp->gr_name));
-
-		for (i=0; grp->gr_mem && grp->gr_mem[i] != NULL; i++) {
-
-			if ((strcmp(user, grp->gr_mem[i]) == 0) &&
-			    (strcmp(name_of_group, grp->gr_name) != 0)) {
-
-				NWRAP_DEBUG(("%s: %s is member of %s\n",
-					__location__, user, grp->gr_name));
-
-				groups_tmp = (gid_t *)realloc(groups_tmp, (count + 1) * sizeof(gid_t));
-				if (!groups_tmp) {
-					NWRAP_ERROR(("%s:calloc failed\n",__location__));
-					errno = ENOMEM;
-					return -1;
-				}
-
-				memcpy(&groups_tmp[count], &grp->gr_gid, sizeof(gid_t));
-				count++;
-			}
-		}
-	}
-	nwrap_files_endgrent();
-
-	NWRAP_VERBOSE(("%s: %s is member of %d groups: %d\n",
-		       __location__, user, *ngroups));
-
-	if (*ngroups < count) {
-		*ngroups = count;
-		free(groups_tmp);
-		return -1;
-	}
-
-	*ngroups = count;
-	memcpy(groups, groups_tmp, count * sizeof(gid_t));
-	free(groups_tmp);
-
-	return count;
-}
-
 /*
  * PUBLIC interface
  */
@@ -1391,9 +1320,72 @@ _PUBLIC_ void nwrap_endgrent(void)
 
 _PUBLIC_ int nwrap_getgrouplist(const char *user, gid_t group, gid_t *groups, int *ngroups)
 {
+	struct group *grp;
+	gid_t *groups_tmp;
+	int count = 1;
+	const char *name_of_group = NULL;
+
 	if (!nwrap_enabled()) {
 		return real_getgrouplist(user, group, groups, ngroups);
 	}
 
-	return nwrap_main_global->ops->nw_getgrouplist(user, group, groups, ngroups);
+	NWRAP_DEBUG(("%s: getgrouplist called for %s\n", __location__, user));
+
+	groups_tmp = (gid_t *)malloc(count * sizeof(gid_t));
+	if (!groups_tmp) {
+		NWRAP_ERROR(("%s:calloc failed\n",__location__));
+		errno = ENOMEM;
+		return -1;
+	}
+
+	memcpy(groups_tmp, &group, sizeof(gid_t));
+
+	grp = nwrap_getgrgid(group);
+	if (grp) {
+		name_of_group = grp->gr_name;
+	}
+
+	nwrap_setgrent();
+	while ((grp = nwrap_getgrent()) != NULL) {
+		int i = 0;
+
+		NWRAP_VERBOSE(("%s: inspecting %s for group membership\n",
+			       __location__, grp->gr_name));
+
+		for (i=0; grp->gr_mem && grp->gr_mem[i] != NULL; i++) {
+
+			if ((strcmp(user, grp->gr_mem[i]) == 0) &&
+			    (strcmp(name_of_group, grp->gr_name) != 0)) {
+
+				NWRAP_DEBUG(("%s: %s is member of %s\n",
+					__location__, user, grp->gr_name));
+
+				groups_tmp = (gid_t *)realloc(groups_tmp, (count + 1) * sizeof(gid_t));
+				if (!groups_tmp) {
+					NWRAP_ERROR(("%s:calloc failed\n",__location__));
+					errno = ENOMEM;
+					return -1;
+				}
+
+				memcpy(&groups_tmp[count], &grp->gr_gid, sizeof(gid_t));
+				count++;
+			}
+		}
+	}
+	nwrap_endgrent();
+
+	NWRAP_VERBOSE(("%s: %s is member of %d groups: %d\n",
+		       __location__, user, *ngroups));
+
+	if (*ngroups < count) {
+		*ngroups = count;
+		free(groups_tmp);
+		return -1;
+	}
+
+	*ngroups = count;
+	memcpy(groups, groups_tmp, count * sizeof(gid_t));
+	free(groups_tmp);
+
+	return count;
 }


-- 
Samba Shared Repository


More information about the samba-cvs mailing list