Support for "--engine list" option.

Moved CURLOPT_SSLENGINE* options to after verbose mode is set.
Added a goto. Eek!
This commit is contained in:
Gisle Vanem 2004-12-13 16:47:36 +00:00
parent bdb0620529
commit 6a9ed44088

View File

@ -339,7 +339,7 @@ static void help(void)
" --key <key> Private key file name (SSL)",
" --key-type <type> Private key file type (DER/PEM/ENG) (SSL)",
" --pass <pass> Pass phrase for the private key (SSL)",
" --engine <eng> Crypto engine to use (SSL)",
" --engine <eng> Crypto engine to use (SSL). \"--engine list\" for list",
" --cacert <file> CA certificate to verify peer against (SSL)",
" --capath <directory> CA directory (made using c_rehash) to verify",
" peer against (SSL)",
@ -488,6 +488,7 @@ struct Configurable {
char *key_type;
char *key_passwd;
char *engine;
bool list_engines;
bool crlf;
char *customrequest;
char *krb4level;
@ -740,6 +741,19 @@ static void FreeMultiInfo (struct multi_files *multi_start)
}
}
/* Print list of OpenSSL engines supported.
*/
static void list_engines (const struct curl_slist *engines)
{
puts ("Build-time engines:");
if (!engines) {
puts (" <none>");
return;
}
for ( ; engines; engines = engines->next)
printf (" %s\n", engines->data);
}
/***************************************************************************
*
* formparse()
@ -1721,6 +1735,8 @@ static ParameterError getparameter(char *flag, /* f or -long-flag */
break;
case 'f': /* crypto engine */
GetStr(&config->engine, nextarg);
if (config->engine && curlx_strequal(config->engine,"list"))
config->list_engines = TRUE;
break;
case 'g': /* CA info PEM file */
/* CA cert directory */
@ -2946,7 +2962,7 @@ operate(struct Configurable *config, int argc, char *argv[])
}
}
if(!config->url_list || !config->url_list->url) {
if((!config->url_list || !config->url_list->url) && !config->list_engines) {
clean_getout(config);
helpf("no URL specified!\n");
return CURLE_FAILED_INIT;
@ -3011,6 +3027,16 @@ operate(struct Configurable *config, int argc, char *argv[])
return CURLE_FAILED_INIT;
}
if (config->list_engines) {
const struct curl_slist *engines = NULL;
curl_easy_getinfo(curl, CURLINFO_SSL_ENGINES, &engines);
list_engines(engines);
res = CURLE_OK;
goto quit_curl;
}
/* After this point, we should call curl_easy_cleanup() if we decide to bail
* out from this function! */
@ -3345,9 +3371,6 @@ operate(struct Configurable *config, int argc, char *argv[])
if(1 == config->tcp_nodelay)
curl_easy_setopt(curl, CURLOPT_TCP_NODELAY, 1);
curl_easy_setopt(curl, CURLOPT_SSLENGINE, config->engine);
curl_easy_setopt(curl, CURLOPT_SSLENGINE_DEFAULT, 1);
/* where to store */
curl_easy_setopt(curl, CURLOPT_WRITEDATA, (FILE *)&outs);
/* what call to write */
@ -3525,6 +3548,17 @@ operate(struct Configurable *config, int argc, char *argv[])
}
curl_easy_setopt(curl, CURLOPT_VERBOSE, config->conf&CONF_VERBOSE);
res = CURLE_OK;
/* new in curl ?? */
if (config->engine) {
res = curl_easy_setopt(curl, CURLOPT_SSLENGINE, config->engine);
curl_easy_setopt(curl, CURLOPT_SSLENGINE_DEFAULT, 1);
}
if (res != CURLE_OK)
goto show_error;
/* new in curl 7.10 */
curl_easy_setopt(curl, CURLOPT_ENCODING,
(config->encoding) ? "" : NULL);
@ -3685,6 +3719,8 @@ operate(struct Configurable *config, int argc, char *argv[])
ourWriteEnv(curl);
#endif
show_error:
#ifdef VMS
if (!config->showerror) {
vms_show = VMSSTS_HIDE;
@ -3791,6 +3827,10 @@ operate(struct Configurable *config, int argc, char *argv[])
} /* while-loop through all URLs */
quit_curl:
if (config->engine)
free(config->engine);
if(config->headerfile && !headerfilep && heads.stream)
fclose(heads.stream);