diff options
author | Alistair Delva <adelva@google.com> | 2020-08-21 00:00:13 +0000 |
---|---|---|
committer | Gerrit Code Review <noreply-gerritcodereview@google.com> | 2020-08-21 00:00:13 +0000 |
commit | ed358b3546c776c1c677fd88eb8f716cf6187510 (patch) | |
tree | 3c6134bcb2cda4b9dccc57b4a8b997a945aab62d /sftp-common.c | |
parent | 22246b08952d746a7cc5a292570636cf4277598f (diff) | |
parent | 44a1065de8a58c51a021243a28bfa01e87822e4f (diff) |
Merge changes I934c73d4,I28cdc9a0,I9e734da9,I3c079d86
* changes:
UPSTREAM: depend
UPSTREAM: upstream: avoid possible NULL deref; from Pedro Martelletto
Revert "upstream: fix compilation with DEBUG_KEXDH; bz#3160 ok dtucker@"
Merge upstream-master into master
Diffstat (limited to 'sftp-common.c')
-rw-r--r-- | sftp-common.c | 34 |
1 files changed, 17 insertions, 17 deletions
diff --git a/sftp-common.c b/sftp-common.c index 9dc1f983..677f27d6 100644 --- a/sftp-common.c +++ b/sftp-common.c @@ -1,4 +1,4 @@ -/* $OpenBSD: sftp-common.c,v 1.28 2015/01/20 23:14:00 deraadt Exp $ */ +/* $OpenBSD: sftp-common.c,v 1.31 2018/09/13 15:23:32 millert Exp $ */ /* * Copyright (c) 2001 Markus Friedl. All rights reserved. * Copyright (c) 2001 Damien Miller. All rights reserved. @@ -26,7 +26,6 @@ #include "includes.h" -#include <sys/param.h> /* MAX */ #include <sys/types.h> #include <sys/stat.h> @@ -37,6 +36,7 @@ #include <string.h> #include <time.h> #include <stdarg.h> +#include <unistd.h> #ifdef HAVE_UTIL_H #include <util.h> #endif @@ -45,6 +45,7 @@ #include "ssherr.h" #include "sshbuf.h" #include "log.h" +#include "misc.h" #include "sftp.h" #include "sftp-common.h" @@ -215,23 +216,22 @@ ls_file(const char *name, const struct stat *st, int remote, int si_units) { int ulen, glen, sz = 0; struct tm *ltime = localtime(&st->st_mtime); - char *user, *group; - char buf[1024], mode[11+1], tbuf[12+1], ubuf[11+1], gbuf[11+1]; + const char *user, *group; + char buf[1024], lc[8], mode[11+1], tbuf[12+1], ubuf[11+1], gbuf[11+1]; char sbuf[FMT_SCALED_STRSIZE]; time_t now; strmode(st->st_mode, mode); - if (!remote) { - user = user_from_uid(st->st_uid, 0); - } else { + if (remote) { snprintf(ubuf, sizeof ubuf, "%u", (u_int)st->st_uid); user = ubuf; - } - if (!remote) { - group = group_from_gid(st->st_gid, 0); - } else { snprintf(gbuf, sizeof gbuf, "%u", (u_int)st->st_gid); group = gbuf; + strlcpy(lc, "?", sizeof(lc)); + } else { + user = user_from_uid(st->st_uid, 0); + group = group_from_gid(st->st_gid, 0); + snprintf(lc, sizeof(lc), "%u", (u_int)st->st_nlink); } if (ltime != NULL) { now = time(NULL); @@ -243,16 +243,16 @@ ls_file(const char *name, const struct stat *st, int remote, int si_units) } if (sz == 0) tbuf[0] = '\0'; - ulen = MAX(strlen(user), 8); - glen = MAX(strlen(group), 8); + ulen = MAXIMUM(strlen(user), 8); + glen = MAXIMUM(strlen(group), 8); if (si_units) { fmt_scaled((long long)st->st_size, sbuf); - snprintf(buf, sizeof buf, "%s %3u %-*s %-*s %8s %s %s", mode, - (u_int)st->st_nlink, ulen, user, glen, group, + snprintf(buf, sizeof buf, "%s %3s %-*s %-*s %8s %s %s", + mode, lc, ulen, user, glen, group, sbuf, tbuf, name); } else { - snprintf(buf, sizeof buf, "%s %3u %-*s %-*s %8llu %s %s", mode, - (u_int)st->st_nlink, ulen, user, glen, group, + snprintf(buf, sizeof buf, "%s %3s %-*s %-*s %8llu %s %s", + mode, lc, ulen, user, glen, group, (unsigned long long)st->st_size, tbuf, name); } return xstrdup(buf); |