diff --git a/docs/INSTALL.md b/docs/INSTALL.md index 6c2c8ce64..67a9378ff 100644 --- a/docs/INSTALL.md +++ b/docs/INSTALL.md @@ -222,6 +222,9 @@ subdirectory run following command from mentioned subdirectory: In order to build sample program simplessl.c an SSL enabled libcurl is required, as well as the OpenSSL libeay32.lib and ssleay32.lib libraries. +In order to build sample program `sslbackend.c`, an SSL enabled libcurl +is required. + ## Disabling Specific Protocols in Windows builds The configure utility, unfortunately, is not available for the Windows diff --git a/docs/examples/.gitignore b/docs/examples/.gitignore index aece671c6..f22c7b02f 100644 --- a/docs/examples/.gitignore +++ b/docs/examples/.gitignore @@ -70,6 +70,7 @@ smtp-multi smtp-ssl smtp-tls smtp-vrfy +sslbackend url2file usercertinmem xmlstream diff --git a/docs/examples/Makefile.inc b/docs/examples/Makefile.inc index 9b47a952f..31c87a794 100644 --- a/docs/examples/Makefile.inc +++ b/docs/examples/Makefile.inc @@ -33,7 +33,7 @@ check_PROGRAMS = 10-at-a-time anyauthput cookie_interface debug fileupload \ imap-search imap-create imap-delete imap-copy imap-noop imap-ssl \ imap-tls imap-multi url2file sftpget ftpsget postinmemory http2-download \ http2-upload http2-serverpush getredirect ftpuploadfrommem \ - ftpuploadresume + ftpuploadresume sslbackend # These examples require external dependencies that may not be commonly # available on POSIX systems, so don't bother attempting to compile them here. diff --git a/docs/examples/sslbackend.c b/docs/examples/sslbackend.c new file mode 100644 index 000000000..84f1b0c24 --- /dev/null +++ b/docs/examples/sslbackend.c @@ -0,0 +1,75 @@ +/*************************************************************************** + * _ _ ____ _ + * Project ___| | | | _ \| | + * / __| | | | |_) | | + * | (__| |_| | _ <| |___ + * \___|\___/|_| \_\_____| + * + * Copyright (C) 1998 - 2017, Daniel Stenberg, , et al. + * + * This software is licensed as described in the file COPYING, which + * you should have received as part of this distribution. The terms + * are also available at https://curl.haxx.se/docs/copyright.html. + * + * You may opt to use, copy, modify, merge, publish, distribute and/or sell + * copies of the Software, and permit persons to whom the Software is + * furnished to do so, under the terms of the COPYING file. + * + * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY + * KIND, either express or implied. + * + ***************************************************************************/ +/* + * Shows HTTPS usage with client certs and optional ssl engine use. + * + */ +#include +#include +#include +#include +#include + +#include + +/* + * An SSL-enabled libcurl is required for this sample to work (at least one + * SSL backend has to be configured). + * + * **** This example only works with libcurl 7.56.0 and later! **** +*/ + +int main(int argc, char **argv) +{ + const char *name = argc > 1 ? argv[1] : "openssl"; + CURLsslset result; + + if(!strcmp("list", name)) { + const curl_ssl_backend **list; + int i; + + result = curl_global_sslset(-1, NULL, &list); + assert(result == CURLSSLSET_UNKNOWN_BACKEND); + + for(i = 0; list[i]; i++) + printf("SSL backend #%d: '%s' (ID: %d)\n", + i, list[i]->name, list[i]->id); + + return 0; + } else if(isdigit(*name)) { + curl_sslbackend id = (curl_sslbackend)atoi(name); + + result = curl_global_sslset(id, NULL, NULL); + } else + result = curl_global_sslset(-1, name, NULL); + + if(result == CURLSSLSET_UNKNOWN_BACKEND) { + fprintf(stderr, "Unknown SSL backend id: %s\n", name); + return 1; + } + + assert(result == CURLSSLSET_OK); + + printf("Version with SSL backend '%s':\n\n\t%s\n", name, curl_version()); + + return 0; +}