mirror of
https://github.com/moparisthebest/wget
synced 2024-07-03 16:38:41 -04:00
Fix compile error when IPv6 is disabled
* src/ftp-basic.c: The code for the new FTPS functionality was unintentionally inside a #ifdef IPV6 block. Move the code around so that it is defined even when IPV6 isn't used
This commit is contained in:
parent
08ece891b5
commit
2cfcadf5e6
118
src/ftp-basic.c
118
src/ftp-basic.c
@ -429,6 +429,65 @@ ip_address_to_eprt_repr (const ip_address *addr, int port, char *buf,
|
|||||||
buf[buflen - 1] = '\0';
|
buf[buflen - 1] = '\0';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Bind a port and send the appropriate PORT command to the FTP
|
||||||
|
server. Use acceptport after RETR, to get the socket of data
|
||||||
|
connection. */
|
||||||
|
uerr_t
|
||||||
|
ftp_eprt (int csock, int *local_sock)
|
||||||
|
{
|
||||||
|
uerr_t err;
|
||||||
|
char *request, *respline;
|
||||||
|
ip_address addr;
|
||||||
|
int nwritten;
|
||||||
|
int port;
|
||||||
|
/* Must contain the argument of EPRT (of the form |af|addr|port|).
|
||||||
|
* 4 chars for the | separators, INET6_ADDRSTRLEN chars for addr
|
||||||
|
* 1 char for af (1-2) and 5 chars for port (0-65535) */
|
||||||
|
char bytes[4 + INET6_ADDRSTRLEN + 1 + 5 + 1];
|
||||||
|
|
||||||
|
/* Get the address of this side of the connection. */
|
||||||
|
if (!socket_ip_address (csock, &addr, ENDPOINT_LOCAL))
|
||||||
|
return FTPSYSERR;
|
||||||
|
|
||||||
|
/* Setting port to 0 lets the system choose a free port. */
|
||||||
|
port = 0;
|
||||||
|
|
||||||
|
/* Bind the port. */
|
||||||
|
*local_sock = bind_local (&addr, &port);
|
||||||
|
if (*local_sock < 0)
|
||||||
|
return FTPSYSERR;
|
||||||
|
|
||||||
|
/* Construct the argument of EPRT (of the form |af|addr|port|). */
|
||||||
|
ip_address_to_eprt_repr (&addr, port, bytes, sizeof (bytes));
|
||||||
|
|
||||||
|
/* Send PORT request. */
|
||||||
|
request = ftp_request ("EPRT", bytes);
|
||||||
|
nwritten = fd_write (csock, request, strlen (request), -1);
|
||||||
|
if (nwritten < 0)
|
||||||
|
{
|
||||||
|
xfree (request);
|
||||||
|
fd_close (*local_sock);
|
||||||
|
return WRITEFAILED;
|
||||||
|
}
|
||||||
|
xfree (request);
|
||||||
|
/* Get appropriate response. */
|
||||||
|
err = ftp_response (csock, &respline);
|
||||||
|
if (err != FTPOK)
|
||||||
|
{
|
||||||
|
fd_close (*local_sock);
|
||||||
|
return err;
|
||||||
|
}
|
||||||
|
if (*respline != '2')
|
||||||
|
{
|
||||||
|
xfree (respline);
|
||||||
|
fd_close (*local_sock);
|
||||||
|
return FTPPORTERR;
|
||||||
|
}
|
||||||
|
xfree (respline);
|
||||||
|
return FTPOK;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifdef HAVE_SSL
|
#ifdef HAVE_SSL
|
||||||
/*
|
/*
|
||||||
* The following three functions defined into this #ifdef block
|
* The following three functions defined into this #ifdef block
|
||||||
@ -542,65 +601,6 @@ bail:
|
|||||||
}
|
}
|
||||||
#endif /* HAVE_SSL */
|
#endif /* HAVE_SSL */
|
||||||
|
|
||||||
/* Bind a port and send the appropriate PORT command to the FTP
|
|
||||||
server. Use acceptport after RETR, to get the socket of data
|
|
||||||
connection. */
|
|
||||||
uerr_t
|
|
||||||
ftp_eprt (int csock, int *local_sock)
|
|
||||||
{
|
|
||||||
uerr_t err;
|
|
||||||
char *request, *respline;
|
|
||||||
ip_address addr;
|
|
||||||
int nwritten;
|
|
||||||
int port;
|
|
||||||
/* Must contain the argument of EPRT (of the form |af|addr|port|).
|
|
||||||
* 4 chars for the | separators, INET6_ADDRSTRLEN chars for addr
|
|
||||||
* 1 char for af (1-2) and 5 chars for port (0-65535) */
|
|
||||||
char bytes[4 + INET6_ADDRSTRLEN + 1 + 5 + 1];
|
|
||||||
|
|
||||||
/* Get the address of this side of the connection. */
|
|
||||||
if (!socket_ip_address (csock, &addr, ENDPOINT_LOCAL))
|
|
||||||
return FTPSYSERR;
|
|
||||||
|
|
||||||
/* Setting port to 0 lets the system choose a free port. */
|
|
||||||
port = 0;
|
|
||||||
|
|
||||||
/* Bind the port. */
|
|
||||||
*local_sock = bind_local (&addr, &port);
|
|
||||||
if (*local_sock < 0)
|
|
||||||
return FTPSYSERR;
|
|
||||||
|
|
||||||
/* Construct the argument of EPRT (of the form |af|addr|port|). */
|
|
||||||
ip_address_to_eprt_repr (&addr, port, bytes, sizeof (bytes));
|
|
||||||
|
|
||||||
/* Send PORT request. */
|
|
||||||
request = ftp_request ("EPRT", bytes);
|
|
||||||
nwritten = fd_write (csock, request, strlen (request), -1);
|
|
||||||
if (nwritten < 0)
|
|
||||||
{
|
|
||||||
xfree (request);
|
|
||||||
fd_close (*local_sock);
|
|
||||||
return WRITEFAILED;
|
|
||||||
}
|
|
||||||
xfree (request);
|
|
||||||
/* Get appropriate response. */
|
|
||||||
err = ftp_response (csock, &respline);
|
|
||||||
if (err != FTPOK)
|
|
||||||
{
|
|
||||||
fd_close (*local_sock);
|
|
||||||
return err;
|
|
||||||
}
|
|
||||||
if (*respline != '2')
|
|
||||||
{
|
|
||||||
xfree (respline);
|
|
||||||
fd_close (*local_sock);
|
|
||||||
return FTPPORTERR;
|
|
||||||
}
|
|
||||||
xfree (respline);
|
|
||||||
return FTPOK;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* Similar to ftp_port, but uses `PASV' to initiate the passive FTP
|
/* Similar to ftp_port, but uses `PASV' to initiate the passive FTP
|
||||||
transfer. Reads the response from server and parses it. Reads the
|
transfer. Reads the response from server and parses it. Reads the
|
||||||
host and port addresses and returns them. */
|
host and port addresses and returns them. */
|
||||||
|
Loading…
Reference in New Issue
Block a user