struct getout *url_get; /* point to the node to fill in URL */
struct getout *url_out; /* point to the node to fill in outfile */
struct getout *url_ul; /* point to the node to fill in upload */
+ size_t num_urls; /* number of URLs added to the list */
#ifndef CURL_DISABLE_IPFS
char *ipfs_gateway;
#endif /* !CURL_DISABLE_IPFS */
sizeof(aliases[0]), findarg);
}
-static ParameterError parse_url(struct OperationConfig *config,
+static ParameterError parse_url(struct GlobalConfig *global,
+ struct OperationConfig *config,
const char *nextarg)
{
ParameterError err = PARAM_OK;
/* fill in the URL */
err = getstr(&url->url, nextarg, DENY_BLANK);
url->flags |= GETOUT_URL;
+ if((++config->num_urls > 1) && (config->etag_save_file ||
+ config->etag_compare_file)) {
+ errorf(global, "The etag options only work on a single URL");
+ return PARAM_BAD_USE;
+ }
}
return err;
}
config->xattr = toggle;
break;
case C_URL: /* --url */
- err = parse_url(config, nextarg);
+ err = parse_url(global, config, nextarg);
break;
case C_FTP_SSL: /* --ftp-ssl */
case C_SSL: /* --ssl */
config->socks5_auth &= ~CURLAUTH_GSSAPI;
break;
case C_ETAG_SAVE: /* --etag-save */
- err = getstr(&config->etag_save_file, nextarg, DENY_BLANK);
+ if(config->num_urls > 1) {
+ errorf(global, "The etag options only work on a single URL");
+ err = PARAM_BAD_USE;
+ }
+ else
+ err = getstr(&config->etag_save_file, nextarg, DENY_BLANK);
break;
case C_ETAG_COMPARE: /* --etag-compare */
- err = getstr(&config->etag_compare_file, nextarg, DENY_BLANK);
+ if(config->num_urls > 1) {
+ errorf(global, "The etag options only work on a single URL");
+ err = PARAM_BAD_USE;
+ }
+ else
+ err = getstr(&config->etag_compare_file, nextarg, DENY_BLANK);
break;
case C_CURVES: /* --curves */
err = getstr(&config->ssl_ec_curves, nextarg, DENY_BLANK);
test453 test454 test455 test456 test457 test458 test459 test460 test461 \
test462 test463 test467 test468 test469 test470 test471 test472 test473 \
test474 test475 test476 test477 test478 test479 test480 test481 test482 \
-test483 \
+test483 test484 test485 \
test490 test491 test492 test493 test494 test495 test496 test497 test498 \
test499 test500 test501 test502 test503 test504 test505 test506 test507 \
test508 test509 test510 test511 test512 test513 test514 test515 test516 \
--- /dev/null
+<testcase>
+<info>
+<keywords>
+HTTP
+etags
+</keywords>
+</info>
+
+#
+# Server-side
+<reply>
+</reply>
+
+#
+# Client-side
+<client>
+<server>
+none
+</server>
+<name>
+Use --etag-compare and -save with more than one URL
+</name>
+<command>
+http://example.com/%TESTNUMBER --etag-compare %LOGDIR/etag%TESTNUMBER --etag-save %LOGDIR/etag%TESTNUMBER --url http://example.net/fooo
+</command>
+</client>
+
+#
+# Verify data after the test has been "shot"
+<verify>
+<errorcode>
+2
+</errorcode>
+<stderr mode="text">
+curl: The etag options only work on a single URL
+curl: option --url: is badly used here
+%if manual
+curl: try 'curl --help' or 'curl --manual' for more information
+%else
+curl: try 'curl --help' for more information
+%endif
+</stderr>
+</verify>
+</testcase>
--- /dev/null
+<testcase>
+<info>
+<keywords>
+HTTP
+etags
+</keywords>
+</info>
+
+#
+# Server-side
+<reply>
+</reply>
+
+#
+# Client-side
+<client>
+<server>
+none
+</server>
+<name>
+Use --etag-compare and -save with more than one URL, URLs specified first
+</name>
+<command>
+http://example.com/%TESTNUMBER http://example.net/fooo --etag-save %LOGDIR/etag%TESTNUMBER
+</command>
+</client>
+
+#
+# Verify data after the test has been "shot"
+<verify>
+<errorcode>
+2
+</errorcode>
+<stderr mode="text">
+curl: The etag options only work on a single URL
+curl: option --etag-save: is badly used here
+%if manual
+curl: try 'curl --help' or 'curl --manual' for more information
+%else
+curl: try 'curl --help' for more information
+%endif
+</stderr>
+</verify>
+</testcase>