Date: Wed, 4 Sep 2002 11:40:10 -0700 (PDT) From: Mike Makonnen <makonnen@pacbell.net> To: freebsd-bugs@FreeBSD.org Subject: Re: misc/11024 getpwnam(3) uses incorrect #define to limit username length Message-ID: <200209041840.g84IeAXT010351@freefall.freebsd.org>
next in thread | raw e-mail | index | archive | help
The following reply was made to PR misc/11024; it has been noted by GNATS.
From: Mike Makonnen <makonnen@pacbell.net>
To: freebsd-gnats-submit@FreeBSD.ORG
Cc:
Subject: Re: misc/11024 getpwnam(3) uses incorrect #define to limit username
length
Date: Wed, 04 Sep 2002 11:50:27 -0700
I tried to go through and fix all the places UT_NAMESIZE is used instead of
MAXLOGNAME. I did not touch any program that uses the w/utmp files,
contributed software (except for top), or posix files in libc.
Cheers,
Mike Makonnen
Index: bin/pax/gen_subs.c
===================================================================
RCS file: /home/ncvs/src/bin/pax/gen_subs.c,v
retrieving revision 1.20
diff -u -r1.20 gen_subs.c
--- bin/pax/gen_subs.c 30 Jun 2002 05:15:01 -0000 1.20
+++ bin/pax/gen_subs.c 3 Sep 2002 22:24:01 -0000
@@ -43,12 +43,12 @@
#include <sys/cdefs.h>
__FBSDID("$FreeBSD: src/bin/pax/gen_subs.c,v 1.20 2002/06/30 05:15:01 obrien
Exp $");
+#include <sys/param.h>
#include <sys/types.h>
#include <sys/time.h>
#include <sys/stat.h>
#include <langinfo.h>
#include <stdio.h>
-#include <utmp.h>
#include <unistd.h>
#include <stdlib.h>
#include <string.h>
@@ -69,8 +69,8 @@
#define OLDFRMTM "%b %e %Y"
#define CURFRMTD "%e %b %H:%M"
#define OLDFRMTD "%e %b %Y"
-#ifndef UT_NAMESIZE
-#define UT_NAMESIZE 8
+#ifndef MAXLOGNAME
+#define MAXLOGNAME 8
#endif
#define UT_GRPSIZE 6
@@ -120,7 +120,7 @@
if (strftime(f_date,DATELEN,timefrmt,localtime(&(sbp->st_mtime))) ==
0)
f_date[0] = '\0';
(void)fprintf(fp, "%s%2u %-*s %-*s ", f_mode, sbp->st_nlink,
- UT_NAMESIZE, name_uid(sbp->st_uid, 1), UT_GRPSIZE,
+ MAXLOGNAME, name_uid(sbp->st_uid, 1), UT_GRPSIZE,
name_gid(sbp->st_gid, 1));
/*
Index: contrib/top/username.c
===================================================================
RCS file: /home/ncvs/src/contrib/top/username.c,v
retrieving revision 1.3
diff -u -r1.3 username.c
--- contrib/top/username.c 9 Jun 2002 19:29:55 -0000 1.3
+++ contrib/top/username.c 3 Sep 2002 22:41:58 -0000
@@ -30,17 +30,17 @@
* This makes the table size independent of the passwd file size.
*/
+#include <sys/param.h>
#include <sys/types.h>
#include <stdio.h>
#include <pwd.h>
-#include <utmp.h>
#include "top.local.h"
#include "utils.h"
struct hash_el {
int uid;
- char name[UT_NAMESIZE + 1];
+ char name[MAXLOGNAME]; /* MAXLOGNAME includes space for the NULL */
};
#define is_empty_hash(x) (hash_table[x].name[0] == 0)
@@ -129,7 +129,7 @@
/* empty or wrong slot -- fill it with new value */
hash_table[hashindex].uid = uid;
- (void) strncpy(hash_table[hashindex].name, name, UT_NAMESIZE);
+ (void) strncpy(hash_table[hashindex].name, name, MAXLOGNAME - 1);
return(hashindex);
}
Index: lib/libc/gen/pwcache.c
===================================================================
RCS file: /home/ncvs/src/lib/libc/gen/pwcache.c,v
retrieving revision 1.10
diff -u -r1.10 pwcache.c
--- lib/libc/gen/pwcache.c 22 Mar 2002 02:35:47 -0000 1.10
+++ lib/libc/gen/pwcache.c 3 Sep 2002 22:52:17 -0000
@@ -37,13 +37,13 @@
#include <sys/cdefs.h>
__FBSDID("$FreeBSD: src/lib/libc/gen/pwcache.c,v 1.10 2002/03/22 02:35:47 imp
Exp $");
+#include <sys/param.h>
#include <sys/types.h>
#include <grp.h>
#include <pwd.h>
#include <stdio.h>
#include <string.h>
-#include <utmp.h>
#define NCACHE 64 /* power of 2 */
#define MASK (NCACHE - 1) /* bits to store with */
@@ -54,7 +54,7 @@
static struct ncache {
uid_t uid;
int found;
- char name[UT_NAMESIZE + 1];
+ char name[MAXLOGNAME]; /* Includes terminating NULL */
} c_uid[NCACHE];
static int pwopen;
struct passwd *pw;
@@ -70,11 +70,11 @@
cp->uid = uid;
if (pw != NULL) {
cp->found = 1;
- (void)strncpy(cp->name, pw->pw_name, UT_NAMESIZE);
- cp->name[UT_NAMESIZE] = '\0';
+ (void)strncpy(cp->name, pw->pw_name, MAXLOGNAME - 1);
+ cp->name[MAXLOGNAME - 1] = '\0';
} else {
cp->found = 0;
- (void)snprintf(cp->name, UT_NAMESIZE, "%u", uid);
+ (void)snprintf(cp->name, MAXLOGNAME - 1, "%u", uid);
if (nouser)
return (NULL);
}
@@ -88,7 +88,7 @@
static struct ncache {
gid_t gid;
int found;
- char name[UT_NAMESIZE + 1];
+ char name[MAXLOGNAME]; /* Includes terminating NULL */
} c_gid[NCACHE];
static int gropen;
struct group *gr;
@@ -104,11 +104,11 @@
cp->gid = gid;
if (gr != NULL) {
cp->found = 1;
- (void)strncpy(cp->name, gr->gr_name, UT_NAMESIZE);
- cp->name[UT_NAMESIZE] = '\0';
+ (void)strncpy(cp->name, gr->gr_name, MAXLOGNAME - 1);
+ cp->name[MAXLOGNAME - 1] = '\0';
} else {
cp->found = 0;
- (void)snprintf(cp->name, UT_NAMESIZE, "%u", gid);
+ (void)snprintf(cp->name, MAXLOGNAME - 1, "%u", gid);
if (nogroup)
return (NULL);
}
Index: usr.bin/lastcomm/lastcomm.c
===================================================================
RCS file: /home/ncvs/src/usr.bin/lastcomm/lastcomm.c,v
retrieving revision 1.16
diff -u -r1.16 lastcomm.c
--- usr.bin/lastcomm/lastcomm.c 30 Jun 2002 05:25:03 -0000 1.16
+++ usr.bin/lastcomm/lastcomm.c 3 Sep 2002 23:13:26 -0000
@@ -179,7 +179,7 @@
(void)printf("%-*.*s %-7s %-*s %-*s",
AC_COMM_LEN, AC_COMM_LEN, ab.ac_comm,
flagbits(ab.ac_flag),
- UT_NAMESIZE, user_from_uid(ab.ac_uid, 0),
+ MAXLOGNAME - 1, user_from_uid(ab.ac_uid, 0),
UT_LINESIZE, getdev(ab.ac_tty));
Index: usr.sbin/repquota/repquota.c
===================================================================
RCS file: /home/ncvs/src/usr.sbin/repquota/repquota.c,v
retrieving revision 1.14
diff -u -r1.14 repquota.c
--- usr.sbin/repquota/repquota.c 11 Jul 2002 21:24:49 -0000 1.14
+++ usr.sbin/repquota/repquota.c 3 Sep 2002 23:28:49 -0000
@@ -63,7 +63,6 @@
#include <string.h>
#include <time.h>
#include <unistd.h>
-#include <utmp.h>
/* Let's be paranoid about block size */
#if 10 > DEV_BSHIFT
@@ -229,9 +228,9 @@
}
fclose(qf);
printf("%*s Block limits File
limits\n",
- max(UT_NAMESIZE,10), " ");
+ max(MAXLOGNAME - 1,10), " ");
printf("User%*s used soft hard grace used soft
hard grace\n",
- max(UT_NAMESIZE,10), " ");
+ max(MAXLOGNAME - 1,10), " ");
for (id = 0; id <= highid[type]; id++) {
fup = lookup(id, type);
if (fup == 0)
@@ -239,7 +238,7 @@
if (fup->fu_dqblk.dqb_curinodes == 0 &&
fup->fu_dqblk.dqb_curblocks == 0)
continue;
- printf("%-*s", max(UT_NAMESIZE,10), fup->fu_name);
+ printf("%-*s", max(MAXLOGNAME - 1,10), fup->fu_name);
printf("%c%c %8lu %8lu %8lu %6s",
fup->fu_dqblk.dqb_bsoftlimit &&
fup->fu_dqblk.dqb_curblocks >=
Index: usr.sbin/sysinstall/user.c
===================================================================
RCS file: /home/ncvs/src/usr.sbin/sysinstall/user.c,v
retrieving revision 1.17
diff -u -r1.17 user.c
--- usr.sbin/sysinstall/user.c 5 Jul 2001 09:51:09 -0000 1.17
+++ usr.sbin/sysinstall/user.c 3 Sep 2002 23:40:23 -0000
@@ -35,7 +35,6 @@
*/
#include "sysinstall.h"
-#include <utmp.h>
#include <ctype.h>
#include <sys/param.h>
#include <sysexits.h>
@@ -61,7 +60,7 @@
static char gname[GNAME_FIELD_LEN],
gid[GID_FIELD_LEN],
gmemb[GMEMB_FIELD_LEN],
- uname[UT_NAMESIZE + 1],
+ uname[MAXLOGNAME],
passwd[PASSWD_FIELD_LEN],
uid[UID_FIELD_LEN],
ugroup[UGROUP_FIELD_LEN],
@@ -108,7 +107,7 @@
/* The user configuration menu. */
static Layout userLayout[] = {
#define LAYOUT_UNAME 0
- { 3, 6, UT_NAMESIZE, UT_NAMESIZE + 1,
+ { 3, 6, MAXLOGNAME - 1, MAXLOGNAME,
"Login ID:", "The login name of the new user (mandatory)",
uname, STRINGOBJ, NULL },
#define LAYOUT_UID 1
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?200209041840.g84IeAXT010351>
