libcurl: #ifdef away more code for disabled features/protocols

This commit is contained in:
Daniel Stenberg 2019-05-05 17:08:22 +02:00
parent 3b06e68b77
commit e91e481612
No known key found for this signature in database
GPG Key ID: 5CC908FDB71E12C2
8 changed files with 157 additions and 104 deletions

View File

@ -885,6 +885,8 @@ check_symbol_exists(freeifaddrs "${CURL_INCLUDES}" HAVE_FREEIFADDRS)
check_symbol_exists(pipe "${CURL_INCLUDES}" HAVE_PIPE) check_symbol_exists(pipe "${CURL_INCLUDES}" HAVE_PIPE)
check_symbol_exists(ftruncate "${CURL_INCLUDES}" HAVE_FTRUNCATE) check_symbol_exists(ftruncate "${CURL_INCLUDES}" HAVE_FTRUNCATE)
check_symbol_exists(getprotobyname "${CURL_INCLUDES}" HAVE_GETPROTOBYNAME) check_symbol_exists(getprotobyname "${CURL_INCLUDES}" HAVE_GETPROTOBYNAME)
check_symbol_exists(getpeername "${CURL_INCLUDES}" HAVE_GETPEERNAME)
check_symbol_exists(getsockname "${CURL_INCLUDES}" HAVE_GETSOCKNAME)
check_symbol_exists(getrlimit "${CURL_INCLUDES}" HAVE_GETRLIMIT) check_symbol_exists(getrlimit "${CURL_INCLUDES}" HAVE_GETRLIMIT)
check_symbol_exists(setlocale "${CURL_INCLUDES}" HAVE_SETLOCALE) check_symbol_exists(setlocale "${CURL_INCLUDES}" HAVE_SETLOCALE)
check_symbol_exists(setmode "${CURL_INCLUDES}" HAVE_SETMODE) check_symbol_exists(setmode "${CURL_INCLUDES}" HAVE_SETMODE)

View File

