diff options
author | djm@openbsd.org <djm@openbsd.org> | 2017-06-10 06:36:46 +0000 |
---|---|---|
committer | Damien Miller <djm@mindrot.org> | 2017-06-10 16:40:11 +1000 |
commit | 072e172f1d302d2a2c6043ecbfb4004406717b96 (patch) | |
tree | 14283b3a520def3592f74e2e329b9dad3dbf7074 /sftp-common.c | |
parent | 72be5b2f8e7dc37235e8c4b8d0bc7b5ee1301505 (diff) |
upstream commit
print '?' instead of incorrect link count (that the
protocol doesn't provide) for remote listings. bz#2710 ok dtucker@
Upstream-ID: c611f98a66302cea452ef10f13fff8cf0385242e
Diffstat (limited to 'sftp-common.c')
-rw-r--r-- | sftp-common.c | 25 |
1 files changed, 12 insertions, 13 deletions
diff --git a/sftp-common.c b/sftp-common.c index 3a70c52d..13a7f5be 100644 --- a/sftp-common.c +++ b/sftp-common.c @@ -1,4 +1,4 @@ -/* $OpenBSD: sftp-common.c,v 1.29 2016/09/12 01:22:38 deraadt Exp $ */ +/* $OpenBSD: sftp-common.c,v 1.30 2017/06/10 06:36:46 djm Exp $ */ /* * Copyright (c) 2001 Markus Friedl. All rights reserved. * Copyright (c) 2001 Damien Miller. All rights reserved. @@ -216,22 +216,21 @@ 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]; + 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); @@ -247,12 +246,12 @@ ls_file(const char *name, const struct stat *st, int remote, int si_units) 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); |