Date: Sat, 19 Jan 2002 17:20:58 -0500 (EST) From: Robert Watson <rwatson@freebsd.org> To: Mark Murray <mark@grondar.za> Cc: audit@freebsd.org Subject: Re: Fixes for gid_t usage in libc Message-ID: <Pine.NEB.3.96L.1020119171955.32726O-100000@fledge.watson.org> In-Reply-To: <200201172200.g0HM0St19717@grimreaper.grondar.org>
next in thread | previous in thread | raw e-mail | index | archive | help
It's worth pointing out that there's a PR open on the uid_t/gid_t problem
in the System V IPC interfaces; however, unlike in this situation, that
case has a binary compatibility problem since the interfaces currently use
16-bit types :-(. We'll need to hack in binary compatibility for that,
and also handle the linuxlator properly. However, these changes look
generally good to me -- does this bring us closer or further from any
standards compliance?
Robert N M Watson FreeBSD Core Team, TrustedBSD Project
robert@fledge.watson.org NAI Labs, Safeport Network Services
On Thu, 17 Jan 2002, Mark Murray wrote:
> Hi
>
> Reviews please?
>
> This fixes some places where groups are handled in integers
> rather than gid_t's.
>
> I've been running it for more than a month.
>
> M
>
> Index: include/grp.h
> ===================================================================
> RCS file: /home/ncvs/src/include/grp.h,v
> retrieving revision 1.3
> diff -u -d -r1.3 grp.h
> --- include/grp.h 7 May 1997 19:59:59 -0000 1.3
> +++ include/grp.h 7 Dec 2001 20:48:47 -0000
> @@ -48,7 +48,7 @@
> struct group {
> char *gr_name; /* group name */
> char *gr_passwd; /* group password */
> - int gr_gid; /* group id */
> + gid_t gr_gid; /* group id */
> char **gr_mem; /* group members */
> };
>
> Index: include/unistd.h
> ===================================================================
> RCS file: /home/ncvs/src/include/unistd.h,v
> retrieving revision 1.46
> diff -u -d -r1.46 unistd.h
> --- include/unistd.h 22 Dec 2001 05:18:37 -0000 1.46
> +++ include/unistd.h 22 Dec 2001 14:23:04 -0000
> @@ -140,7 +140,7 @@
> #endif
> int getdomainname __P((char *, int));
> int getdtablesize __P((void));
> -int getgrouplist __P((const char *, int, int *, int *));
> +int getgrouplist __P((const char *, gid_t, gid_t *, int *));
> long gethostid __P((void));
> int gethostname __P((char *, int));
> int getlogin_r __P((char *, int));
> @@ -154,7 +154,7 @@
> int getsid __P((pid_t _pid));
> char *getusershell __P((void));
> char *getwd __P((char *)); /* obsoleted by getcwd() */
> -int initgroups __P((const char *, int));
> +int initgroups __P((const char *, gid_t));
> int iruserok __P((unsigned long, int, const char *, const char *));
> int iruserok_sa __P((const void *, int, int, const char *, const char *));
> int issetugid __P((void));
> Index: lib/libc/gen/getgrent.3
> ===================================================================
> RCS file: /home/ncvs/src/lib/libc/gen/getgrent.3,v
> retrieving revision 1.17
> diff -u -d -r1.17 getgrent.3
> --- lib/libc/gen/getgrent.3 14 Jan 2002 16:59:00 -0000 1.17
> +++ lib/libc/gen/getgrent.3 15 Jan 2002 18:55:26 -0000
> @@ -78,7 +78,7 @@
> struct group {
> char *gr_name; /* group name */
> char *gr_passwd; /* group password */
> - int gr_gid; /* group id */
> + gid_t gr_gid; /* group id */
> char **gr_mem; /* group members */
> };
> .Ed
> Index: lib/libc/gen/getgrouplist.3
> ===================================================================
> RCS file: /home/ncvs/src/lib/libc/gen/getgrouplist.3,v
> retrieving revision 1.7
> diff -u -d -r1.7 getgrouplist.3
> --- lib/libc/gen/getgrouplist.3 1 Oct 2001 16:08:51 -0000 1.7
> +++ lib/libc/gen/getgrouplist.3 14 Dec 2001 15:21:22 -0000
> @@ -43,7 +43,7 @@
> .Sh SYNOPSIS
> .In unistd.h
> .Ft int
> -.Fn getgrouplist "const char *name" "int basegid" "int *groups" "int *ngroups"
> +.Fn getgrouplist "const char *name" "gid_t basegid" "gid_t *groups" "int *ngroups"
> .Sh DESCRIPTION
> The
> .Fn getgrouplist
> @@ -56,7 +56,7 @@
> Typically this value is given as
> the group number from the password file.
> .Pp
> -The resulting group list is returned in the integer array pointed to by
> +The resulting group list is returned in the array pointed to by
> .Fa groups .
> The caller specifies the size of the
> .Fa groups
> Index: lib/libc/gen/getgrouplist.c
> ===================================================================
> RCS file: /home/ncvs/src/lib/libc/gen/getgrouplist.c,v
> retrieving revision 1.7
> diff -u -d -r1.7 getgrouplist.c
> --- lib/libc/gen/getgrouplist.c 12 Mar 1997 14:54:22 -0000 1.7
> +++ lib/libc/gen/getgrouplist.c 14 Dec 2001 15:29:19 -0000
> @@ -31,9 +31,12 @@
> * SUCH DAMAGE.
> */
>
> +#include <sys/cdefs.h>
> +__FBSDID("$FreeBSD$");
> +
> #if defined(LIBC_SCCS) && !defined(lint)
> static char sccsid[] = "@(#)getgrouplist.c 8.2 (Berkeley) 12/8/94";
> -#endif /* LIBC_SCCS and not lint */
> +#endif
>
> /*
> * get credential
> @@ -45,12 +48,12 @@
> int
> getgrouplist(uname, agroup, groups, grpcnt)
> const char *uname;
> - int agroup;
> - register int *groups;
> + gid_t agroup;
> + gid_t *groups;
> int *grpcnt;
> {
> - register struct group *grp;
> - register int i, ngroups;
> + struct group *grp;
> + int i, ngroups;
> int ret, maxgroups;
>
> ret = 0;
> Index: lib/libc/gen/initgroups.3
> ===================================================================
> RCS file: /home/ncvs/src/lib/libc/gen/initgroups.3,v
> retrieving revision 1.11
> diff -u -d -r1.11 initgroups.3
> --- lib/libc/gen/initgroups.3 28 Nov 2001 10:55:02 -0000 1.11
> +++ lib/libc/gen/initgroups.3 14 Dec 2001 15:18:14 -0000
> @@ -43,7 +43,7 @@
> .Sh SYNOPSIS
> .In unistd.h
> .Ft int
> -.Fn initgroups "const char *name" "int basegid"
> +.Fn initgroups "const char *name" "gid_t basegid"
> .Sh DESCRIPTION
> The
> .Fn initgroups
> Index: lib/libc/gen/initgroups.c
> ===================================================================
> RCS file: /home/ncvs/src/lib/libc/gen/initgroups.c,v
> retrieving revision 1.5
> diff -u -d -r1.5 initgroups.c
> --- lib/libc/gen/initgroups.c 28 Nov 2001 10:55:02 -0000 1.5
> +++ lib/libc/gen/initgroups.c 14 Dec 2001 15:30:10 -0000
> @@ -31,14 +31,12 @@
> * SUCH DAMAGE.
> */
>
> +#include <sys/cdefs.h>
> +__FBSDID("$FreeBSD$");
> +
> #if defined(LIBC_SCCS) && !defined(lint)
> -#if 0
> static char sccsid[] = "@(#)initgroups.c 8.1 (Berkeley) 6/4/93";
> -#else
> -static const char rcsid[] =
> - "$FreeBSD: src/lib/libc/gen/initgroups.c,v 1.5 2001/11/28 10:55:02 tobez Exp $";
> #endif
> -#endif /* LIBC_SCCS and not lint */
>
> #include <sys/param.h>
>
> @@ -51,7 +49,7 @@
> int
> initgroups(uname, agroup)
> const char *uname;
> - int agroup;
> + gid_t agroup;
> {
> int groups[NGROUPS], ngroups;
>
>
> To Unsubscribe: send mail to majordomo@FreeBSD.org
> with "unsubscribe freebsd-audit" in the body of the message
>
To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-audit" in the body of the message
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?Pine.NEB.3.96L.1020119171955.32726O-100000>
