[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[gnurl] 11/411: sftp: add new quote commands 'atime' and 'mtime'
From: |
gnunet |
Subject: |
[gnurl] 11/411: sftp: add new quote commands 'atime' and 'mtime' |
Date: |
Wed, 13 Jan 2021 01:17:06 +0100 |
This is an automated email from the git hooks/post-receive script.
nikita pushed a commit to branch master
in repository gnurl.
commit fab51852751598a9eccde6615d62194ab6840adc
Author: COFFEETALES <coffeetales.net@gmail.com>
AuthorDate: Fri Aug 14 01:38:49 2020 +0200
sftp: add new quote commands 'atime' and 'mtime'
Closes #5810
---
docs/cmdline-opts/quote.d | 8 ++++++++
docs/libcurl/opts/CURLOPT_QUOTE.3 | 8 ++++++++
lib/vssh/libssh.c | 34 ++++++++++++++++++++++++++++++++--
lib/vssh/libssh2.c | 32 +++++++++++++++++++++++++++++++-
4 files changed, 79 insertions(+), 3 deletions(-)
diff --git a/docs/cmdline-opts/quote.d b/docs/cmdline-opts/quote.d
index 59a98eafb..3da34f487 100644
--- a/docs/cmdline-opts/quote.d
+++ b/docs/cmdline-opts/quote.d
@@ -26,6 +26,10 @@ itself before sending them to the server. File names may be
quoted
shell-style to embed spaces or special characters. Following is the list of
all supported SFTP quote commands:
.RS
+.IP "atime date file"
+The atime command sets the last access time of the file named by the file
+operand. The <date expression> can be all sorts of date strings, see the
+\fIcurl_getdate(3)\fP man page for date expression details. (Added in 7.73.0)
.IP "chgrp group file"
The chgrp command sets the group ID of the file named by the file operand to
the group ID specified by the group operand. The group operand is a decimal
@@ -42,6 +46,10 @@ The ln and symlink commands create a symbolic link at the
target_file location
pointing to the source_file location.
.IP "mkdir directory_name"
The mkdir command creates the directory named by the directory_name operand.
+.IP "mtime date file"
+The mtime command sets the last modification time of the file named by the
+file operand. The <date expression> can be all sorts of date strings, see the
+\fIcurl_getdate(3)\fP man page for date expression details. (Added in 7.73.0)
.IP "pwd"
The pwd command returns the absolute pathname of the current working directory.
.IP "rename source target"
diff --git a/docs/libcurl/opts/CURLOPT_QUOTE.3
b/docs/libcurl/opts/CURLOPT_QUOTE.3
index 08a342fac..408d07d51 100644
--- a/docs/libcurl/opts/CURLOPT_QUOTE.3
+++ b/docs/libcurl/opts/CURLOPT_QUOTE.3
@@ -43,6 +43,10 @@ mandatory commands).
The valid SFTP commands are:
.RS
+.IP "atime date file"
+The atime command sets the last access time of the file named by the file
+operand. The <date expression> can be all sorts of date strings, see the
+\fIcurl_getdate(3)\fP man page for date expression details. (Added in 7.73.0)
.IP "chgrp group file"
The chgrp command sets the group ID of the file named by the file operand to
the group ID specified by the group operand. The group operand is a decimal
@@ -59,6 +63,10 @@ The ln and symlink commands create a symbolic link at the
target_file location
pointing to the source_file location.
.IP "mkdir directory_name"
The mkdir command creates the directory named by the directory_name operand.
+.IP "mtime date file"
+The mtime command sets the last modification time of the file named by the
+file operand. The <date expression> can be all sorts of date strings, see the
+\fIcurl_getdate(3)\fP man page for date expression details. (Added in 7.73.0)
.IP "pwd"
The pwd command returns the absolute pathname of the current working directory.
.IP "rename source target"
diff --git a/lib/vssh/libssh.c b/lib/vssh/libssh.c
index 8988e2392..8d1cfd0f1 100644
--- a/lib/vssh/libssh.c
+++ b/lib/vssh/libssh.c
@@ -2692,7 +2692,9 @@ static void sftp_quote(struct connectdata *conn)
*/
if(strncasecompare(cmd, "chgrp ", 6) ||
strncasecompare(cmd, "chmod ", 6) ||
- strncasecompare(cmd, "chown ", 6)) {
+ strncasecompare(cmd, "chown ", 6) ||
+ strncasecompare(cmd, "atime ", 6) ||
+ strncasecompare(cmd, "mtime ", 6)) {
/* attribute change */
/* sshc->quote_path1 contains the mode to set */
@@ -2702,7 +2704,7 @@ static void sftp_quote(struct connectdata *conn)
if(result == CURLE_OUT_OF_MEMORY)
failf(data, "Out of memory");
else
- failf(data, "Syntax error in chgrp/chmod/chown: "
+ failf(data, "Syntax error in chgrp/chmod/chown/atime/mtime: "
"Bad second parameter");
Curl_safefree(sshc->quote_path1);
state(conn, SSH_SFTP_CLOSE);
@@ -2863,6 +2865,34 @@ static void sftp_quote_stat(struct connectdata *conn)
}
sshc->quote_attrs->flags |= SSH_FILEXFER_ATTR_UIDGID;
}
+ else if(strncasecompare(cmd, "atime", 5)) {
+ time_t date = Curl_getdate_capped(sshc->quote_path1);
+ if(date == -1) {
+ Curl_safefree(sshc->quote_path1);
+ Curl_safefree(sshc->quote_path2);
+ failf(data, "Syntax error: incorrect access date format");
+ state(conn, SSH_SFTP_CLOSE);
+ sshc->nextstate = SSH_NO_STATE;
+ sshc->actualcode = CURLE_QUOTE_ERROR;
+ return;
+ }
+ sshc->quote_attrs->atime = (uint32_t)date;
+ sshc->quote_attrs->flags |= SSH_FILEXFER_ATTR_ACMODTIME;
+ }
+ else if(strncasecompare(cmd, "mtime", 5)) {
+ time_t date = Curl_getdate_capped(sshc->quote_path1);
+ if(date == -1) {
+ Curl_safefree(sshc->quote_path1);
+ Curl_safefree(sshc->quote_path2);
+ failf(data, "Syntax error: incorrect modification date format");
+ state(conn, SSH_SFTP_CLOSE);
+ sshc->nextstate = SSH_NO_STATE;
+ sshc->actualcode = CURLE_QUOTE_ERROR;
+ return;
+ }
+ sshc->quote_attrs->mtime = (uint32_t)date;
+ sshc->quote_attrs->flags |= SSH_FILEXFER_ATTR_ACMODTIME;
+ }
/* Now send the completed structure... */
state(conn, SSH_SFTP_QUOTE_SETSTAT);
diff --git a/lib/vssh/libssh2.c b/lib/vssh/libssh2.c
index 4f56bb44c..dc4db6f2e 100644
--- a/lib/vssh/libssh2.c
+++ b/lib/vssh/libssh2.c
@@ -1390,7 +1390,9 @@ static CURLcode ssh_statemach_act(struct connectdata
*conn, bool *block)
*/
if(strncasecompare(cmd, "chgrp ", 6) ||
strncasecompare(cmd, "chmod ", 6) ||
- strncasecompare(cmd, "chown ", 6) ) {
+ strncasecompare(cmd, "chown ", 6) ||
+ strncasecompare(cmd, "atime ", 6) ||
+ strncasecompare(cmd, "mtime ", 6)) {
/* attribute change */
/* sshc->quote_path1 contains the mode to set */
@@ -1587,6 +1589,34 @@ static CURLcode ssh_statemach_act(struct connectdata
*conn, bool *block)
break;
}
}
+ else if(strncasecompare(cmd, "atime", 5)) {
+ time_t date = Curl_getdate_capped(sshc->quote_path1);
+ if(date == -1) {
+ Curl_safefree(sshc->quote_path1);
+ Curl_safefree(sshc->quote_path2);
+ failf(data, "Syntax error: incorrect access date format");
+ state(conn, SSH_SFTP_CLOSE);
+ sshc->nextstate = SSH_NO_STATE;
+ sshc->actualcode = CURLE_QUOTE_ERROR;
+ break;
+ }
+ sshc->quote_attrs.atime = (unsigned long)date;
+ sshc->quote_attrs.flags = LIBSSH2_SFTP_ATTR_ACMODTIME;
+ }
+ else if(strncasecompare(cmd, "mtime", 5)) {
+ time_t date = Curl_getdate_capped(sshc->quote_path1);
+ if(date == -1) {
+ Curl_safefree(sshc->quote_path1);
+ Curl_safefree(sshc->quote_path2);
+ failf(data, "Syntax error: incorrect modification date format");
+ state(conn, SSH_SFTP_CLOSE);
+ sshc->nextstate = SSH_NO_STATE;
+ sshc->actualcode = CURLE_QUOTE_ERROR;
+ break;
+ }
+ sshc->quote_attrs.mtime = (unsigned long)date;
+ sshc->quote_attrs.flags = LIBSSH2_SFTP_ATTR_ACMODTIME;
+ }
/* Now send the completed structure... */
state(conn, SSH_SFTP_QUOTE_SETSTAT);
--
To stop receiving notification emails like this one, please contact
gnunet@gnunet.org.
- [gnurl] 65/411: mqtt: enable by default, (continued)
- [gnurl] 65/411: mqtt: enable by default, gnunet, 2021/01/12
- [gnurl] 58/411: tests/getpart: use MIME::Base64 instead of home-cooked, gnunet, 2021/01/12
- [gnurl] 63/411: url: remove funny embedded comments in Curl_disonnect calls, gnunet, 2021/01/12
- [gnurl] 46/411: docs: SSLCERTS: fix English syntax, gnunet, 2021/01/12
- [gnurl] 70/411: lib/Makefile.am: bump VERSIONINFO due to new functions, gnunet, 2021/01/12
- [gnurl] 71/411: test971: show test mismatches "inline", gnunet, 2021/01/12
- [gnurl] 44/411: curl.1: fix typo invokved -> invoked, gnunet, 2021/01/12
- [gnurl] 54/411: select: simplify return code handling for poll and select, gnunet, 2021/01/12
- [gnurl] 69/411: optiontable: use DEBUGBUILD, gnunet, 2021/01/12
- [gnurl] 37/411: HTTP/3: update to OpenSSL_1_1_1g-quic-draft-29, gnunet, 2021/01/12
- [gnurl] 11/411: sftp: add new quote commands 'atime' and 'mtime',
gnunet <=
- [gnurl] 40/411: scripts: improve the "get latest curl release tag" logic, gnunet, 2021/01/12
- [gnurl] 52/411: tests: add test1912 with typechecks, gnunet, 2021/01/12
- [gnurl] 61/411: buildconf: exec autoreconf to avoid additional process, gnunet, 2021/01/12
- [gnurl] 72/411: copyright.pl: ignore buildconf, gnunet, 2021/01/12
- [gnurl] 62/411: conn: check for connection being dead before reuse, gnunet, 2021/01/12
- [gnurl] 45/411: docs: non-existing macros in man pages, gnunet, 2021/01/12
- [gnurl] 38/411: options: API for meta-data about easy options, gnunet, 2021/01/12
- [gnurl] 55/411: CMake: add option to enable Unicode on Windows, gnunet, 2021/01/12
- [gnurl] 60/411: CI/azure: no longer ignore results of test 1013, gnunet, 2021/01/12
- [gnurl] 56/411: AppVeyor: switch 64-bit Schannel Debug CMake builds to Unicode, gnunet, 2021/01/12