diff options
-rw-r--r-- | ChangeLog | 6 | ||||
-rw-r--r-- | sftp-client.c | 40 | ||||
-rw-r--r-- | sftp-int.c | 5 | ||||
-rw-r--r-- | sftp.1 | 24 |
4 files changed, 46 insertions, 29 deletions
@@ -32,6 +32,10 @@ | |||
32 | - stevesk@cvs.openbsd.org 2001/02/12 20:53:33 | 32 | - stevesk@cvs.openbsd.org 2001/02/12 20:53:33 |
33 | [sftp-int.c] | 33 | [sftp-int.c] |
34 | lumask now works with 1 numeric arg; ok markus@, djm@ | 34 | lumask now works with 1 numeric arg; ok markus@, djm@ |
35 | - djm@cvs.openbsd.org 2001/02/14 9:46:03 | ||
36 | [sftp-client.c sftp-int.c sftp.1] | ||
37 | Fix and document 'preserve modes & times' option ('-p' flag in sftp); | ||
38 | ok markus@ | ||
35 | 39 | ||
36 | 20010214 | 40 | 20010214 |
37 | - (djm) Don't try to close PAM session or delete credentials if the | 41 | - (djm) Don't try to close PAM session or delete credentials if the |
@@ -3960,4 +3964,4 @@ | |||
3960 | - Wrote replacements for strlcpy and mkdtemp | 3964 | - Wrote replacements for strlcpy and mkdtemp |
3961 | - Released 1.0pre1 | 3965 | - Released 1.0pre1 |
3962 | 3966 | ||
3963 | $Id: ChangeLog,v 1.768 2001/02/15 03:19:56 mouring Exp $ | 3967 | $Id: ChangeLog,v 1.769 2001/02/15 03:22:45 mouring Exp $ |
diff --git a/sftp-client.c b/sftp-client.c index 8338dbc9f..760a224e2 100644 --- a/sftp-client.c +++ b/sftp-client.c | |||
@@ -29,7 +29,7 @@ | |||
29 | /* XXX: copy between two remote sites */ | 29 | /* XXX: copy between two remote sites */ |
30 | 30 | ||
31 | #include "includes.h" | 31 | #include "includes.h" |
32 | RCSID("$OpenBSD: sftp-client.c,v 1.9 2001/02/10 00:41:46 djm Exp $"); | 32 | RCSID("$OpenBSD: sftp-client.c,v 1.10 2001/02/14 09:46:03 djm Exp $"); |
33 | 33 | ||
34 | #include "ssh.h" | 34 | #include "ssh.h" |
35 | #include "buffer.h" | 35 | #include "buffer.h" |
@@ -577,20 +577,6 @@ do_download(int fd_in, int fd_out, char *remote_path, char *local_path, | |||
577 | return(errno); | 577 | return(errno); |
578 | } | 578 | } |
579 | 579 | ||
580 | /* Override umask and utimes if asked */ | ||
581 | if (pflag && fchmod(local_fd, mode) == -1) | ||
582 | error("Couldn't set mode on \"%s\": %s", local_path, | ||
583 | strerror(errno)); | ||
584 | if (pflag && (a->flags & SSH2_FILEXFER_ATTR_ACMODTIME)) { | ||
585 | struct timeval tv; | ||
586 | |||
587 | tv.tv_sec = a->atime; | ||
588 | tv.tv_usec = a->mtime; | ||
589 | if (utimes(local_path, &tv) == -1) | ||
590 | error("Can't set times on \"%s\": %s", local_path, | ||
591 | strerror(errno)); | ||
592 | } | ||
593 | |||
594 | buffer_init(&msg); | 580 | buffer_init(&msg); |
595 | 581 | ||
596 | /* Send open request */ | 582 | /* Send open request */ |
@@ -675,6 +661,20 @@ do_download(int fd_in, int fd_out, char *remote_path, char *local_path, | |||
675 | } | 661 | } |
676 | status = do_close(fd_in, fd_out, handle, handle_len); | 662 | status = do_close(fd_in, fd_out, handle, handle_len); |
677 | 663 | ||
664 | /* Override umask and utimes if asked */ | ||
665 | if (pflag && fchmod(local_fd, mode) == -1) | ||
666 | error("Couldn't set mode on \"%s\": %s", local_path, | ||
667 | strerror(errno)); | ||
668 | if (pflag && (a->flags & SSH2_FILEXFER_ATTR_ACMODTIME)) { | ||
669 | struct timeval tv[2]; | ||
670 | tv[0].tv_sec = a->atime; | ||
671 | tv[1].tv_sec = a->mtime; | ||
672 | tv[0].tv_usec = tv[1].tv_usec = 0; | ||
673 | if (utimes(local_path, tv) == -1) | ||
674 | error("Can't set times on \"%s\": %s", local_path, | ||
675 | strerror(errno)); | ||
676 | } | ||
677 | |||
678 | done: | 678 | done: |
679 | close(local_fd); | 679 | close(local_fd); |
680 | buffer_free(&msg); | 680 | buffer_free(&msg); |
@@ -735,10 +735,6 @@ do_upload(int fd_in, int fd_out, char *local_path, char *remote_path, | |||
735 | return(-1); | 735 | return(-1); |
736 | } | 736 | } |
737 | 737 | ||
738 | /* Override umask and utimes if asked */ | ||
739 | if (pflag) | ||
740 | do_fsetstat(fd_in, fd_out, handle, handle_len, &a); | ||
741 | |||
742 | /* Read from local and write to remote */ | 738 | /* Read from local and write to remote */ |
743 | offset = 0; | 739 | offset = 0; |
744 | for(;;) { | 740 | for(;;) { |
@@ -791,6 +787,10 @@ do_upload(int fd_in, int fd_out, char *local_path, char *remote_path, | |||
791 | goto done; | 787 | goto done; |
792 | } | 788 | } |
793 | 789 | ||
790 | /* Override umask and utimes if asked */ | ||
791 | if (pflag) | ||
792 | do_fsetstat(fd_in, fd_out, handle, handle_len, &a); | ||
793 | |||
794 | status = do_close(fd_in, fd_out, handle, handle_len); | 794 | status = do_close(fd_in, fd_out, handle, handle_len); |
795 | 795 | ||
796 | done: | 796 | done: |
@@ -798,5 +798,3 @@ done: | |||
798 | buffer_free(&msg); | 798 | buffer_free(&msg); |
799 | return status; | 799 | return status; |
800 | } | 800 | } |
801 | |||
802 | |||
diff --git a/sftp-int.c b/sftp-int.c index c236f6dac..fd649822a 100644 --- a/sftp-int.c +++ b/sftp-int.c | |||
@@ -28,7 +28,7 @@ | |||
28 | /* XXX: recursive operations */ | 28 | /* XXX: recursive operations */ |
29 | 29 | ||
30 | #include "includes.h" | 30 | #include "includes.h" |
31 | RCSID("$OpenBSD: sftp-int.c,v 1.21 2001/02/12 20:53:33 stevesk Exp $"); | 31 | RCSID("$OpenBSD: sftp-int.c,v 1.22 2001/02/14 09:46:03 djm Exp $"); |
32 | 32 | ||
33 | #include "buffer.h" | 33 | #include "buffer.h" |
34 | #include "xmalloc.h" | 34 | #include "xmalloc.h" |
@@ -204,11 +204,12 @@ parse_getput_flags(const char **cpp, int *pflag) | |||
204 | /* Check for flags */ | 204 | /* Check for flags */ |
205 | if (cp[0] == '-' && cp[1] && strchr(WHITESPACE, cp[2])) { | 205 | if (cp[0] == '-' && cp[1] && strchr(WHITESPACE, cp[2])) { |
206 | switch (cp[1]) { | 206 | switch (cp[1]) { |
207 | case 'p': | ||
207 | case 'P': | 208 | case 'P': |
208 | *pflag = 1; | 209 | *pflag = 1; |
209 | break; | 210 | break; |
210 | default: | 211 | default: |
211 | error("Invalid flag -%c", *cp); | 212 | error("Invalid flag -%c", cp[1]); |
212 | return(-1); | 213 | return(-1); |
213 | } | 214 | } |
214 | cp += 2; | 215 | cp += 2; |
@@ -1,4 +1,4 @@ | |||
1 | .\" $OpenBSD: sftp.1,v 1.6 2001/02/10 00:45:52 djm Exp $ | 1 | .\" $OpenBSD: sftp.1,v 1.7 2001/02/14 09:46:03 djm Exp $ |
2 | .\" | 2 | .\" |
3 | .\" Copyright (c) 2001 Damien Miller. All rights reserved. | 3 | .\" Copyright (c) 2001 Damien Miller. All rights reserved. |
4 | .\" | 4 | .\" |
@@ -94,13 +94,20 @@ to | |||
94 | must be a numeric UID. | 94 | must be a numeric UID. |
95 | .It Ic help | 95 | .It Ic help |
96 | Display help text. | 96 | Display help text. |
97 | .It Ic get Ar remote-path Op Ar local-path | 97 | .It Xo Ic get |
98 | .Op Ar flags | ||
99 | .Ar remote-path | ||
100 | .Op Ar local-path | ||
101 | .Xc | ||
98 | Retrieve the | 102 | Retrieve the |
99 | .Ar remote-path | 103 | .Ar remote-path |
100 | and store it on the local machine. | 104 | and store it on the local machine. |
101 | If the local | 105 | If the local |
102 | path name is not specified, it is given the same name it has on the | 106 | path name is not specified, it is given the same name it has on the |
103 | remote machine. | 107 | remote machine. If the |
108 | .Fl P | ||
109 | flag is specified, then the file's full permission and access time are | ||
110 | copied too. | ||
104 | .It Ic lls Op Ar ls-options Op Ar path | 111 | .It Ic lls Op Ar ls-options Op Ar path |
105 | Display local directory listing of either | 112 | Display local directory listing of either |
106 | .Ar path | 113 | .Ar path |
@@ -124,11 +131,18 @@ Set local umask to | |||
124 | .It Ic mkdir Ar path | 131 | .It Ic mkdir Ar path |
125 | Create remote directory specified by | 132 | Create remote directory specified by |
126 | .Ar path . | 133 | .Ar path . |
127 | .It Ic put Ar local-path Op Ar remote-path | 134 | .It Xo Ic put |
135 | .Op Ar flags | ||
136 | .Ar local-path | ||
137 | .Op Ar local-path | ||
138 | .Xc | ||
128 | Upload | 139 | Upload |
129 | .Ar local-path | 140 | .Ar local-path |
130 | and store it on the remote machine. If the remote path name is not specified, | 141 | and store it on the remote machine. If the remote path name is not specified, |
131 | it is given the same name it has on the local machine. | 142 | it is given the same name it has on the local machine. If the |
143 | .Fl P | ||
144 | flag is specified, then the file's full permission and access time are | ||
145 | copied too. | ||
132 | .It Ic pwd | 146 | .It Ic pwd |
133 | Display remote working directory. | 147 | Display remote working directory. |
134 | .It Ic exit | 148 | .It Ic exit |