Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 10 Sep 2002 10:10:05 -0700 (PDT)
From:      Juan Salaverria <rael@vectorstar.net>
To:        freebsd-bugs@FreeBSD.org
Subject:   Re: misc/41817: pw groupshow doesn't include the login group
Message-ID:  <200209101710.g8AHA5Sf099763@freefall.freebsd.org>

next in thread | raw e-mail | index | archive | help
The following reply was made to PR misc/41817; it has been noted by GNATS.

From: Juan Salaverria <rael@vectorstar.net>
To: freebsd-gnats-submit@FreeBSD.org
Cc:  
Subject: Re: misc/41817: pw groupshow doesn't include the login group
Date: 03 Sep 2002 21:48:48 -0300

 Hi Steve, I spent some time at weekend and made a patch to 
 deal with this problem. Please take a look at it, I tested it
 with few users and it's working. If you found any problem just
 tell me and I'll work on it.
 Cheers,
 
 Juan
 
 
 diff -ruN usr.sbin/pw.ori/pw_group.c usr.sbin/pw/pw_group.c
 --- usr.sbin/pw.ori/pw_group.c	Wed Jun 28 16:19:04 2000
 +++ usr.sbin/pw/pw_group.c	Mon Sep  2 09:10:20 2002
 @@ -38,6 +38,7 @@
  #include "bitmap.h"
  
  
 +static int 	chk_usrname(char ** mem, char * usr);
  static int      print_group(struct group * grp, int pretty);
  static gid_t    gr_gidpolicy(struct userconf * cnf, struct cargs *
 args);
  
 @@ -51,6 +52,12 @@
  	struct group   *grp = NULL;
  	int	        grmembers = 0;
  	char           **members = NULL;
 +        int		pwmembers = 0;
 +        int		idx = 0;
 +        int		idx_gr_mem = 0;
 +        int		last_gr_mem= 0;
 +	struct passwd	*usr_pass=NULL;
 +        char		**pass_mem= NULL;
  
  	static struct group fakegroup =
  	{
 @@ -95,6 +102,33 @@
  	}
  	grp = (a_name != NULL) ? GETGRNAM(a_name->val) : GETGRGID((gid_t)
 atoi(a_gid->val));
  
 +	/* This is to take care of the initial groups defined in the passwd
 file */ 
 +        if (grp != NULL) {
 +		extendarray(&pass_mem, &pwmembers, 200);
 +        	while (grp->gr_mem[idx] != NULL) ++idx;
 +		last_gr_mem = idx;
 +	
 +		SETPWENT();
 +		idx = 0;
 +		while ((usr_pass= GETPWENT()) != NULL) {
 + 		
 +			if ( (gid_t) usr_pass->pw_gid == (gid_t) grp->gr_gid ) {
 +				if (extendarray(&pass_mem, &pwmembers, idx + 2) != -1) {
 +                                        pass_mem[idx] =
 malloc(strlen(usr_pass->pw_name)+1);
 +                                        strcpy(pass_mem[idx],
 usr_pass->pw_name);
 +					if (!chk_usrname(grp->gr_mem, pass_mem[idx])) {
 +						grp->gr_mem[last_gr_mem+idx_gr_mem] = pass_mem[idx];
 +						idx_gr_mem++;
 +					}
 +				idx++;
 +                        	}
 +			}
 +		}
 +        	pass_mem[idx] = NULL;
 +		grp->gr_mem[last_gr_mem+idx_gr_mem] = NULL;
 +		ENDPWENT();
 +        }
 +
  	if (mode == M_UPDATE || mode == M_DELETE || mode == M_PRINT) {
  		if (a_name == NULL && grp == NULL)	/* Try harder */
  			grp = GETGRGID(atoi(a_gid->val));
 @@ -349,4 +383,18 @@
  		fputs("\n\n", stdout);
  	}
  	return EXIT_SUCCESS;
 +}
 +
 +static int
 +chk_usrname(char ** mem, char * usr)
 +{
 +int u = 0;
 +
 +	while (mem[u] != NULL) {
 +		if(!strcmp(mem[u],usr))
 +			return 1;
 +	u++;
 +	}
 +
 +return 0;
  }
 
 
 

To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-bugs" in the body of the message




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200209101710.g8AHA5Sf099763>