@ -3772,6 +3772,8 @@ AC_CHECK_FUNCS([fnmatch \
getpwuid_r \ getpwuid_r \
getrlimit \ getrlimit \
gettimeofday \ gettimeofday \
getpeername \
getsockname \
if_nametoindex \ if_nametoindex \
mach_absolute_time \ mach_absolute_time \
pipe \ pipe \

View File

@ -7,7 +7,7 @@
* | (__| |_| | _ <| |___ * | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____| * \___|\___/|_| \_\_____|
* *
* Copyright (C) 1998 - 2018, Daniel Stenberg, <daniel@haxx.se>, et al. * Copyright (C) 1998 - 2019, Daniel Stenberg, <daniel@haxx.se>, et al.
* *
* This software is licensed as described in the file COPYING, which * This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms * you should have received as part of this distribution. The terms
@ -185,6 +185,9 @@
/* Define if you have the ftruncate function. */ /* Define if you have the ftruncate function. */
#define HAVE_FTRUNCATE 1 #define HAVE_FTRUNCATE 1
/* Define to 1 if you have the `getpeername' function. */
#define HAVE_GETPEERNAME 1
/* Define if you have the gethostbyaddr function. */ /* Define if you have the gethostbyaddr function. */
#define HAVE_GETHOSTBYADDR 1 #define HAVE_GETHOSTBYADDR 1

View File

@ -679,17 +679,18 @@ UNITTEST bool getaddressinfo(struct sockaddr *sa, char *addr,
connection */ connection */
void Curl_updateconninfo(struct connectdata *conn, curl_socket_t sockfd) void Curl_updateconninfo(struct connectdata *conn, curl_socket_t sockfd)
{ {
curl_socklen_t len;
struct Curl_sockaddr_storage ssrem;
struct Curl_sockaddr_storage ssloc;
struct Curl_easy *data = conn->data;
if(conn->socktype == SOCK_DGRAM) if(conn->socktype == SOCK_DGRAM)
/* there's no connection! */ /* there's no connection! */
return; return;
#if defined(HAVE_GETPEERNAME) || defined(HAVE_GETSOCKNAME)
if(!conn->bits.reuse && !conn->bits.tcp_fastopen) { if(!conn->bits.reuse && !conn->bits.tcp_fastopen) {
struct Curl_easy *data = conn->data;
char buffer[STRERROR_LEN]; char buffer[STRERROR_LEN];
struct Curl_sockaddr_storage ssrem;
struct Curl_sockaddr_storage ssloc;
curl_socklen_t len;
#ifdef HAVE_GETPEERNAME
len = sizeof(struct Curl_sockaddr_storage); len = sizeof(struct Curl_sockaddr_storage);
if(getpeername(sockfd, (struct sockaddr*) &ssrem, &len)) { if(getpeername(sockfd, (struct sockaddr*) &ssrem, &len)) {
int error = SOCKERRNO; int error = SOCKERRNO;
@ -697,7 +698,8 @@ void Curl_updateconninfo(struct connectdata *conn, curl_socket_t sockfd)
error, Curl_strerror(error, buffer, sizeof(buffer))); error, Curl_strerror(error, buffer, sizeof(buffer)));
return; return;
} }
#endif
#ifdef HAVE_GETSOCKNAME
len = sizeof(struct Curl_sockaddr_storage); len = sizeof(struct Curl_sockaddr_storage);
memset(&ssloc, 0, sizeof(ssloc)); memset(&ssloc, 0, sizeof(ssloc));
if(getsockname(sockfd, (struct sockaddr*) &ssloc, &len)) { if(getsockname(sockfd, (struct sockaddr*) &ssloc, &len)) {
@ -706,7 +708,8 @@ void Curl_updateconninfo(struct connectdata *conn, curl_socket_t sockfd)
error, Curl_strerror(error, buffer, sizeof(buffer))); error, Curl_strerror(error, buffer, sizeof(buffer)));
return; return;
} }
#endif
#ifdef HAVE_GETPEERNAME
if(!getaddressinfo((struct sockaddr*)&ssrem, if(!getaddressinfo((struct sockaddr*)&ssrem,
conn->primary_ip, &conn->primary_port)) { conn->primary_ip, &conn->primary_port)) {
failf(data, "ssrem inet_ntop() failed with errno %d: %s", failf(data, "ssrem inet_ntop() failed with errno %d: %s",
@ -714,15 +717,17 @@ void Curl_updateconninfo(struct connectdata *conn, curl_socket_t sockfd)
return; return;
} }
memcpy(conn->ip_addr_str, conn->primary_ip, MAX_IPADR_LEN); memcpy(conn->ip_addr_str, conn->primary_ip, MAX_IPADR_LEN);
#endif
#ifdef HAVE_GETSOCKNAME
if(!getaddressinfo((struct sockaddr*)&ssloc, if(!getaddressinfo((struct sockaddr*)&ssloc,
conn->local_ip, &conn->local_port)) { conn->local_ip, &conn->local_port)) {
failf(data, "ssloc inet_ntop() failed with errno %d: %s", failf(data, "ssloc inet_ntop() failed with errno %d: %s",
errno, Curl_strerror(errno, buffer, sizeof(buffer))); errno, Curl_strerror(errno, buffer, sizeof(buffer)));
return; return;
} }
#endif
} }
#endif
/* persist connection info in session handle */ /* persist connection info in session handle */
Curl_persistconninfo(conn); Curl_persistconninfo(conn);

View File

@ -235,6 +235,12 @@
/* Define to 1 if you have the `getprotobyname' function. */ /* Define to 1 if you have the `getprotobyname' function. */
#cmakedefine HAVE_GETPROTOBYNAME 1 #cmakedefine HAVE_GETPROTOBYNAME 1
/* Define to 1 if you have the `getpeername' function. */
#cmakedefine HAVE_GETPEERNAME 1
/* Define to 1 if you have the `getsockname' function. */
#cmakedefine HAVE_GETSOCKNAME 1
/* Define to 1 if you have the `getpwuid' function. */ /* Define to 1 if you have the `getpwuid' function. */
#cmakedefine HAVE_GETPWUID 1 #cmakedefine HAVE_GETPWUID 1

View File

@ -277,27 +277,6 @@ static CURLcode vsetopt(struct Curl_easy *data, CURLoption option,
*/ */
data->set.get_filetime = (0 != va_arg(param, long)) ? TRUE : FALSE; data->set.get_filetime = (0 != va_arg(param, long)) ? TRUE : FALSE;
break; break;
case CURLOPT_FTP_CREATE_MISSING_DIRS:
/*
* An FTP option that modifies an upload to create missing directories on
* the server.
*/
switch(va_arg(param, long)) {
case 0:
data->set.ftp_create_missing_dirs = 0;
break;
case 1:
data->set.ftp_create_missing_dirs = 1;
break;
case 2:
data->set.ftp_create_missing_dirs = 2;
break;
default:
/* reserve other values for future use */
result = CURLE_UNKNOWN_OPTION;
break;
}
break;
case CURLOPT_SERVER_RESPONSE_TIMEOUT: case CURLOPT_SERVER_RESPONSE_TIMEOUT:
/* /*
* Option that specifies how quickly an server response must be obtained * Option that specifies how quickly an server response must be obtained
@ -309,6 +288,7 @@ static CURLcode vsetopt(struct Curl_easy *data, CURLoption option,
else else
return CURLE_BAD_FUNCTION_ARGUMENT; return CURLE_BAD_FUNCTION_ARGUMENT;
break; break;
#ifndef CURL_DISABLE_TFTP
case CURLOPT_TFTP_NO_OPTIONS: case CURLOPT_TFTP_NO_OPTIONS:
/* /*
* Option that prevents libcurl from sending TFTP option requests to the * Option that prevents libcurl from sending TFTP option requests to the
@ -325,28 +305,8 @@ static CURLcode vsetopt(struct Curl_easy *data, CURLoption option,
return CURLE_BAD_FUNCTION_ARGUMENT; return CURLE_BAD_FUNCTION_ARGUMENT;
data->set.tftp_blksize = arg; data->set.tftp_blksize = arg;
break; break;
case CURLOPT_DIRLISTONLY: #endif
/* #ifndef CURL_DISABLE_NETRC
* An option that changes the command to one that asks for a list
* only, no file info details.
*/
data->set.ftp_list_only = (0 != va_arg(param, long)) ? TRUE : FALSE;
break;
case CURLOPT_APPEND:
/*
* We want to upload and append to an existing file.
*/
data->set.ftp_append = (0 != va_arg(param, long)) ? TRUE : FALSE;
break;
case CURLOPT_FTP_FILEMETHOD:
/*
* How do access files over FTP.
*/
arg = va_arg(param, long);
if((arg < CURLFTPMETHOD_DEFAULT) || (arg > CURLFTPMETHOD_SINGLECWD))
return CURLE_BAD_FUNCTION_ARGUMENT;
data->set.ftp_filemethod = (curl_ftpfile)arg;
break;
case CURLOPT_NETRC: case CURLOPT_NETRC:
/* /*
* Parse the $HOME/.netrc file * Parse the $HOME/.netrc file
@ -363,6 +323,7 @@ static CURLcode vsetopt(struct Curl_easy *data, CURLoption option,
result = Curl_setstropt(&data->set.str[STRING_NETRC_FILE], result = Curl_setstropt(&data->set.str[STRING_NETRC_FILE],
va_arg(param, char *)); va_arg(param, char *));
break; break;
#endif
case CURLOPT_TRANSFERTEXT: case CURLOPT_TRANSFERTEXT:
/* /*
* This option was previously named 'FTPASCII'. Renamed to work with * This option was previously named 'FTPASCII'. Renamed to work with
@ -1079,7 +1040,7 @@ static CURLcode vsetopt(struct Curl_easy *data, CURLoption option,
data->set.socks5_gssapi_nec = (0 != va_arg(param, long)) ? TRUE : FALSE; data->set.socks5_gssapi_nec = (0 != va_arg(param, long)) ? TRUE : FALSE;
break; break;
#endif #endif
#ifndef CURL_DISABLE_PROXY
case CURLOPT_SOCKS5_GSSAPI_SERVICE: case CURLOPT_SOCKS5_GSSAPI_SERVICE:
case CURLOPT_PROXY_SERVICE_NAME: case CURLOPT_PROXY_SERVICE_NAME:
/* /*
@ -1088,7 +1049,7 @@ static CURLcode vsetopt(struct Curl_easy *data, CURLoption option,
result = Curl_setstropt(&data->set.str[STRING_PROXY_SERVICE_NAME], result = Curl_setstropt(&data->set.str[STRING_PROXY_SERVICE_NAME],
va_arg(param, char *)); va_arg(param, char *));
break; break;
#endif
case CURLOPT_SERVICE_NAME: case CURLOPT_SERVICE_NAME:
/* /*
* Set authentication service name for DIGEST-MD5, Kerberos 5 and SPNEGO * Set authentication service name for DIGEST-MD5, Kerberos 5 and SPNEGO
@ -1117,7 +1078,33 @@ static CURLcode vsetopt(struct Curl_easy *data, CURLoption option,
*/ */
data->set.out = va_arg(param, void *); data->set.out = va_arg(param, void *);
break; break;
case CURLOPT_DIRLISTONLY:
/*
* An option that changes the command to one that asks for a list only, no
* file info details. Used for FTP, POP3 and SFTP.
*/
data->set.ftp_list_only = (0 != va_arg(param, long)) ? TRUE : FALSE;
break;
case CURLOPT_APPEND:
/*
* We want to upload and append to an existing file. Used for FTP and
* SFTP.
*/
data->set.ftp_append = (0 != va_arg(param, long)) ? TRUE : FALSE;
break;
#ifndef CURL_DISABLE_FTP #ifndef CURL_DISABLE_FTP
case CURLOPT_FTP_FILEMETHOD:
/*
* How do access files over FTP.
*/
arg = va_arg(param, long);
if((arg < CURLFTPMETHOD_DEFAULT) || (arg > CURLFTPMETHOD_SINGLECWD))
return CURLE_BAD_FUNCTION_ARGUMENT;
data->set.ftp_filemethod = (curl_ftpfile)arg;
break;
case CURLOPT_FTPPORT: case CURLOPT_FTPPORT:
/* /*
* Use FTP PORT, this also specifies which IP address to use * Use FTP PORT, this also specifies which IP address to use
@ -1153,7 +1140,56 @@ static CURLcode vsetopt(struct Curl_easy *data, CURLoption option,
*/ */
data->set.ftp_skip_ip = (0 != va_arg(param, long)) ? TRUE : FALSE; data->set.ftp_skip_ip = (0 != va_arg(param, long)) ? TRUE : FALSE;
break; break;
case CURLOPT_FTP_ACCOUNT:
result = Curl_setstropt(&data->set.str[STRING_FTP_ACCOUNT],
va_arg(param, char *));
break;
case CURLOPT_FTP_ALTERNATIVE_TO_USER:
result = Curl_setstropt(&data->set.str[STRING_FTP_ALTERNATIVE_TO_USER],
va_arg(param, char *));
break;
case CURLOPT_FTPSSLAUTH:
/*
* Set a specific auth for FTP-SSL transfers.
*/
arg = va_arg(param, long);
if((arg < CURLFTPAUTH_DEFAULT) || (arg > CURLFTPAUTH_TLS))
return CURLE_BAD_FUNCTION_ARGUMENT;
data->set.ftpsslauth = (curl_ftpauth)arg;
break;
case CURLOPT_KRBLEVEL:
/*
* A string that defines the kerberos security level.
*/
result = Curl_setstropt(&data->set.str[STRING_KRB_LEVEL],
va_arg(param, char *));
data->set.krb = (data->set.str[STRING_KRB_LEVEL]) ? TRUE : FALSE;
break;
#endif #endif
case CURLOPT_FTP_CREATE_MISSING_DIRS:
/*
* An FTP/SFTP option that modifies an upload to create missing
* directories on the server.
*/
switch(va_arg(param, long)) {
case 0:
data->set.ftp_create_missing_dirs = 0;
break;
case 1:
data->set.ftp_create_missing_dirs = 1;
break;
case 2:
data->set.ftp_create_missing_dirs = 2;
break;
default:
/* reserve other values for future use */
result = CURLE_UNKNOWN_OPTION;
break;
}
break;
case CURLOPT_READDATA: case CURLOPT_READDATA:
/* /*
* FILE pointer to read the file to be uploaded from. Or possibly * FILE pointer to read the file to be uploaded from. Or possibly
@ -1562,6 +1598,7 @@ static CURLcode vsetopt(struct Curl_easy *data, CURLoption option,
result = Curl_setstropt(&data->set.str[STRING_CERT_ORIG], result = Curl_setstropt(&data->set.str[STRING_CERT_ORIG],
va_arg(param, char *)); va_arg(param, char *));
break; break;
#ifndef CURL_DISABLE_PROXY
case CURLOPT_PROXY_SSLCERT: case CURLOPT_PROXY_SSLCERT:
/* /*
* String that holds file name of the SSL certificate to use for proxy * String that holds file name of the SSL certificate to use for proxy
@ -1569,6 +1606,7 @@ static CURLcode vsetopt(struct Curl_easy *data, CURLoption option,
result = Curl_setstropt(&data->set.str[STRING_CERT_PROXY], result = Curl_setstropt(&data->set.str[STRING_CERT_PROXY],
va_arg(param, char *)); va_arg(param, char *));
break; break;
#endif
case CURLOPT_SSLCERTTYPE: case CURLOPT_SSLCERTTYPE:
/* /*
* String that holds file type of the SSL certificate to use * String that holds file type of the SSL certificate to use
@ -1576,6 +1614,7 @@ static CURLcode vsetopt(struct Curl_easy *data, CURLoption option,
result = Curl_setstropt(&data->set.str[STRING_CERT_TYPE_ORIG], result = Curl_setstropt(&data->set.str[STRING_CERT_TYPE_ORIG],
va_arg(param, char *)); va_arg(param, char *));
break; break;
#ifndef CURL_DISABLE_PROXY
case CURLOPT_PROXY_SSLCERTTYPE: case CURLOPT_PROXY_SSLCERTTYPE:
/* /*
* String that holds file type of the SSL certificate to use for proxy * String that holds file type of the SSL certificate to use for proxy
@ -1583,6 +1622,7 @@ static CURLcode vsetopt(struct Curl_easy *data, CURLoption option,
result = Curl_setstropt(&data->set.str[STRING_CERT_TYPE_PROXY], result = Curl_setstropt(&data->set.str[STRING_CERT_TYPE_PROXY],
va_arg(param, char *)); va_arg(param, char *));
break; break;
#endif
case CURLOPT_SSLKEY: case CURLOPT_SSLKEY:
/* /*
* String that holds file name of the SSL key to use * String that holds file name of the SSL key to use
@ -1590,6 +1630,7 @@ static CURLcode vsetopt(struct Curl_easy *data, CURLoption option,
result = Curl_setstropt(&data->set.str[STRING_KEY_ORIG], result = Curl_setstropt(&data->set.str[STRING_KEY_ORIG],
va_arg(param, char *)); va_arg(param, char *));
break; break;
#ifndef CURL_DISABLE_PROXY
case CURLOPT_PROXY_SSLKEY: case CURLOPT_PROXY_SSLKEY:
/* /*
* String that holds file name of the SSL key to use for proxy * String that holds file name of the SSL key to use for proxy
@ -1597,6 +1638,7 @@ static CURLcode vsetopt(struct Curl_easy *data, CURLoption option,
result = Curl_setstropt(&data->set.str[STRING_KEY_PROXY], result = Curl_setstropt(&data->set.str[STRING_KEY_PROXY],
va_arg(param, char *)); va_arg(param, char *));
break; break;
#endif
case CURLOPT_SSLKEYTYPE: case CURLOPT_SSLKEYTYPE:
/* /*
* String that holds file type of the SSL key to use * String that holds file type of the SSL key to use
@ -1604,6 +1646,7 @@ static CURLcode vsetopt(struct Curl_easy *data, CURLoption option,
result = Curl_setstropt(&data->set.str[STRING_KEY_TYPE_ORIG], result = Curl_setstropt(&data->set.str[STRING_KEY_TYPE_ORIG],
va_arg(param, char *)); va_arg(param, char *));
break; break;
#ifndef CURL_DISABLE_PROXY
case CURLOPT_PROXY_SSLKEYTYPE: case CURLOPT_PROXY_SSLKEYTYPE:
/* /*
* String that holds file type of the SSL key to use for proxy * String that holds file type of the SSL key to use for proxy
@ -1611,6 +1654,7 @@ static CURLcode vsetopt(struct Curl_easy *data, CURLoption option,
result = Curl_setstropt(&data->set.str[STRING_KEY_TYPE_PROXY], result = Curl_setstropt(&data->set.str[STRING_KEY_TYPE_PROXY],
va_arg(param, char *)); va_arg(param, char *));
break; break;
#endif
case CURLOPT_KEYPASSWD: case CURLOPT_KEYPASSWD:
/* /*
* String that holds the SSL or SSH private key password. * String that holds the SSL or SSH private key password.
@ -1618,6 +1662,7 @@ static CURLcode vsetopt(struct Curl_easy *data, CURLoption option,
result = Curl_setstropt(&data->set.str[STRING_KEY_PASSWD_ORIG], result = Curl_setstropt(&data->set.str[STRING_KEY_PASSWD_ORIG],
va_arg(param, char *)); va_arg(param, char *));
break; break;
#ifndef CURL_DISABLE_PROXY
case CURLOPT_PROXY_KEYPASSWD: case CURLOPT_PROXY_KEYPASSWD:
/* /*
* String that holds the SSL private key password for proxy. * String that holds the SSL private key password for proxy.
@ -1625,6 +1670,7 @@ static CURLcode vsetopt(struct Curl_easy *data, CURLoption option,
result = Curl_setstropt(&data->set.str[STRING_KEY_PASSWD_PROXY], result = Curl_setstropt(&data->set.str[STRING_KEY_PASSWD_PROXY],
va_arg(param, char *)); va_arg(param, char *));
break; break;
#endif
case CURLOPT_SSLENGINE: case CURLOPT_SSLENGINE:
/* /*
* String that holds the SSL crypto engine. * String that holds the SSL crypto engine.
@ -1651,14 +1697,14 @@ static CURLcode vsetopt(struct Curl_easy *data, CURLoption option,
*/ */
data->set.crlf = (0 != va_arg(param, long)) ? TRUE : FALSE; data->set.crlf = (0 != va_arg(param, long)) ? TRUE : FALSE;
break; break;
#ifndef CURL_DISABLE_PROXY
case CURLOPT_HAPROXYPROTOCOL: case CURLOPT_HAPROXYPROTOCOL:
/* /*
* Set to send the HAProxy Proxy Protocol header * Set to send the HAProxy Proxy Protocol header
*/ */
data->set.haproxyprotocol = (0 != va_arg(param, long)) ? TRUE : FALSE; data->set.haproxyprotocol = (0 != va_arg(param, long)) ? TRUE : FALSE;
break; break;
#endif
case CURLOPT_INTERFACE: case CURLOPT_INTERFACE:
/* /*
* Set what interface or address/hostname to bind the socket to when * Set what interface or address/hostname to bind the socket to when
@ -1685,14 +1731,6 @@ static CURLcode vsetopt(struct Curl_easy *data, CURLoption option,
return CURLE_BAD_FUNCTION_ARGUMENT; return CURLE_BAD_FUNCTION_ARGUMENT;
data->set.localportrange = curlx_sltosi(arg); data->set.localportrange = curlx_sltosi(arg);
break; break;
case CURLOPT_KRBLEVEL:
/*
* A string that defines the kerberos security level.
*/
result = Curl_setstropt(&data->set.str[STRING_KRB_LEVEL],
va_arg(param, char *));
data->set.krb = (data->set.str[STRING_KRB_LEVEL]) ? TRUE : FALSE;
break;
case CURLOPT_GSSAPI_DELEGATION: case CURLOPT_GSSAPI_DELEGATION:
/* /*
* GSS-API credential delegation bitmask * GSS-API credential delegation bitmask
@ -1940,13 +1978,14 @@ static CURLcode vsetopt(struct Curl_easy *data, CURLoption option,
result = Curl_setstropt(&data->set.str[STRING_SSL_ISSUERCERT_ORIG], result = Curl_setstropt(&data->set.str[STRING_SSL_ISSUERCERT_ORIG],
va_arg(param, char *)); va_arg(param, char *));
break; break;
#ifndef CURL_DISABLE_TELNET
case CURLOPT_TELNETOPTIONS: case CURLOPT_TELNETOPTIONS:
/* /*
* Set a linked list of telnet options * Set a linked list of telnet options
*/ */
data->set.telnet_options = va_arg(param, struct curl_slist *); data->set.telnet_options = va_arg(param, struct curl_slist *);
break; break;
#endif
case CURLOPT_BUFFERSIZE: case CURLOPT_BUFFERSIZE:
/* /*
* The application kindly asks for a differently sized receive buffer. * The application kindly asks for a differently sized receive buffer.
@ -2114,16 +2153,6 @@ static CURLcode vsetopt(struct Curl_easy *data, CURLoption option,
#endif #endif
#endif #endif
case CURLOPT_FTPSSLAUTH:
/*
* Set a specific auth for FTP-SSL transfers.
*/
arg = va_arg(param, long);
if((arg < CURLFTPAUTH_DEFAULT) || (arg > CURLFTPAUTH_TLS))
return CURLE_BAD_FUNCTION_ARGUMENT;
data->set.ftpsslauth = (curl_ftpauth)arg;
break;
case CURLOPT_IPRESOLVE: case CURLOPT_IPRESOLVE:
arg = va_arg(param, long); arg = va_arg(param, long);
if((arg < CURL_IPRESOLVE_WHATEVER) || (arg > CURL_IPRESOLVE_V6)) if((arg < CURL_IPRESOLVE_WHATEVER) || (arg > CURL_IPRESOLVE_V6))
@ -2149,11 +2178,6 @@ static CURLcode vsetopt(struct Curl_easy *data, CURLoption option,
data->set.tcp_nodelay = (0 != va_arg(param, long)) ? TRUE : FALSE; data->set.tcp_nodelay = (0 != va_arg(param, long)) ? TRUE : FALSE;
break; break;
case CURLOPT_FTP_ACCOUNT:
result = Curl_setstropt(&data->set.str[STRING_FTP_ACCOUNT],
va_arg(param, char *));
break;
case CURLOPT_IGNORE_CONTENT_LENGTH: case CURLOPT_IGNORE_CONTENT_LENGTH:
data->set.ignorecl = (0 != va_arg(param, long)) ? TRUE : FALSE; data->set.ignorecl = (0 != va_arg(param, long)) ? TRUE : FALSE;
break; break;
@ -2165,11 +2189,6 @@ static CURLcode vsetopt(struct Curl_easy *data, CURLoption option,
data->set.connect_only = (0 != va_arg(param, long)) ? TRUE : FALSE; data->set.connect_only = (0 != va_arg(param, long)) ? TRUE : FALSE;
break; break;
case CURLOPT_FTP_ALTERNATIVE_TO_USER:
result = Curl_setstropt(&data->set.str[STRING_FTP_ALTERNATIVE_TO_USER],
va_arg(param, char *));
break;
case CURLOPT_SOCKOPTFUNCTION: case CURLOPT_SOCKOPTFUNCTION:
/* /*
* socket callback function: called after socket() but before connect() * socket callback function: called after socket() but before connect()
@ -2285,6 +2304,10 @@ static CURLcode vsetopt(struct Curl_easy *data, CURLoption option,
*/ */
data->set.ssh_keyfunc_userp = va_arg(param, void *); data->set.ssh_keyfunc_userp = va_arg(param, void *);
break; break;
case CURLOPT_SSH_COMPRESSION:
data->set.ssh_compression = (0 != va_arg(param, long))?TRUE:FALSE;
break;
#endif /* USE_SSH */ #endif /* USE_SSH */
case CURLOPT_HTTP_TRANSFER_DECODING: case CURLOPT_HTTP_TRANSFER_DECODING:
@ -2301,6 +2324,7 @@ static CURLcode vsetopt(struct Curl_easy *data, CURLoption option,
data->set.http_ce_skip = (0 == va_arg(param, long)) ? TRUE : FALSE; data->set.http_ce_skip = (0 == va_arg(param, long)) ? TRUE : FALSE;
break; break;
#if !defined(CURL_DISABLE_FTP) || defined(USE_SSH)
case CURLOPT_NEW_FILE_PERMS: case CURLOPT_NEW_FILE_PERMS:
/* /*
* Uses these permissions instead of 0644 * Uses these permissions instead of 0644
@ -2320,6 +2344,7 @@ static CURLcode vsetopt(struct Curl_easy *data, CURLoption option,
return CURLE_BAD_FUNCTION_ARGUMENT; return CURLE_BAD_FUNCTION_ARGUMENT;
data->set.new_directory_perms = arg; data->set.new_directory_perms = arg;
break; break;
#endif
case CURLOPT_ADDRESS_SCOPE: case CURLOPT_ADDRESS_SCOPE:
/* /*
@ -2356,7 +2381,7 @@ static CURLcode vsetopt(struct Curl_easy *data, CURLoption option,
result = Curl_setstropt(&data->set.str[STRING_DEFAULT_PROTOCOL], result = Curl_setstropt(&data->set.str[STRING_DEFAULT_PROTOCOL],
va_arg(param, char *)); va_arg(param, char *));
break; break;
#ifndef CURL_DISABLE_SMTP
case CURLOPT_MAIL_FROM: case CURLOPT_MAIL_FROM:
/* Set the SMTP mail originator */ /* Set the SMTP mail originator */
result = Curl_setstropt(&data->set.str[STRING_MAIL_FROM], result = Curl_setstropt(&data->set.str[STRING_MAIL_FROM],
@ -2373,12 +2398,13 @@ static CURLcode vsetopt(struct Curl_easy *data, CURLoption option,
/* Set the list of mail recipients */ /* Set the list of mail recipients */
data->set.mail_rcpt = va_arg(param, struct curl_slist *); data->set.mail_rcpt = va_arg(param, struct curl_slist *);
break; break;
#endif
case CURLOPT_SASL_IR: case CURLOPT_SASL_IR:
/* Enable/disable SASL initial response */ /* Enable/disable SASL initial response */
data->set.sasl_ir = (0 != va_arg(param, long)) ? TRUE : FALSE; data->set.sasl_ir = (0 != va_arg(param, long)) ? TRUE : FALSE;
break; break;
#ifndef CURL_DISABLE_RTSP
case CURLOPT_RTSP_REQUEST: case CURLOPT_RTSP_REQUEST:
{ {
/* /*
@ -2487,7 +2513,8 @@ static CURLcode vsetopt(struct Curl_easy *data, CURLoption option,
/* Set the user defined RTP write function */ /* Set the user defined RTP write function */
data->set.fwrite_rtp = va_arg(param, curl_write_callback); data->set.fwrite_rtp = va_arg(param, curl_write_callback);
break; break;
#endif
#ifndef CURL_DISABLE_FTP
case CURLOPT_WILDCARDMATCH: case CURLOPT_WILDCARDMATCH:
data->set.wildcard_enabled = (0 != va_arg(param, long)) ? TRUE : FALSE; data->set.wildcard_enabled = (0 != va_arg(param, long)) ? TRUE : FALSE;
break; break;
@ -2500,7 +2527,6 @@ static CURLcode vsetopt(struct Curl_easy *data, CURLoption option,
case CURLOPT_FNMATCH_FUNCTION: case CURLOPT_FNMATCH_FUNCTION:
data->set.fnmatch = va_arg(param, curl_fnmatch_callback); data->set.fnmatch = va_arg(param, curl_fnmatch_callback);
break; break;
#ifndef CURL_DISABLE_FTP
case CURLOPT_CHUNK_DATA: case CURLOPT_CHUNK_DATA:
data->wildcard.customptr = va_arg(param, void *); data->wildcard.customptr = va_arg(param, void *);
break; break;
@ -2552,6 +2578,7 @@ static CURLcode vsetopt(struct Curl_easy *data, CURLoption option,
data->set.proxy_ssl.authtype = CURL_TLSAUTH_NONE; data->set.proxy_ssl.authtype = CURL_TLSAUTH_NONE;
break; break;
#endif #endif
#ifdef USE_ARES
case CURLOPT_DNS_SERVERS: case CURLOPT_DNS_SERVERS:
result = Curl_set_dns_servers(data, va_arg(param, char *)); result = Curl_set_dns_servers(data, va_arg(param, char *));
break; break;
@ -2564,7 +2591,7 @@ static CURLcode vsetopt(struct Curl_easy *data, CURLoption option,
case CURLOPT_DNS_LOCAL_IP6: case CURLOPT_DNS_LOCAL_IP6:
result = Curl_set_dns_local_ip6(data, va_arg(param, char *)); result = Curl_set_dns_local_ip6(data, va_arg(param, char *));
break; break;
#endif
case CURLOPT_TCP_KEEPALIVE: case CURLOPT_TCP_KEEPALIVE:
data->set.tcp_keepalive = (0 != va_arg(param, long)) ? TRUE : FALSE; data->set.tcp_keepalive = (0 != va_arg(param, long)) ? TRUE : FALSE;
break; break;
@ -2588,13 +2615,14 @@ static CURLcode vsetopt(struct Curl_easy *data, CURLoption option,
result = CURLE_NOT_BUILT_IN; result = CURLE_NOT_BUILT_IN;
#endif #endif
break; break;
#ifdef USE_NGHTTP2
case CURLOPT_SSL_ENABLE_NPN: case CURLOPT_SSL_ENABLE_NPN:
data->set.ssl_enable_npn = (0 != va_arg(param, long)) ? TRUE : FALSE; data->set.ssl_enable_npn = (0 != va_arg(param, long)) ? TRUE : FALSE;
break; break;
case CURLOPT_SSL_ENABLE_ALPN: case CURLOPT_SSL_ENABLE_ALPN:
data->set.ssl_enable_alpn = (0 != va_arg(param, long)) ? TRUE : FALSE; data->set.ssl_enable_alpn = (0 != va_arg(param, long)) ? TRUE : FALSE;
break; break;
#endif
#ifdef USE_UNIX_SOCKETS #ifdef USE_UNIX_SOCKETS
case CURLOPT_UNIX_SOCKET_PATH: case CURLOPT_UNIX_SOCKET_PATH:
data->set.abstract_unix_socket = FALSE; data->set.abstract_unix_socket = FALSE;
@ -2645,9 +2673,6 @@ static CURLcode vsetopt(struct Curl_easy *data, CURLoption option,
case CURLOPT_SUPPRESS_CONNECT_HEADERS: case CURLOPT_SUPPRESS_CONNECT_HEADERS:
data->set.suppress_connect_headers = (0 != va_arg(param, long))?TRUE:FALSE; data->set.suppress_connect_headers = (0 != va_arg(param, long))?TRUE:FALSE;
break; break;
case CURLOPT_SSH_COMPRESSION:
data->set.ssh_compression = (0 != va_arg(param, long))?TRUE:FALSE;
break;
case CURLOPT_HAPPY_EYEBALLS_TIMEOUT_MS: case CURLOPT_HAPPY_EYEBALLS_TIMEOUT_MS:
arg = va_arg(param, long); arg = va_arg(param, long);
if(arg < 0) if(arg < 0)
@ -2663,11 +2688,13 @@ static CURLcode vsetopt(struct Curl_easy *data, CURLoption option,
data->set.disallow_username_in_url = data->set.disallow_username_in_url =
(0 != va_arg(param, long)) ? TRUE : FALSE; (0 != va_arg(param, long)) ? TRUE : FALSE;
break; break;
#ifndef CURL_DISABLE_DOH
case CURLOPT_DOH_URL: case CURLOPT_DOH_URL:
result = Curl_setstropt(&data->set.str[STRING_DOH], result = Curl_setstropt(&data->set.str[STRING_DOH],
va_arg(param, char *)); va_arg(param, char *));
data->set.doh = data->set.str[STRING_DOH]?TRUE:FALSE; data->set.doh = data->set.str[STRING_DOH]?TRUE:FALSE;
break; break;
#endif
case CURLOPT_UPKEEP_INTERVAL_MS: case CURLOPT_UPKEEP_INTERVAL_MS:
arg = va_arg(param, long); arg = va_arg(param, long);
if(arg < 0) if(arg < 0)

View File

@ -439,11 +439,12 @@ CURLcode Curl_init_userdefined(struct Curl_easy *data)
set->httpreq = HTTPREQ_GET; /* Default HTTP request */ set->httpreq = HTTPREQ_GET; /* Default HTTP request */
set->rtspreq = RTSPREQ_OPTIONS; /* Default RTSP request */ set->rtspreq = RTSPREQ_OPTIONS; /* Default RTSP request */
#ifndef CURL_DISABLE_FILE
set->ftp_use_epsv = TRUE; /* FTP defaults to EPSV operations */ set->ftp_use_epsv = TRUE; /* FTP defaults to EPSV operations */
set->ftp_use_eprt = TRUE; /* FTP defaults to EPRT operations */ set->ftp_use_eprt = TRUE; /* FTP defaults to EPRT operations */
set->ftp_use_pret = FALSE; /* mainly useful for drftpd servers */ set->ftp_use_pret = FALSE; /* mainly useful for drftpd servers */
set->ftp_filemethod = FTPFILE_MULTICWD; set->ftp_filemethod = FTPFILE_MULTICWD;
#endif
set->dns_cache_timeout = 60; /* Timeout every 60 seconds by default */ set->dns_cache_timeout = 60; /* Timeout every 60 seconds by default */
/* Set the default size of the SSL session ID cache */ /* Set the default size of the SSL session ID cache */
@ -1767,9 +1768,10 @@ static struct connectdata *allocate_conn(struct Curl_easy *data)
#endif /* CURL_DISABLE_PROXY */ #endif /* CURL_DISABLE_PROXY */
conn->bits.user_passwd = (data->set.str[STRING_USERNAME]) ? TRUE : FALSE; conn->bits.user_passwd = (data->set.str[STRING_USERNAME]) ? TRUE : FALSE;
#ifndef CURL_DISABLE_FTP
conn->bits.ftp_use_epsv = data->set.ftp_use_epsv; conn->bits.ftp_use_epsv = data->set.ftp_use_epsv;
conn->bits.ftp_use_eprt = data->set.ftp_use_eprt; conn->bits.ftp_use_eprt = data->set.ftp_use_eprt;
#endif
conn->ssl_config.verifystatus = data->set.ssl.primary.verifystatus; conn->ssl_config.verifystatus = data->set.ssl.primary.verifystatus;
conn->ssl_config.verifypeer = data->set.ssl.primary.verifypeer; conn->ssl_config.verifypeer = data->set.ssl.primary.verifypeer;
conn->ssl_config.verifyhost = data->set.ssl.primary.verifyhost; conn->ssl_config.verifyhost = data->set.ssl.primary.verifyhost;

View File

@ -434,6 +434,7 @@ struct ConnectBits {
though it will be discarded. When the whole send though it will be discarded. When the whole send
operation is done, we must call the data rewind operation is done, we must call the data rewind
callback. */ callback. */
#ifndef CURL_DISABLE_FTP
bit ftp_use_epsv:1; /* As set with CURLOPT_FTP_USE_EPSV, but if we find out bit ftp_use_epsv:1; /* As set with CURLOPT_FTP_USE_EPSV, but if we find out
EPSV doesn't work we disable it for the forthcoming EPSV doesn't work we disable it for the forthcoming
requests */ requests */
@ -441,6 +442,7 @@ struct ConnectBits {
EPRT doesn't work we disable it for the forthcoming EPRT doesn't work we disable it for the forthcoming
requests */ requests */
bit ftp_use_data_ssl:1; /* Enabled SSL for the data connection */ bit ftp_use_data_ssl:1; /* Enabled SSL for the data connection */
#endif
bit netrc:1; /* name+password provided by netrc */ bit netrc:1; /* name+password provided by netrc */
bit userpwd_in_url:1; /* name+password found in url */ bit userpwd_in_url:1; /* name+password found in url */
bit stream_was_rewound:1; /* The stream was rewound after a request read bit stream_was_rewound:1; /* The stream was rewound after a request read
@ -1614,7 +1616,11 @@ struct UserDefined {
long ipver; /* the CURL_IPRESOLVE_* defines in the public header file long ipver; /* the CURL_IPRESOLVE_* defines in the public header file
0 - whatever, 1 - v2, 2 - v6 */ 0 - whatever, 1 - v2, 2 - v6 */
curl_off_t max_filesize; /* Maximum file size to download */ curl_off_t max_filesize; /* Maximum file size to download */
#ifndef CURL_DISABLE_FTP
curl_ftpfile ftp_filemethod; /* how to get to a file when FTP is used */ curl_ftpfile ftp_filemethod; /* how to get to a file when FTP is used */
curl_ftpauth ftpsslauth; /* what AUTH XXX to be attempted */
curl_ftpccc ftp_ccc; /* FTP CCC options */
#endif
int ftp_create_missing_dirs; /* 1 - create directories that don't exist int ftp_create_missing_dirs; /* 1 - create directories that don't exist
2 - the same but also allow MKD to fail once 2 - the same but also allow MKD to fail once
*/ */
@ -1624,8 +1630,6 @@ struct UserDefined {
use_netrc; /* defined in include/curl.h */ use_netrc; /* defined in include/curl.h */
curl_usessl use_ssl; /* if AUTH TLS is to be attempted etc, for FTP or curl_usessl use_ssl; /* if AUTH TLS is to be attempted etc, for FTP or
IMAP or POP3 or others! */ IMAP or POP3 or others! */
curl_ftpauth ftpsslauth; /* what AUTH XXX to be attempted */
curl_ftpccc ftp_ccc; /* FTP CCC options */
long new_file_perms; /* Permissions to use when creating remote files */ long new_file_perms; /* Permissions to use when creating remote files */
long new_directory_perms; /* Permissions to use when creating remote dirs */ long new_directory_perms; /* Permissions to use when creating remote dirs */
long ssh_auth_types; /* allowed SSH auth types */ long ssh_auth_types; /* allowed SSH auth types */
@ -1686,7 +1690,14 @@ struct UserDefined {
bit prefer_ascii:1; /* ASCII rather than binary */ bit prefer_ascii:1; /* ASCII rather than binary */
bit ftp_append:1; /* append, not overwrite, on upload */ bit ftp_append:1; /* append, not overwrite, on upload */
bit ftp_list_only:1; /* switch FTP command for listing directories */ bit ftp_list_only:1; /* switch FTP command for listing directories */
#ifndef CURL_DISABLE_FTP
bit ftp_use_port:1; /* use the FTP PORT command */ bit ftp_use_port:1; /* use the FTP PORT command */
bit ftp_use_epsv:1; /* if EPSV is to be attempted or not */
bit ftp_use_eprt:1; /* if EPRT is to be attempted or not */
bit ftp_use_pret:1; /* if PRET is to be used before PASV or not */
bit ftp_skip_ip:1; /* skip the IP address the FTP server passes on to
us */
#endif
bit hide_progress:1; /* don't use the progress meter */ bit hide_progress:1; /* don't use the progress meter */
bit http_fail_on_error:1; /* fail on HTTP error codes >= 400 */ bit http_fail_on_error:1; /* fail on HTTP error codes >= 400 */
bit http_keep_sending_on_error:1; /* for HTTP status codes >= 300 */ bit http_keep_sending_on_error:1; /* for HTTP status codes >= 300 */
@ -1704,15 +1715,10 @@ struct UserDefined {
bit krb:1; /* Kerberos connection requested */ bit krb:1; /* Kerberos connection requested */
bit reuse_forbid:1; /* forbidden to be reused, close after use */ bit reuse_forbid:1; /* forbidden to be reused, close after use */
bit reuse_fresh:1; /* do not re-use an existing connection */ bit reuse_fresh:1; /* do not re-use an existing connection */
bit ftp_use_epsv:1; /* if EPSV is to be attempted or not */
bit ftp_use_eprt:1; /* if EPRT is to be attempted or not */
bit ftp_use_pret:1; /* if PRET is to be used before PASV or not */
bit no_signal:1; /* do not use any signal/alarm handler */ bit no_signal:1; /* do not use any signal/alarm handler */
bit tcp_nodelay:1; /* whether to enable TCP_NODELAY or not */ bit tcp_nodelay:1; /* whether to enable TCP_NODELAY or not */
bit ignorecl:1; /* ignore content length */ bit ignorecl:1; /* ignore content length */
bit ftp_skip_ip:1; /* skip the IP address the FTP server passes on to
us */
bit connect_only:1; /* make connection, let application use the socket */ bit connect_only:1; /* make connection, let application use the socket */
bit http_te_skip:1; /* pass the raw body data to the user, even when bit http_te_skip:1; /* pass the raw body data to the user, even when
transfer-encoded (chunked, compressed) */ transfer-encoded (chunked, compressed) */