Include the egid when displaying the groups and doing security checks.

This commit is contained in:
mycroft 1995-06-03 03:12:05 +00:00
parent ac1e0f5127
commit fda52a9197
1 changed files with 31 additions and 20 deletions

View File

@ -42,7 +42,7 @@ static char copyright[] =
#ifndef lint
/*static char sccsid[] = "from: @(#)quota.c 8.1 (Berkeley) 6/6/93";*/
static char rcsid[] = "$Id: quota.c,v 1.7 1994/12/24 17:31:23 cgd Exp $";
static char rcsid[] = "$Id: quota.c,v 1.8 1995/06/03 03:12:05 mycroft Exp $";
#endif /* not lint */
/*
@ -90,7 +90,7 @@ main(argc, argv)
char *argv[];
{
int ngroups;
gid_t gidset[NGROUPS];
gid_t mygid, gidset[NGROUPS];
int i, gflag = 0, uflag = 0;
char ch;
extern char *optarg;
@ -122,13 +122,16 @@ main(argc, argv)
if (uflag)
showuid(getuid());
if (gflag) {
mygid = getgid();
ngroups = getgroups(NGROUPS, gidset);
if (ngroups < 0) {
perror("quota: getgroups");
exit(1);
}
for (i = 1; i < ngroups; i++)
showgid(gidset[i]);
showgid(mygid);
for (i = 0; i < ngroups; i++)
if (gidset[i] != mygid)
showgid(gidset[i]);
}
exit(0);
}
@ -216,7 +219,7 @@ showgid(gid)
{
struct group *grp = getgrgid(gid);
int ngroups;
gid_t gidset[NGROUPS];
gid_t mygid, gidset[NGROUPS];
register int i;
char *name;
@ -224,18 +227,22 @@ showgid(gid)
name = "(no entry)";
else
name = grp->gr_name;
mygid = getgid();
ngroups = getgroups(NGROUPS, gidset);
if (ngroups < 0) {
perror("quota: getgroups");
return;
}
for (i = 1; i < ngroups; i++)
if (gid == gidset[i])
break;
if (i >= ngroups && getuid() != 0) {
fprintf(stderr, "quota: %s (gid %d): permission denied\n",
name, gid);
return;
if (gid != mygid) {
for (i = 0; i < ngroups; i++)
if (gid == gidset[i])
break;
if (i >= ngroups && getuid() != 0) {
fprintf(stderr,
"quota: %s (gid %d): permission denied\n",
name, gid);
return;
}
}
showquotas(GRPQUOTA, gid, name);
}
@ -248,25 +255,29 @@ showgrpname(name)
{
struct group *grp = getgrnam(name);
int ngroups;
gid_t gidset[NGROUPS];
gid_t mygid, gidset[NGROUPS];
register int i;
if (grp == NULL) {
fprintf(stderr, "quota: %s: unknown group\n", name);
return;
}
mygid = getgid();
ngroups = getgroups(NGROUPS, gidset);
if (ngroups < 0) {
perror("quota: getgroups");
return;
}
for (i = 1; i < ngroups; i++)
if (grp->gr_gid == gidset[i])
break;
if (i >= ngroups && getuid() != 0) {
fprintf(stderr, "quota: %s (gid %d): permission denied\n",
name, grp->gr_gid);
return;
if (grp->gr_gid != mygid) {
for (i = 0; i < ngroups; i++)
if (grp->gr_gid == gidset[i])
break;
if (i >= ngroups && getuid() != 0) {
fprintf(stderr,
"quota: %s (gid %d): permission denied\n",
name, grp->gr_gid);
return;
}
}
showquotas(GRPQUOTA, grp->gr_gid, name);
}