diff options
author | 1997-05-31 08:17:18 +0000 | |
---|---|---|
committer | 1997-05-31 08:17:18 +0000 | |
commit | aae594d37b9b351638f29540b80a4130b6edb852 (patch) | |
tree | d8862971e6f12082e066b7b26028c73d528cd5d4 | |
parent | Support for ext2fs vnodes. (diff) | |
download | wireguard-openbsd-aae594d37b9b351638f29540b80a4130b6edb852.tar.xz wireguard-openbsd-aae594d37b9b351638f29540b80a4130b6edb852.zip |
trunc uid/gid to USHRT_MAX; mycroft; PR#75
-rw-r--r-- | usr.bin/ar/archive.c | 28 |
1 files changed, 20 insertions, 8 deletions
diff --git a/usr.bin/ar/archive.c b/usr.bin/ar/archive.c index 42e94fb149a..e437bdb9fa1 100644 --- a/usr.bin/ar/archive.c +++ b/usr.bin/ar/archive.c @@ -1,5 +1,5 @@ /* $NetBSD: archive.c,v 1.7 1995/03/26 03:27:46 glass Exp $ */ -/* $OpenBSD: archive.c,v 1.2 1996/03/02 00:40:57 tholo Exp $ */ +/* $OpenBSD: archive.c,v 1.3 1997/05/31 08:17:18 deraadt Exp $ */ /*- * Copyright (c) 1990, 1993, 1994 @@ -209,6 +209,8 @@ put_arobj(cfp, sb) char *name; struct ar_hdr *hdr; off_t size; + uid_t uid; + gid_t gid; /* * If passed an sb structure, reading a file from disk. Get stat(2) @@ -225,26 +227,36 @@ put_arobj(cfp, sb) * a space, use extended format 1. */ lname = strlen(name); + uid = sb->st_uid; + gid = sb->st_gid; + if (uid > USHRT_MAX) { + warnx("warning: uid %d truncated to %d", uid, + USHRT_MAX); + uid = USHRT_MAX; + } + if (gid > USHRT_MAX) { + warnx("warning: gid %d truncated to %d", gid, + USHRT_MAX); + gid = USHRT_MAX; + } if (options & AR_TR) { if (lname > OLDARMAXNAME) { (void)fflush(stdout); - warnx("warning: %s truncated to %.*s", + warnx("warning: file name %s truncated to %.*s", name, OLDARMAXNAME, name); (void)fflush(stderr); } (void)sprintf(hb, HDR3, name, sb->st_mtimespec.tv_sec, - sb->st_uid, sb->st_gid, sb->st_mode, sb->st_size, - ARFMAG); + uid, gid, sb->st_mode, sb->st_size, ARFMAG); lname = 0; } else if (lname > sizeof(hdr->ar_name) || strchr(name, ' ')) (void)sprintf(hb, HDR1, AR_EFMT1, lname, - sb->st_mtimespec.tv_sec, sb->st_uid, sb->st_gid, - sb->st_mode, sb->st_size + lname, ARFMAG); + sb->st_mtimespec.tv_sec, uid, gid, sb->st_mode, + sb->st_size + lname, ARFMAG); else { lname = 0; (void)sprintf(hb, HDR2, name, sb->st_mtimespec.tv_sec, - sb->st_uid, sb->st_gid, sb->st_mode, sb->st_size, - ARFMAG); + uid, gid, sb->st_mode, sb->st_size, ARFMAG); } size = sb->st_size; } else { |