summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorderaadt <deraadt@openbsd.org>1997-05-31 08:17:18 +0000
committerderaadt <deraadt@openbsd.org>1997-05-31 08:17:18 +0000
commitaae594d37b9b351638f29540b80a4130b6edb852 (patch)
treed8862971e6f12082e066b7b26028c73d528cd5d4
parentSupport for ext2fs vnodes. (diff)
downloadwireguard-openbsd-aae594d37b9b351638f29540b80a4130b6edb852.tar.xz
wireguard-openbsd-aae594d37b9b351638f29540b80a4130b6edb852.zip
trunc uid/gid to USHRT_MAX; mycroft; PR#75
-rw-r--r--usr.bin/ar/archive.c28
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 {