mirror of
https://github.com/moparisthebest/wget
synced 2024-07-03 16:38:41 -04:00
[svn] New function schemes_are_similar_p to test enumerated scheme codes for
similarity (SCHEME_HTTP and SCHEME_HTTPS are similar). Use it in recur.c (download_child_p). Fixes a bug that caused -H option to be ignored when child scheme different to parent scheme. Published in <agn4eu8apduek7magfu9bfe63gto8i7cdh@farscape.privy.mev.co.uk>.
This commit is contained in:
parent
043d305fb1
commit
e863a6323b
@ -1,3 +1,15 @@
|
|||||||
|
2002-05-16 Ian Abbott <abbotti@mev.co.uk>
|
||||||
|
|
||||||
|
* url.c (schemes_are_similar_p): New function to test enumerated
|
||||||
|
scheme codes for similarity.
|
||||||
|
|
||||||
|
* url.h: Declare it.
|
||||||
|
|
||||||
|
* recur.c (download_child_p): Use it to compare schemes. This
|
||||||
|
also fixes a bug that allows hosts to be spanned (without the
|
||||||
|
-H option) when the parent scheme is https and the child's is
|
||||||
|
http or vice versa.
|
||||||
|
|
||||||
2002-05-14 Bill Richardson <bill@riverstonenet.com>
|
2002-05-14 Bill Richardson <bill@riverstonenet.com>
|
||||||
|
|
||||||
* ftp.c (getftp): Don't ftruncate stdout.
|
* ftp.c (getftp): Don't ftruncate stdout.
|
||||||
|
28
src/recur.c
28
src/recur.c
@ -415,6 +415,7 @@ download_child_p (const struct urlpos *upos, struct url *parent, int depth,
|
|||||||
{
|
{
|
||||||
struct url *u = upos->url;
|
struct url *u = upos->url;
|
||||||
const char *url = u->url;
|
const char *url = u->url;
|
||||||
|
int u_scheme_like_http;
|
||||||
|
|
||||||
DEBUGP (("Deciding whether to enqueue \"%s\".\n", url));
|
DEBUGP (("Deciding whether to enqueue \"%s\".\n", url));
|
||||||
|
|
||||||
@ -445,12 +446,11 @@ download_child_p (const struct urlpos *upos, struct url *parent, int depth,
|
|||||||
More time- and memory- consuming tests should be put later on
|
More time- and memory- consuming tests should be put later on
|
||||||
the list. */
|
the list. */
|
||||||
|
|
||||||
|
/* Determine whether URL under consideration has a HTTP-like scheme. */
|
||||||
|
u_scheme_like_http = schemes_are_similar_p (u->scheme, SCHEME_HTTP);
|
||||||
|
|
||||||
/* 1. Schemes other than HTTP are normally not recursed into. */
|
/* 1. Schemes other than HTTP are normally not recursed into. */
|
||||||
if (u->scheme != SCHEME_HTTP
|
if (!u_scheme_like_http && !(u->scheme == SCHEME_FTP && opt.follow_ftp))
|
||||||
#ifdef HAVE_SSL
|
|
||||||
&& u->scheme != SCHEME_HTTPS
|
|
||||||
#endif
|
|
||||||
&& !(u->scheme == SCHEME_FTP && opt.follow_ftp))
|
|
||||||
{
|
{
|
||||||
DEBUGP (("Not following non-HTTP schemes.\n"));
|
DEBUGP (("Not following non-HTTP schemes.\n"));
|
||||||
goto out;
|
goto out;
|
||||||
@ -458,11 +458,7 @@ download_child_p (const struct urlpos *upos, struct url *parent, int depth,
|
|||||||
|
|
||||||
/* 2. If it is an absolute link and they are not followed, throw it
|
/* 2. If it is an absolute link and they are not followed, throw it
|
||||||
out. */
|
out. */
|
||||||
if (u->scheme == SCHEME_HTTP
|
if (schemes_are_similar_p (u->scheme, SCHEME_HTTP))
|
||||||
#ifdef HAVE_SSL
|
|
||||||
|| u->scheme == SCHEME_HTTPS
|
|
||||||
#endif
|
|
||||||
)
|
|
||||||
if (opt.relative_only && !upos->link_relative_p)
|
if (opt.relative_only && !upos->link_relative_p)
|
||||||
{
|
{
|
||||||
DEBUGP (("It doesn't really look like a relative link.\n"));
|
DEBUGP (("It doesn't really look like a relative link.\n"));
|
||||||
@ -483,7 +479,7 @@ download_child_p (const struct urlpos *upos, struct url *parent, int depth,
|
|||||||
opt.no_parent. Also ignore it for documents needed to display
|
opt.no_parent. Also ignore it for documents needed to display
|
||||||
the parent page when in -p mode. */
|
the parent page when in -p mode. */
|
||||||
if (opt.no_parent
|
if (opt.no_parent
|
||||||
&& u->scheme == start_url_parsed->scheme
|
&& schemes_are_similar_p (u->scheme, start_url_parsed->scheme)
|
||||||
&& 0 == strcasecmp (u->host, start_url_parsed->host)
|
&& 0 == strcasecmp (u->host, start_url_parsed->host)
|
||||||
&& u->port == start_url_parsed->port
|
&& u->port == start_url_parsed->port
|
||||||
&& !(opt.page_requisites && upos->link_inline_p))
|
&& !(opt.page_requisites && upos->link_inline_p))
|
||||||
@ -526,7 +522,7 @@ download_child_p (const struct urlpos *upos, struct url *parent, int depth,
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* 7. */
|
/* 7. */
|
||||||
if (u->scheme == parent->scheme)
|
if (schemes_are_similar_p (u->scheme, parent->scheme))
|
||||||
if (!opt.spanhost && 0 != strcasecmp (parent->host, u->host))
|
if (!opt.spanhost && 0 != strcasecmp (parent->host, u->host))
|
||||||
{
|
{
|
||||||
DEBUGP (("This is not the same hostname as the parent's (%s and %s).\n",
|
DEBUGP (("This is not the same hostname as the parent's (%s and %s).\n",
|
||||||
@ -535,13 +531,7 @@ download_child_p (const struct urlpos *upos, struct url *parent, int depth,
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* 8. */
|
/* 8. */
|
||||||
if (opt.use_robots
|
if (opt.use_robots && u_scheme_like_http)
|
||||||
&& (u->scheme == SCHEME_HTTP
|
|
||||||
#ifdef HAVE_SSL
|
|
||||||
|| u->scheme == SCHEME_HTTPS
|
|
||||||
#endif
|
|
||||||
)
|
|
||||||
)
|
|
||||||
{
|
{
|
||||||
struct robot_specs *specs = res_get_specs (u->host, u->port);
|
struct robot_specs *specs = res_get_specs (u->host, u->port);
|
||||||
if (!specs)
|
if (!specs)
|
||||||
|
18
src/url.c
18
src/url.c
@ -2472,6 +2472,24 @@ downloaded_files_free (void)
|
|||||||
downloaded_files_hash = NULL;
|
downloaded_files_hash = NULL;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Return non-zero if scheme a is similar to scheme b.
|
||||||
|
|
||||||
|
Schemes are similar if they are equal. If SSL is supported, schemes
|
||||||
|
are also similar if one is http (SCHEME_HTTP) and the other is https
|
||||||
|
(SCHEME_HTTPS). */
|
||||||
|
int
|
||||||
|
schemes_are_similar_p (enum url_scheme a, enum url_scheme b)
|
||||||
|
{
|
||||||
|
if (a == b)
|
||||||
|
return 1;
|
||||||
|
#ifdef HAVE_SSL
|
||||||
|
if ((a == SCHEME_HTTP && b == SCHEME_HTTPS)
|
||||||
|
|| (a == SCHEME_HTTPS && b == SCHEME_HTTP))
|
||||||
|
return 1;
|
||||||
|
#endif
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
#if 0
|
#if 0
|
||||||
/* Debugging and testing support for path_simplify. */
|
/* Debugging and testing support for path_simplify. */
|
||||||
|
@ -158,4 +158,6 @@ downloaded_file_t downloaded_file PARAMS ((downloaded_file_t, const char *));
|
|||||||
|
|
||||||
char *rewrite_shorthand_url PARAMS ((const char *));
|
char *rewrite_shorthand_url PARAMS ((const char *));
|
||||||
|
|
||||||
|
int schemes_are_similar_p PARAMS ((enum url_scheme a, enum url_scheme b));
|
||||||
|
|
||||||
#endif /* URL_H */
|
#endif /* URL_H */
|
||||||
|
Loading…
Reference in New Issue
Block a user