/* Basic FTP routines.
- Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003,
- 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc.
+ Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
+ 2005, 2006, 2007, 2008, 2009 Free Software Foundation, Inc.
This file is part of GNU Wget.
*--p = '\0';
if (opt.server_response)
- logprintf (LOG_NOTQUIET, "%s\n",
+ logprintf (LOG_NOTQUIET, "%s\n",
quotearg_style (escape_quoting_style, line));
else
DEBUGP (("%s\n", quotearg_style (escape_quoting_style, line)));
if (*p == '\r' || *p == '\n')
*p = ' ';
DEBUGP (("\nDetected newlines in %s \"%s\"; changing to %s \"%s\"\n",
- command, quotearg_style (escape_quoting_style, value),
+ command, quotearg_style (escape_quoting_style, value),
command, quotearg_style (escape_quoting_style, defanged)));
/* Make VALUE point to the defanged copy of the string. */
value = defanged;
}
static void
-ip_address_to_port_repr (const ip_address *addr, int port, char *buf,
+ip_address_to_port_repr (const ip_address *addr, int port, char *buf,
size_t buflen)
{
unsigned char *ptr;
#ifdef ENABLE_IPV6
static void
-ip_address_to_lprt_repr (const ip_address *addr, int port, char *buf,
+ip_address_to_lprt_repr (const ip_address *addr, int port, char *buf,
size_t buflen)
{
unsigned char *ptr = IP_INADDR_DATA (addr);
assert (buflen >= 21 * 4);
/* Construct the argument of LPRT (of the form af,n,h1,h2,...,hn,p1,p2). */
- switch (addr->family)
+ switch (addr->family)
{
- case AF_INET:
- snprintf (buf, buflen, "%d,%d,%d,%d,%d,%d,%d,%d,%d", 4, 4,
+ case AF_INET:
+ snprintf (buf, buflen, "%d,%d,%d,%d,%d,%d,%d,%d,%d", 4, 4,
ptr[0], ptr[1], ptr[2], ptr[3], 2,
(port & 0xff00) >> 8, port & 0xff);
break;
- case AF_INET6:
+ case AF_INET6:
snprintf (buf, buflen,
"%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d",
6, 16,
- ptr[0], ptr[1], ptr[2], ptr[3], ptr[4], ptr[5], ptr[6], ptr[7],
+ ptr[0], ptr[1], ptr[2], ptr[3], ptr[4], ptr[5], ptr[6], ptr[7],
ptr[8], ptr[9], ptr[10], ptr[11], ptr[12], ptr[13], ptr[14], ptr[15],
2, (port & 0xff00) >> 8, port & 0xff);
break;
}
static void
-ip_address_to_eprt_repr (const ip_address *addr, int port, char *buf,
+ip_address_to_eprt_repr (const ip_address *addr, int port, char *buf,
size_t buflen)
{
int afnum;
- /* buf must contain the argument of EPRT (of the form |af|addr|port|).
- * 4 chars for the | separators, INET6_ADDRSTRLEN chars for addr
+ /* buf 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) */
- assert (buflen >= 4 + INET6_ADDRSTRLEN + 1 + 5);
+ assert (buflen >= 4 + INET6_ADDRSTRLEN + 1 + 5);
/* Construct the argument of EPRT (of the form |af|addr|port|). */
afnum = (addr->family == AF_INET ? 1 : 2);
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
+ /* 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];
{
xfree (respline);
return FTPNOPASV;
- }
+ }
/* Parse the response. */
s = respline;
{
xfree (respline);
return FTPNOPASV;
- }
+ }
assert (respline != NULL);
{
xfree (respline);
return FTPINVPASV;
- }
+ }
/* Skip the first two void fields */
s = start + 1;
{
xfree (respline);
return FTPINVPASV;
- }
+ }
for (i = 0; i < 2; i++)
{
- if (*s++ != delim)
+ if (*s++ != delim)
{
xfree (respline);
return FTPINVPASV;
- }
+ }
}
/* Finally, get the port number */
- tport = 0;
- for (i = 1; c_isdigit (*s); s++)
+ tport = 0;
+ for (i = 1; c_isdigit (*s); s++)
{
if (i > 5)
{
xfree (respline);
return FTPINVPASV;
- }
+ }
tport = (*s - '0') + 10 * tport;
}
{
xfree (respline);
return FTPINVPASV;
- }
+ }
if (*s++ != ')')
{
xfree (respline);
return FTPINVPASV;
- }
+ }
*port = tport;
return FTPOK;
}
-/* Sends DELE command to the FTP server. */
-uerr_t
-ftp_dele (int csock, const char *file)
-{
- char *request, *respline;
- int nwritten;
- uerr_t err;
-
- /* Send DELE request. */
- request = ftp_request ("DELE", file);
- nwritten = fd_write (csock, request, strlen (request), -1.0);
- if (nwritten < 0)
- {
- xfree (request);
- return WRITEFAILED;
- }
- xfree (request);
- /* Get appropriate response. */
- err = ftp_response (csock, &respline);
- if (err != FTPOK)
- return err; /* Return with early bad status. */
-
- /* All OK, so far. */
- if (*respline == '5')
- {
- err = FTPNSFOD; /* Permanent Negative Completion. */
- }
- else if (*respline != '2') /* Success might be 226 or 250 (or ???). */
- {
- err = FTPRERR; /* Not Positive Completion. */
- }
-
- xfree (respline); /* Free "respline" storage. */
- return err; /* Return response-based status code. */
-}
-
/* Sends REST command to the FTP server. */
uerr_t
ftp_rest (int csock, wgint offset)
bool ok = false;
size_t i = 0;
/* Try `LIST -a' first and revert to `LIST' in case of failure. */
- const char *list_commands[] = { "LIST -a",
+ const char *list_commands[] = { "LIST -a",
"LIST" };
/* 2008-01-29 SMS. For a VMS FTP server, where "LIST -a" may not
err = FTPOK;
ok = true;
}
- else
+ else
{
err = FTPRERR;
}
}
++i;
} while (i < countof (list_commands) && !ok);
-
+
return err;
}
}
if (*respline == '5')
{
- /*
+ /*
* Probably means SIZE isn't supported on this server.
- * Error is nonfatal since SIZE isn't in RFC 959
+ * Error is nonfatal since SIZE isn't in RFC 959
*/
xfree (respline);
*size = 0;
*size = str_to_wgint (respline + 4, NULL, 10);
if (errno)
{
- /*
+ /*
* Couldn't parse the response for some reason. On the (few)
* tests I've done, the response is 213 <SIZE> with nothing else -
* maybe something a bit more resilient is necessary. It's not a