summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDarren Tucker <dtucker@zip.com.au>2004-06-22 12:30:53 +1000
committerDarren Tucker <dtucker@zip.com.au>2004-06-22 12:30:53 +1000
commitb215c5d8fec624a18751f03cfb416a340b07fa15 (patch)
treed75c9c36b3607fb5a46ac512232ea70eb9c51855
parent365433f883b8cc3f7f16572278340849413e6d49 (diff)
- djm@cvs.openbsd.org 2004/06/20 18:53:39
[sftp.c] make "ls -l" listings print user/group names, add "ls -n" to show uid/gid (like /bin/ls); idea & ok markus@
-rw-r--r--ChangeLog6
-rw-r--r--sftp.c39
2 files changed, 30 insertions, 15 deletions
diff --git a/ChangeLog b/ChangeLog
index 2d7281a3a..5df566f6e 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -3,6 +3,10 @@
3 - djm@cvs.openbsd.org 2004/06/20 17:36:59 3 - djm@cvs.openbsd.org 2004/06/20 17:36:59
4 [ssh.c] 4 [ssh.c]
5 filter passed env vars at slave in connection sharing case; ok markus@ 5 filter passed env vars at slave in connection sharing case; ok markus@
6 - djm@cvs.openbsd.org 2004/06/20 18:53:39
7 [sftp.c]
8 make "ls -l" listings print user/group names, add "ls -n" to show uid/gid
9 (like /bin/ls); idea & ok markus@
6 10
720040620 1120040620
8 - (tim) [configure.ac Makefile.in] Only change TEST_SHELL on broken platforms. 12 - (tim) [configure.ac Makefile.in] Only change TEST_SHELL on broken platforms.
@@ -1325,4 +1329,4 @@
1325 - (djm) Trim deprecated options from INSTALL. Mention UsePAM 1329 - (djm) Trim deprecated options from INSTALL. Mention UsePAM
1326 - (djm) Fix quote handling in sftp; Patch from admorten AT umich.edu 1330 - (djm) Fix quote handling in sftp; Patch from admorten AT umich.edu
1327 1331
1328$Id: ChangeLog,v 1.3418 2004/06/22 02:29:23 dtucker Exp $ 1332$Id: ChangeLog,v 1.3419 2004/06/22 02:30:53 dtucker Exp $
diff --git a/sftp.c b/sftp.c
index 1e216be7d..df2aff657 100644
--- a/sftp.c
+++ b/sftp.c
@@ -16,7 +16,7 @@
16 16
17#include "includes.h" 17#include "includes.h"
18 18
19RCSID("$OpenBSD: sftp.c,v 1.49 2004/06/18 06:13:25 dtucker Exp $"); 19RCSID("$OpenBSD: sftp.c,v 1.50 2004/06/20 18:53:39 djm Exp $");
20 20
21#include "buffer.h" 21#include "buffer.h"
22#include "xmalloc.h" 22#include "xmalloc.h"
@@ -61,9 +61,11 @@ char *__progname;
61/* Separators for interactive commands */ 61/* Separators for interactive commands */
62#define WHITESPACE " \t\r\n" 62#define WHITESPACE " \t\r\n"
63 63
64/* Define what type of ls view (0 - multi-column) */ 64/* Define what type of ls view */
65#define LONG_VIEW 1 /* Full view ala ls -l */ 65#define LONG_VIEW 1 /* Full view ala ls -l */
66#define SHORT_VIEW 2 /* Single row view ala ls -1 */ 66#define SHORT_VIEW 2 /* Single row view ala ls -1 */
67#define NUMERIC_VIEW 4 /* Long view with numeric uid/gid */
68#define VIEW_FLAGS (LONG_VIEW|SHORT_VIEW|NUMERIC_VIEW)
67 69
68/* Commands for interactive mode */ 70/* Commands for interactive mode */
69#define I_CHDIR 1 71#define I_CHDIR 1
@@ -339,10 +341,16 @@ parse_ls_flags(const char **cpp, int *lflag)
339 for(; strchr(WHITESPACE, *cp) == NULL; cp++) { 341 for(; strchr(WHITESPACE, *cp) == NULL; cp++) {
340 switch (*cp) { 342 switch (*cp) {
341 case 'l': 343 case 'l':
342 *lflag = LONG_VIEW; 344 *lflag &= ~VIEW_FLAGS;
345 *lflag |= LONG_VIEW;
343 break; 346 break;
344 case '1': 347 case '1':
345 *lflag = SHORT_VIEW; 348 *lflag &= ~VIEW_FLAGS;
349 *lflag |= SHORT_VIEW;
350 break;
351 case 'n':
352 *lflag &= ~VIEW_FLAGS;
353 *lflag |= NUMERIC_VIEW|LONG_VIEW;
346 break; 354 break;
347 default: 355 default:
348 error("Invalid flag -%c", *cp); 356 error("Invalid flag -%c", *cp);
@@ -650,14 +658,17 @@ do_ls_dir(struct sftp_conn *conn, char *path, char *strip_path, int lflag)
650 xfree(tmp); 658 xfree(tmp);
651 659
652 if (lflag & LONG_VIEW) { 660 if (lflag & LONG_VIEW) {
653 char *lname; 661 if (lflag & NUMERIC_VIEW) {
654 struct stat sb; 662 char *lname;
655 663 struct stat sb;
656 memset(&sb, 0, sizeof(sb)); 664
657 attrib_to_stat(&d[n]->a, &sb); 665 memset(&sb, 0, sizeof(sb));
658 lname = ls_file(fname, &sb, 1); 666 attrib_to_stat(&d[n]->a, &sb);
659 printf("%s\n", lname); 667 lname = ls_file(fname, &sb, 1);
660 xfree(lname); 668 printf("%s\n", lname);
669 xfree(lname);
670 } else
671 printf("%s\n", d[n]->longname);
661 } else { 672 } else {
662 printf("%-*s", colspace, fname); 673 printf("%-*s", colspace, fname);
663 if (c >= columns) { 674 if (c >= columns) {