[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[gnurl] 121/264: curl: allow both --etag-compare and --etag-save with sa
From: |
gnunet |
Subject: |
[gnurl] 121/264: curl: allow both --etag-compare and --etag-save with same file name |
Date: |
Thu, 30 Apr 2020 16:07:04 +0200 |
This is an automated email from the git hooks/post-receive script.
nikita pushed a commit to branch master
in repository gnurl.
commit a448a4ce2615373fc63818afede79550f2ca6a14
Author: Kwon-Young Choi <address@hidden>
AuthorDate: Fri Apr 3 20:51:14 2020 +0200
curl: allow both --etag-compare and --etag-save with same file name
This change inverse the order of processing for the --etag-compare and
--etag-save option to process first --etag-compare. This in turn allows
to use the same file name to compare and save an etag.
The original behavior of not failing if the etag file does not exists is
conserved.
Fixes #5179
Closes #5180
---
src/tool_operate.c | 60 ++++++++++++++++++++++++------------------------
tests/data/Makefile.inc | 2 +-
tests/data/test344 | 58 ++++++++++++++++++++++++++++++++++++++++++++++
tests/data/test345 | 61 +++++++++++++++++++++++++++++++++++++++++++++++++
4 files changed, 150 insertions(+), 31 deletions(-)
diff --git a/src/tool_operate.c b/src/tool_operate.c
index e1c9c6251..fa8be45ed 100644
--- a/src/tool_operate.c
+++ b/src/tool_operate.c
@@ -905,35 +905,6 @@ static CURLcode single_transfer(struct GlobalConfig
*global,
/* default output stream is stdout */
outs->stream = stdout;
- /* --etag-save */
- etag_save = &per->etag_save;
- etag_save->stream = stdout;
-
- if(config->etag_save_file) {
- /* open file for output: */
- if(strcmp(config->etag_save_file, "-")) {
- FILE *newfile = fopen(config->etag_save_file, "wb");
- if(!newfile) {
- warnf(
- config->global,
- "Failed to open %s\n", config->etag_save_file);
-
- result = CURLE_WRITE_ERROR;
- break;
- }
- else {
- etag_save->filename = config->etag_save_file;
- etag_save->s_isreg = TRUE;
- etag_save->fopened = TRUE;
- etag_save->stream = newfile;
- }
- }
- else {
- /* always use binary mode for protocol header output */
- set_binmode(etag_save->stream);
- }
- }
-
/* --etag-compare */
if(config->etag_compare_file) {
char *etag_from_file = NULL;
@@ -941,7 +912,7 @@ static CURLcode single_transfer(struct GlobalConfig *global,
/* open file for reading: */
FILE *file = fopen(config->etag_compare_file, FOPEN_READTEXT);
- if(!file) {
+ if(!file && !config->etag_save_file) {
errorf(config->global,
"Failed to open %s\n", config->etag_compare_file);
result = CURLE_READ_ERROR;
@@ -975,6 +946,35 @@ static CURLcode single_transfer(struct GlobalConfig
*global,
}
}
+ /* --etag-save */
+ etag_save = &per->etag_save;
+ etag_save->stream = stdout;
+
+ if(config->etag_save_file) {
+ /* open file for output: */
+ if(strcmp(config->etag_save_file, "-")) {
+ FILE *newfile = fopen(config->etag_save_file, "wb");
+ if(!newfile) {
+ warnf(
+ config->global,
+ "Failed to open %s\n", config->etag_save_file);
+
+ result = CURLE_WRITE_ERROR;
+ break;
+ }
+ else {
+ etag_save->filename = config->etag_save_file;
+ etag_save->s_isreg = TRUE;
+ etag_save->fopened = TRUE;
+ etag_save->stream = newfile;
+ }
+ }
+ else {
+ /* always use binary mode for protocol header output */
+ set_binmode(etag_save->stream);
+ }
+ }
+
if(metalink) {
/* For Metalink download, use name in Metalink file as
filename. */
diff --git a/tests/data/Makefile.inc b/tests/data/Makefile.inc
index 0fd29780a..2b20ac329 100644
--- a/tests/data/Makefile.inc
+++ b/tests/data/Makefile.inc
@@ -58,7 +58,7 @@ test307 test308 test309 test310 test311 test312 test313
test314 test315 \
test316 test317 test318 test319 test320 test321 test322 test323 test324 \
test325 test326 test327 test328 test329 test330 test331 test332 test333 \
test334 test335 test336 test337 test338 test339 test340 test341 test342 \
-test343 \
+test343 test344 test345 \
test350 test351 test352 test353 test354 test355 test356 test357 \
test393 test394 test395 \
\
diff --git a/tests/data/test344 b/tests/data/test344
new file mode 100644
index 000000000..054d0351b
--- /dev/null
+++ b/tests/data/test344
@@ -0,0 +1,58 @@
+<testcase>
+<info>
+<keywords>
+HTTP
+HTTP GET
+</keywords>
+</info>
+
+#
+# Server-side
+<reply>
+<data>
+HTTP/1.1 200 OK
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Server: test-server/fake
+Last-Modified: Tue, 13 Jun 2000 12:10:00 GMT
+ETag: "21025-dc7-11111"
+Accept-Ranges: bytes
+Content-Length: 0
+Connection: close
+Content-Type: text/html
+Funny-head: yesyes
+
+</data>
+</reply>
+
+#
+# Client-side
+<client>
+<server>
+http
+</server>
+<name>
+Both --etag-compare and -save store new Etag using non-existing file
+</name>
+<command>
+http://%HOSTIP:%HTTPPORT/344 --etag-compare log/etag344 --etag-save log/etag344
+</command>
+</client>
+
+#
+# Verify data after the test has been "shot"
+<verify>
+<strip>
+^User-Agent:.*
+</strip>
+<protocol>
+GET /344 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+If-None-Match: ""
+
+</protocol>
+<file name="log/etag344">
+21025-dc7-11111
+</file>
+</verify>
+</testcase>
diff --git a/tests/data/test345 b/tests/data/test345
new file mode 100644
index 000000000..135e0c26a
--- /dev/null
+++ b/tests/data/test345
@@ -0,0 +1,61 @@
+<testcase>
+<info>
+<keywords>
+HTTP
+HTTP GET
+</keywords>
+</info>
+
+#
+# Server-side
+<reply>
+<data>
+HTTP/1.1 200 OK
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Server: test-server/fake
+Last-Modified: Tue, 13 Jun 2000 12:10:00 GMT
+ETag: "21025-dc7-11111"
+Accept-Ranges: bytes
+Content-Length: 0
+Connection: close
+Content-Type: text/html
+Funny-head: yesyes
+
+</data>
+</reply>
+
+#
+# Client-side
+<client>
+<server>
+http
+</server>
+<name>
+Both --etag-compare and -save store new Etag using one pre-existing file
+</name>
+<file name="log/etag345">
+21025-dc7-39462498
+</file>
+<command>
+http://%HOSTIP:%HTTPPORT/345 --etag-compare log/etag345 --etag-save log/etag345
+</command>
+</client>
+
+#
+# Verify data after the test has been "shot"
+<verify>
+<strip>
+^User-Agent:.*
+</strip>
+<protocol>
+GET /345 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+If-None-Match: "21025-dc7-39462498"
+
+</protocol>
+<file name="log/etag345">
+21025-dc7-11111
+</file>
+</verify>
+</testcase>
--
To stop receiving notification emails like this one, please contact
address@hidden.
- [gnurl] 148/264: runtests: provide nicer errormsg when protocol "dump" file is empty, (continued)
- [gnurl] 148/264: runtests: provide nicer errormsg when protocol "dump" file is empty, gnunet, 2020/04/30
- [gnurl] 258/264: nss: check for PK11_CreateDigestContext() returning NULL, gnunet, 2020/04/30
- [gnurl] 151/264: runtests: fix warning about using an undefined variable, gnunet, 2020/04/30
- [gnurl] 153/264: url: allow non-HTTPS altsvc-matching for debug builds, gnunet, 2020/04/30
- [gnurl] 174/264: schannel: Fix blocking timeout logic, gnunet, 2020/04/30
- [gnurl] 123/264: test1566: verify --etag-compare that gets a 304 back, gnunet, 2020/04/30
- [gnurl] 158/264: test1148: tolerate progress updates better (again), gnunet, 2020/04/30
- [gnurl] 149/264: github actions: run when pushed to master or */ci + PRs, gnunet, 2020/04/30
- [gnurl] 185/264: tests: add four MQTT tests 1190 - 1193, gnunet, 2020/04/30
- [gnurl] 189/264: scripts/release-notes: fix duplicate output header, gnunet, 2020/04/30
- [gnurl] 121/264: curl: allow both --etag-compare and --etag-save with same file name,
gnunet <=
- [gnurl] 146/264: tests: verify split initial HTTP requests with CURL_SMALLREQSEND, gnunet, 2020/04/30
- [gnurl] 212/264: test1245: make it work with dynamic FTP server port, gnunet, 2020/04/30
- [gnurl] 245/264: test1154: set a proper name, gnunet, 2020/04/30
- [gnurl] 147/264: schannel: support .P12 or .PFX client certificates, gnunet, 2020/04/30
- [gnurl] 163/264: tests: fix conflict between Cygwin/msys and Windows PIDs, gnunet, 2020/04/30
- [gnurl] 155/264: appveyor: ignore failing 'connect to non-listening proxy' tests, gnunet, 2020/04/30
- [gnurl] 160/264: Revert "file: on Windows, refuse paths that start with \\", gnunet, 2020/04/30
- [gnurl] 192/264: test2043: use revoked.badssl.com instead of revoked.grc.com, gnunet, 2020/04/30
- [gnurl] 170/264: tests/server: add hidden window to gracefully handle WM_CLOSE, gnunet, 2020/04/30
- [gnurl] 22/264: TODO: TLS-PSK with OpenSSL, gnunet, 2020/04/30