improvements after feedback from upstream maintainer
This commit is contained in:
parent
3e2774175c
commit
83704f96f3
@ -1,62 +1,52 @@
|
|||||||
--- lftp-3.3.5/doc/lftp.1.bz173276 2005-12-02 02:23:31.000000000 -0500
|
|
||||||
+++ lftp-3.3.5/doc/lftp.1 2005-12-16 20:07:19.000000000 -0500
|
|
||||||
@@ -919,6 +919,27 @@
|
|
||||||
.BR dns:use-fork \ (boolean)
|
|
||||||
if true, lftp will fork before resolving host address. Default is true.
|
|
||||||
.TP
|
|
||||||
+.BR dns:use-first-address \ (boolean)
|
|
||||||
+If true (the default), lftp will use the first address returned by a host name lookup;
|
|
||||||
+if false, lftp will continue trying to find addresses of each address family
|
|
||||||
+in dns:order until an address of each family is found, is authoritatively
|
|
||||||
+known not to exist (as opposed to servers not being contactable), or the
|
|
||||||
+dns:fatal-timeout (if any) expires.
|
|
||||||
+Setting this to true will make lftp use the first available address for a name.
|
|
||||||
+.TP
|
|
||||||
+.BR dns:try-again \ (boolean)
|
|
||||||
+If true (the default), lftp will continue to try to lookup a dns name while
|
|
||||||
+no servers are contactable, until the dns-fatal-timeout expires or an address
|
|
||||||
+is found (of each family in dns:order if dns:use-first-address is false).
|
|
||||||
+If false, lftp will not retry dns name lookups .
|
|
||||||
+.TP
|
|
||||||
+.BR dns:n-attempts \ (number)
|
|
||||||
+If zero, (the default), there is no limit on the number of times lftp will try
|
|
||||||
+to lookup an address if dns:try-again is true.
|
|
||||||
+If > 0, lftp will try only this number of times to look up an address of each
|
|
||||||
+address family in dns:order .
|
|
||||||
+If dns:try-again is not true, this variable has no effect.
|
|
||||||
+.TP
|
|
||||||
.BR file:charset \ (string)
|
|
||||||
local character set. It is set from current locale initially.
|
|
||||||
.TP
|
|
||||||
--- lftp-3.3.5/src/resource.cc.bz173276 2005-11-08 02:21:19.000000000 -0500
|
--- lftp-3.3.5/src/resource.cc.bz173276 2005-11-08 02:21:19.000000000 -0500
|
||||||
+++ lftp-3.3.5/src/resource.cc 2005-12-16 20:02:48.000000000 -0500
|
+++ lftp-3.3.5/src/resource.cc 2005-12-21 13:44:59.000000000 -0500
|
||||||
@@ -341,7 +341,10 @@
|
@@ -338,10 +338,12 @@
|
||||||
res_timeout ("dns:fatal-timeout","0", ResMgr::UNumberValidate,0),
|
res_cache_enable("dns:cache-enable", "yes", ResMgr::BoolValidate,0),
|
||||||
|
res_cache_expire("dns:cache-expire", "1h", ResMgr::TimeIntervalValidate,0),
|
||||||
|
res_cache_size ("dns:cache-size", "256", ResMgr::UNumberValidate,ResMgr::NoClosure),
|
||||||
|
- res_timeout ("dns:fatal-timeout","0", ResMgr::UNumberValidate,0),
|
||||||
|
+ res_timeout ("dns:fatal-timeout","0", ResMgr::TimeIntervalValidate,0),
|
||||||
res_order ("dns:order", DEFAULT_ORDER, OrderValidate,0),
|
res_order ("dns:order", DEFAULT_ORDER, OrderValidate,0),
|
||||||
res_query_srv ("dns:SRV-query", "no", ResMgr::BoolValidate,0),
|
res_query_srv ("dns:SRV-query", "no", ResMgr::BoolValidate,0),
|
||||||
- res_use_fork ("dns:use-fork", "yes", ResMgr::BoolValidate,ResMgr::NoClosure);
|
- res_use_fork ("dns:use-fork", "yes", ResMgr::BoolValidate,ResMgr::NoClosure);
|
||||||
+ res_use_fork ("dns:use-fork", "yes", ResMgr::BoolValidate,ResMgr::NoClosure),
|
+ res_use_fork ("dns:use-fork", "yes", ResMgr::BoolValidate,ResMgr::NoClosure),
|
||||||
+ res_use_first ("dns:use-first-address", "yes", ResMgr::BoolValidate,ResMgr::NoClosure),
|
+ res_use_first ("dns:use-first-address", "yes", ResMgr::BoolValidate,ResMgr::NoClosure),
|
||||||
+ res_try_again ("dns:try-again", "yes", ResMgr::BoolValidate,ResMgr::NoClosure),
|
+ res_n_attempts ("dns:max-retries", "1000", ResMgr::UNumberValidate,0);
|
||||||
+ res_n_attempts ("dns:n-attempts", "0", ResMgr::UNumberValidate,ResMgr::NoClosure);
|
|
||||||
|
|
||||||
static ResDecl
|
static ResDecl
|
||||||
fish_shell ("fish:shell", "/bin/sh", 0,0),
|
fish_shell ("fish:shell", "/bin/sh", 0,0),
|
||||||
--- lftp-3.3.5/src/Resolver.cc.bz173276 2005-11-08 01:17:11.000000000 -0500
|
--- lftp-3.3.5/src/Resolver.cc.bz173276 2005-11-08 01:17:11.000000000 -0500
|
||||||
+++ lftp-3.3.5/src/Resolver.cc 2005-12-16 20:20:09.000000000 -0500
|
+++ lftp-3.3.5/src/Resolver.cc 2005-12-21 13:54:41.000000000 -0500
|
||||||
@@ -682,6 +682,11 @@
|
@@ -505,6 +505,8 @@
|
||||||
|
time_t try_time;
|
||||||
|
unsigned char answer[0x1000];
|
||||||
|
char *srv_name=string_alloca(strlen(service)+1+strlen(tproto)+1+strlen(hostname)+1);
|
||||||
|
+ int retries=0;
|
||||||
|
+ int max_retries=ResMgr::Query("dns:max-retries",hostname);
|
||||||
|
sprintf(srv_name,"_%s._%s.%s",service,tproto,hostname);
|
||||||
|
|
||||||
|
int len;
|
||||||
|
@@ -523,6 +525,8 @@
|
||||||
|
#ifdef HAVE_H_ERRNO
|
||||||
|
if(h_errno!=TRY_AGAIN)
|
||||||
|
return;
|
||||||
|
+ if(++retries>=max_retries && max_retries)
|
||||||
|
+ return;
|
||||||
|
time_t t=time(0);
|
||||||
|
if(t-try_time<5)
|
||||||
|
sleep(5-(t-try_time));
|
||||||
|
@@ -682,6 +686,10 @@
|
||||||
time_t try_time;
|
time_t try_time;
|
||||||
int af_index=0;
|
int af_index=0;
|
||||||
int af_order[16];
|
int af_order[16];
|
||||||
+ int af_tries[16];
|
+ int af_tries[16];
|
||||||
+ int af_try=0, af_tried=-1, try_afs_again=0;
|
+ int af_try=0, af_tried=0;
|
||||||
+ int dns_use_first =ResMgr::QueryBool("dns:use-first-address",0),
|
+ int dns_use_first =ResMgr::QueryBool("dns:use-first-address",name),
|
||||||
+ dns_n_attempts=ResMgr::Query("dns:n-attempts",0),
|
+ dns_n_attempts=ResMgr::Query("dns:max-retries",name);
|
||||||
+ dns_try_again =ResMgr::QueryBool("dns:try-again",0);
|
|
||||||
|
|
||||||
const char *order=ResMgr::Query("dns:order",name);
|
const char *order=ResMgr::Query("dns:order",name);
|
||||||
|
|
||||||
@@ -698,6 +703,8 @@
|
@@ -698,6 +706,8 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
ParseOrder(order,af_order);
|
ParseOrder(order,af_order);
|
||||||
@ -65,7 +55,7 @@
|
|||||||
|
|
||||||
for(;;)
|
for(;;)
|
||||||
{
|
{
|
||||||
@@ -778,8 +785,32 @@
|
@@ -778,8 +788,24 @@
|
||||||
#else // !HAVE_GETADDRINFO
|
#else // !HAVE_GETADDRINFO
|
||||||
|
|
||||||
int af=af_order[af_index];
|
int af=af_order[af_index];
|
||||||
@ -73,33 +63,25 @@
|
|||||||
if(af==-1)
|
if(af==-1)
|
||||||
- break;
|
- break;
|
||||||
+ {
|
+ {
|
||||||
+ if( (timeout == 0)
|
+ if((timeout == 0) && (af_tried == 0))
|
||||||
+ && (dns_try_again == 0)
|
|
||||||
+ && ((dns_n_attempts == 0) || (af_tried == 0))
|
|
||||||
+ )
|
|
||||||
+ break;
|
+ break;
|
||||||
+ else
|
+ else
|
||||||
+ { /* tried all afs at least once */
|
+ {
|
||||||
+ if( ( dns_try_again == 0 ) || (try_afs_again == 0))
|
|
||||||
+ break;
|
|
||||||
+
|
|
||||||
+ af_index = 0;
|
+ af_index = 0;
|
||||||
+ af = af_order[af_index];
|
|
||||||
+ af_tried = 0;
|
+ af_tried = 0;
|
||||||
+ try_afs_again = 0;
|
+ af = af_order[af_index];
|
||||||
+ }
|
+ }
|
||||||
+ }
|
+ }
|
||||||
+
|
+
|
||||||
+ if ( af_tries [ af_index ] != -1 )
|
+ if ( af_tries [ af_index ] != -1 )
|
||||||
+ {
|
+ {
|
||||||
+ af_tries[ af_index ]++;
|
|
||||||
+
|
|
||||||
+ if( (dns_n_attempts > 0) && ( af_tries [ af_index ] > dns_n_attempts) )
|
+ if( (dns_n_attempts > 0) && ( af_tries [ af_index ] > dns_n_attempts) )
|
||||||
+ break;
|
+ break;
|
||||||
|
+ ++af_tries[ af_index ];
|
||||||
|
|
||||||
struct hostent *ha;
|
struct hostent *ha;
|
||||||
# if defined(HAVE_GETIPNODEBYNAME)
|
# if defined(HAVE_GETIPNODEBYNAME)
|
||||||
@@ -801,12 +832,19 @@
|
@@ -801,12 +827,19 @@
|
||||||
}
|
}
|
||||||
# endif
|
# endif
|
||||||
|
|
||||||
@ -115,14 +97,14 @@
|
|||||||
+ {
|
+ {
|
||||||
+ AddAddress(ha->h_addrtype, *a, ha->h_length);
|
+ AddAddress(ha->h_addrtype, *a, ha->h_length);
|
||||||
+ af_tries[ af_index ] = -1;
|
+ af_tries[ af_index ] = -1;
|
||||||
+ if ( dns_use_first )
|
|
||||||
+ return;
|
|
||||||
+ }
|
+ }
|
||||||
|
+ if( (af_tries[ af_index ] == -1) && dns_use_first )
|
||||||
|
+ return;
|
||||||
+ af_index++;
|
+ af_index++;
|
||||||
# if defined(HAVE_GETIPNODEBYNAME)
|
# if defined(HAVE_GETIPNODEBYNAME)
|
||||||
freehostent(ha);
|
freehostent(ha);
|
||||||
# endif
|
# endif
|
||||||
@@ -825,14 +863,33 @@
|
@@ -825,14 +858,30 @@
|
||||||
error=_("Host name lookup failure");
|
error=_("Host name lookup failure");
|
||||||
# endif
|
# endif
|
||||||
}
|
}
|
||||||
@ -131,9 +113,6 @@
|
|||||||
+ af_tries[ af_index ] = -1;
|
+ af_tries[ af_index ] = -1;
|
||||||
}
|
}
|
||||||
+ } /* af_tries[ af_index ] != -1 */
|
+ } /* af_tries[ af_index ] != -1 */
|
||||||
+
|
|
||||||
+ if( af_tries[ af_index ] != -1 )
|
|
||||||
+ try_afs_again = 1;
|
|
||||||
+
|
+
|
||||||
#endif /* HAVE_GETADDRINFO */
|
#endif /* HAVE_GETADDRINFO */
|
||||||
|
|
||||||
@ -161,3 +140,35 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -896,7 +945,7 @@
|
||||||
|
|
||||||
|
void Resolver::Reconfig(const char *name)
|
||||||
|
{
|
||||||
|
- timeout = ResMgr::Query("dns:fatal-timeout",hostname);
|
||||||
|
+ timeout = TimeInterval(ResMgr::Query("dns:fatal-timeout",hostname));
|
||||||
|
if(!name || strncmp(name,"dns:",4))
|
||||||
|
return;
|
||||||
|
if(cache)
|
||||||
|
--- lftp-3.3.5/doc/lftp.1.bz173276 2005-12-02 02:23:31.000000000 -0500
|
||||||
|
+++ lftp-3.3.5/doc/lftp.1 2005-12-21 13:20:24.000000000 -0500
|
||||||
|
@@ -919,6 +919,20 @@
|
||||||
|
.BR dns:use-fork \ (boolean)
|
||||||
|
if true, lftp will fork before resolving host address. Default is true.
|
||||||
|
.TP
|
||||||
|
+.BR dns:use-first-address \ (boolean)
|
||||||
|
+If true (the default), lftp will use the first address returned by a host name lookup;
|
||||||
|
+if false, lftp will continue trying to find addresses of each address family
|
||||||
|
+in dns:order until an address of each family is found, is authoritatively
|
||||||
|
+known not to exist (as opposed to servers not being contactable), or the
|
||||||
|
+dns:fatal-timeout (if any) expires.
|
||||||
|
+Setting this to true will make lftp use the first available address for a name.
|
||||||
|
+.TP
|
||||||
|
+.BR dns:max-retries \ (number)
|
||||||
|
+If zero, (the default), there is no limit on the number of times lftp will try
|
||||||
|
+to lookup an address .
|
||||||
|
+If > 0, lftp will try only this number of times to look up an address of each
|
||||||
|
+address family in dns:order .
|
||||||
|
+.TP
|
||||||
|
.BR file:charset \ (string)
|
||||||
|
local character set. It is set from current locale initially.
|
||||||
|
.TP
|
||||||
|
Loading…
Reference in New Issue
Block a user