mirror of
https://github.com/moparisthebest/wget
synced 2024-07-03 16:38:41 -04:00
[svn] Added user-contributed patches.
This commit is contained in:
parent
18959ba4ab
commit
2b2fd2924a
@ -1,3 +1,14 @@
|
||||
1999-09-17 Dan Berger <dberger@ix.netcom.com>
|
||||
|
||||
* http.c (gethttp): Send it.
|
||||
|
||||
* url.c (parseurl): Detect query string in HTTP URL-s.
|
||||
(str_url): Print it.
|
||||
|
||||
2000-03-02 HIROSE Masaaki <hirose31@t3.rim.or.jp>
|
||||
|
||||
* html.c (html_allow): Add <link href=...> and <script src=...>.
|
||||
|
||||
1999-05-02 andrew deryabin <djsf@softhome.net>
|
||||
|
||||
* http.c (gethttp): Specify port in `Host' header only if it's
|
||||
|
@ -77,6 +77,8 @@ htmlfindurl (const char *buf, int bufsize, int *size, int init)
|
||||
follow -- feel free to edit to suit your needs: */
|
||||
static struct tag_attr html_allow[] = {
|
||||
{ "a", "href" },
|
||||
{ "link", "href" },
|
||||
{ "script", "src" },
|
||||
{ "img", "src" },
|
||||
{ "img", "href" },
|
||||
{ "body", "background" },
|
||||
|
10
src/http.c
10
src/http.c
@ -303,7 +303,7 @@ static time_t http_atotm PARAMS ((char *));
|
||||
static uerr_t
|
||||
gethttp (struct urlinfo *u, struct http_stat *hs, int *dt)
|
||||
{
|
||||
char *request, *type, *command, *path;
|
||||
char *request, *type, *command, *path, *qstring;
|
||||
char *user, *passwd;
|
||||
char *pragma_h, *referer, *useragent, *range, *wwwauth, *remhost;
|
||||
char *authenticate_h;
|
||||
@ -384,6 +384,9 @@ gethttp (struct urlinfo *u, struct http_stat *hs, int *dt)
|
||||
path = u->proxy->url;
|
||||
else
|
||||
path = u->path;
|
||||
|
||||
qstring = u->qstring;
|
||||
|
||||
command = (*dt & HEAD_ONLY) ? "HEAD" : "GET";
|
||||
referer = NULL;
|
||||
if (ou->referer)
|
||||
@ -467,6 +470,7 @@ gethttp (struct urlinfo *u, struct http_stat *hs, int *dt)
|
||||
|
||||
/* Allocate the memory for the request. */
|
||||
request = (char *)alloca (strlen (command) + strlen (path)
|
||||
+ (qstring ? strlen (qstring) : 0)
|
||||
+ strlen (useragent)
|
||||
+ strlen (remhost) + host_port_len
|
||||
+ strlen (HTTP_ACCEPT)
|
||||
@ -479,12 +483,12 @@ gethttp (struct urlinfo *u, struct http_stat *hs, int *dt)
|
||||
+ 64);
|
||||
/* Construct the request. */
|
||||
sprintf (request, "\
|
||||
%s %s HTTP/1.0\r\n\
|
||||
%s %s%s HTTP/1.0\r\n\
|
||||
User-Agent: %s\r\n\
|
||||
Host: %s%s\r\n\
|
||||
Accept: %s\r\n\
|
||||
%s%s%s%s%s%s\r\n",
|
||||
command, path, useragent, remhost, host_port ? host_port : "",
|
||||
command, path, qstring, useragent, remhost, host_port ? host_port : "",
|
||||
HTTP_ACCEPT, referer ? referer : "",
|
||||
wwwauth ? wwwauth : "",
|
||||
proxyauth ? proxyauth : "",
|
||||
|
31
src/netrc.c
31
src/netrc.c
@ -226,6 +226,16 @@ maybe_add_to_list (acc_t **newentry, acc_t **list)
|
||||
return;
|
||||
}
|
||||
|
||||
/* Helper function for the parser, shifts contents of
|
||||
null-terminated string once character to the left.
|
||||
Used in processing \ and " constructs in the netrc file */
|
||||
static void
|
||||
shift_left(char *string){
|
||||
char *p;
|
||||
|
||||
for (p=string; *p; ++p)
|
||||
*p = *(p+1);
|
||||
}
|
||||
|
||||
/* Parse a .netrc file (as described in the ftp(1) manual page). */
|
||||
static acc_t *
|
||||
@ -234,7 +244,7 @@ parse_netrc (const char *path)
|
||||
FILE *fp;
|
||||
char *line, *p, *tok, *premature_token;
|
||||
acc_t *current, *retval;
|
||||
int ln;
|
||||
int ln, quote;
|
||||
|
||||
/* The latest token we've seen in the file. */
|
||||
enum
|
||||
@ -263,6 +273,7 @@ parse_netrc (const char *path)
|
||||
|
||||
/* Parse the line. */
|
||||
p = line;
|
||||
quote = 0;
|
||||
|
||||
/* If the line is empty, then end any macro definition. */
|
||||
if (last_token == tok_macdef && !*p)
|
||||
@ -280,11 +291,25 @@ parse_netrc (const char *path)
|
||||
if (*p == '#')
|
||||
break;
|
||||
|
||||
/* If the token starts with quotation mark, note this fact,
|
||||
and squash the quotation character */
|
||||
if (*p == '"'){
|
||||
quote = 1;
|
||||
shift_left (p);
|
||||
}
|
||||
|
||||
tok = p;
|
||||
|
||||
/* Find the end of the token. */
|
||||
while (*p && !ISSPACE (*p))
|
||||
/* Find the end of the token, handling quotes and escapes. */
|
||||
while (*p && (quote ? *p != '"' : !ISSPACE (*p))){
|
||||
if (*p == '\\')
|
||||
shift_left (p);
|
||||
p ++;
|
||||
}
|
||||
|
||||
/* if field was quoted, squash the trailing quotation mark */
|
||||
if (quote)
|
||||
shift_left(p);
|
||||
|
||||
/* Null-terminate the token, if it isn't already. */
|
||||
if (*p)
|
||||
|
32
src/url.c
32
src/url.c
@ -458,8 +458,23 @@ parseurl (const char *url, struct urlinfo *u, int strict)
|
||||
if (type == URLHTTP)
|
||||
while (url[i] && url[i] == '/')
|
||||
++i;
|
||||
u->path = (char *)xmalloc (strlen (url + i) + 8);
|
||||
strcpy (u->path, url + i);
|
||||
|
||||
/* dfb: break "path" into "path" and "qstring" if the URL is HTTP
|
||||
if it's not an HTTP url, set l to the last character, so the
|
||||
xmalloc and strncpy work as desired */
|
||||
if (type == URLHTTP) {
|
||||
for (l = i; url[l] && url[l] != '?'; l++);
|
||||
if (l != strlen(url)) {
|
||||
/* copy the query string, including the '?' into u->qstring */
|
||||
u->qstring = (char *)xmalloc (strlen (url + l) + 8);
|
||||
strcpy (u->qstring, url + l);
|
||||
}
|
||||
} else {
|
||||
l = strlen(url);
|
||||
}
|
||||
|
||||
|
||||
u->path = strdupdelim (url + i, url + l);
|
||||
if (type == URLFTP)
|
||||
{
|
||||
u->ftp_type = process_ftp_type (u->path);
|
||||
@ -480,6 +495,8 @@ parseurl (const char *url, struct urlinfo *u, int strict)
|
||||
/* Parse the directory. */
|
||||
parse_dir (u->path, &u->dir, &u->file);
|
||||
DEBUGP (("dir %s -> file %s -> ", u->dir, u->file));
|
||||
if (type == URLHTTP && u->qstring)
|
||||
DEBUGP (("query-string %s -> ", u->qstring));
|
||||
/* Simplify the directory. */
|
||||
path_simplify (u->dir);
|
||||
/* Remove the leading `/' in HTTP. */
|
||||
@ -626,7 +643,7 @@ char *
|
||||
str_url (const struct urlinfo *u, int hide)
|
||||
{
|
||||
char *res, *host, *user, *passwd, *proto_name, *dir, *file;
|
||||
int i, l, ln, lu, lh, lp, lf, ld;
|
||||
int i, l, ln, lu, lh, lp, lf, ld, lq;
|
||||
|
||||
/* Look for the protocol name. */
|
||||
for (i = 0; i < ARRAY_SIZE (sup_protos); i++)
|
||||
@ -667,7 +684,8 @@ str_url (const struct urlinfo *u, int hide)
|
||||
lh = strlen (host);
|
||||
ld = strlen (dir);
|
||||
lf = strlen (file);
|
||||
res = (char *)xmalloc (ln + lu + lp + lh + ld + lf + 20); /* safe sex */
|
||||
lq = (u->proto == URLHTTP && u->qstring) ? strlen (u->qstring) : 0;
|
||||
res = (char *)xmalloc (ln + lu + lp + lh + ld + lf + lq + 20); /* safe sex */
|
||||
/* sprintf (res, "%s%s%s%s%s%s:%d/%s%s%s", proto_name,
|
||||
(user ? user : ""), (passwd ? ":" : ""),
|
||||
(passwd ? passwd : ""), (user ? "@" : ""),
|
||||
@ -698,9 +716,15 @@ str_url (const struct urlinfo *u, int hide)
|
||||
if (*dir)
|
||||
res[l++] = '/';
|
||||
strcpy (res + l, file);
|
||||
l += lf;
|
||||
free (host);
|
||||
free (dir);
|
||||
free (file);
|
||||
if (u->qstring)
|
||||
{
|
||||
/* copy in the raw query string to avoid munging arguments */
|
||||
memcpy (res + l, u->qstring, lq);
|
||||
}
|
||||
FREE_MAYBE (user);
|
||||
FREE_MAYBE (passwd);
|
||||
return res;
|
||||
|
@ -32,7 +32,8 @@ struct urlinfo
|
||||
char *host; /* Extracted hostname */
|
||||
unsigned short port;
|
||||
char ftp_type;
|
||||
char *path, *dir, *file; /* Path, as well as dir and file
|
||||
char *path, *dir, *file, *qstring;
|
||||
/* Path, dir, file, and query string
|
||||
(properly decoded) */
|
||||
char *user, *passwd; /* Username and password */
|
||||
struct urlinfo *proxy; /* The exact string to pass to proxy
|
||||
|
Loading…
Reference in New Issue
Block a user