Namespace protection against MAXUID etc.

This commit is contained in:
christos 1998-11-03 15:14:40 +00:00
parent 4401599ff3
commit e091e64548
1 changed files with 13 additions and 12 deletions

View File

@ -1,4 +1,4 @@
/* $NetBSD: create.c,v 1.18 1998/10/10 07:50:28 mrg Exp $ */ /* $NetBSD: create.c,v 1.19 1998/11/03 15:14:40 christos Exp $ */
/*- /*-
* Copyright (c) 1989, 1993 * Copyright (c) 1989, 1993
@ -38,7 +38,7 @@
#if 0 #if 0
static char sccsid[] = "@(#)create.c 8.1 (Berkeley) 6/6/93"; static char sccsid[] = "@(#)create.c 8.1 (Berkeley) 6/6/93";
#else #else
__RCSID("$NetBSD: create.c,v 1.18 1998/10/10 07:50:28 mrg Exp $"); __RCSID("$NetBSD: create.c,v 1.19 1998/11/03 15:14:40 christos Exp $");
#endif #endif
#endif /* not lint */ #endif /* not lint */
@ -190,11 +190,11 @@ statf(p)
(void)putchar('\n'); (void)putchar('\n');
} }
#define MAXGID 5000 #define MTREE_MAXGID 5000
#define MAXUID 5000 #define MTREE_MAXUID 5000
#define MAXMODE MBITS + 1 #define MTREE_MAXMODE MBITS + 1
#define MAXFLAGS 256 #define MTREE_MAXFLAGS 256
#define MAXS 16 #define MTREE_MAXS 16
static int static int
statd(t, parent, puid, pgid, pmode, pflags) statd(t, parent, puid, pgid, pmode, pflags)
@ -217,7 +217,8 @@ statd(t, parent, puid, pgid, pmode, pflags)
mode_t savemode; mode_t savemode;
u_long saveflags; u_long saveflags;
u_short maxgid, maxuid, maxmode, maxflags; u_short maxgid, maxuid, maxmode, maxflags;
u_short g[MAXGID], u[MAXUID], m[MAXMODE], f[MAXFLAGS]; u_short g[MTREE_MAXGID], u[MTREE_MAXUID],
m[MTREE_MAXMODE], f[MTREE_MAXFLAGS];
savegid = 0; savegid = 0;
saveuid = 0; saveuid = 0;
@ -237,17 +238,17 @@ statd(t, parent, puid, pgid, pmode, pflags)
maxuid = maxgid = maxmode = maxflags = 0; maxuid = maxgid = maxmode = maxflags = 0;
for (; p; p = p->fts_link) { for (; p; p = p->fts_link) {
smode = p->fts_statp->st_mode & MBITS; smode = p->fts_statp->st_mode & MBITS;
if (smode < MAXMODE && ++m[smode] > maxmode) { if (smode < MTREE_MAXMODE && ++m[smode] > maxmode) {
savemode = smode; savemode = smode;
maxmode = m[smode]; maxmode = m[smode];
} }
sgid = p->fts_statp->st_gid; sgid = p->fts_statp->st_gid;
if (sgid < MAXGID && ++g[sgid] > maxgid) { if (sgid < MTREE_MAXGID && ++g[sgid] > maxgid) {
savegid = sgid; savegid = sgid;
maxgid = g[sgid]; maxgid = g[sgid];
} }
suid = p->fts_statp->st_uid; suid = p->fts_statp->st_uid;
if (suid < MAXUID && ++u[suid] > maxuid) { if (suid < MTREE_MAXUID && ++u[suid] > maxuid) {
saveuid = suid; saveuid = suid;
maxuid = u[suid]; maxuid = u[suid];
} }
@ -259,7 +260,7 @@ statd(t, parent, puid, pgid, pmode, pflags)
#define FLAGS2IDX(f) ((f & 0xf) | ((f >> 12) & 0xf0)) #define FLAGS2IDX(f) ((f & 0xf) | ((f >> 12) & 0xf0))
sflags = p->fts_statp->st_flags; sflags = p->fts_statp->st_flags;
if (FLAGS2IDX(sflags) < MAXFLAGS && if (FLAGS2IDX(sflags) < MTREE_MAXFLAGS &&
++f[FLAGS2IDX(sflags)] > maxflags) { ++f[FLAGS2IDX(sflags)] > maxflags) {
saveflags = sflags; saveflags = sflags;
maxflags = u[FLAGS2IDX(sflags)]; maxflags = u[FLAGS2IDX(sflags)];