summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorshin <shin@FreeBSD.org>2000-02-15 15:11:40 +0000
committershin <shin@FreeBSD.org>2000-02-15 15:11:40 +0000
commitc83f0a97bdc03cca93e16e1bc2758c713aef5fdf (patch)
tree04189aeeb90e88a6a240f49392fa61d89316107a
parent6768336e3b66310544efe8dbe769fdda673c93f8 (diff)
downloadFreeBSD-src-c83f0a97bdc03cca93e16e1bc2758c713aef5fdf.zip
FreeBSD-src-c83f0a97bdc03cca93e16e1bc2758c713aef5fdf.tar.gz
Add -4 and -6 options.
Current getaddrinfo() implemetation has a problem of too much resolving waiting time on INET6 enabled systems. -4 and -6 options can limit name resolving address family and is a possible workaround for the problem. Approved by: jkh
-rw-r--r--usr.bin/ftp/extern.h1
-rw-r--r--usr.bin/ftp/fetch.c2
-rw-r--r--usr.bin/ftp/ftp.c2
-rw-r--r--usr.bin/ftp/main.c16
-rw-r--r--usr.bin/rlogin/rlogin.c19
-rw-r--r--usr.bin/rsh/rsh.c22
6 files changed, 46 insertions, 16 deletions
diff --git a/usr.bin/ftp/extern.h b/usr.bin/ftp/extern.h
index 7841f7b..278be80 100644
--- a/usr.bin/ftp/extern.h
+++ b/usr.bin/ftp/extern.h
@@ -165,6 +165,7 @@ extern struct cmd cmdtab[];
extern FILE *cout;
extern int data;
extern char *home;
+extern int family;
extern int proxy;
extern char reply_string[];
extern int NCMDS;
diff --git a/usr.bin/ftp/fetch.c b/usr.bin/ftp/fetch.c
index bc8adf1..f306406 100644
--- a/usr.bin/ftp/fetch.c
+++ b/usr.bin/ftp/fetch.c
@@ -204,7 +204,7 @@ url_get(origline, proxyenv)
port = httpport;
memset(&hints, 0, sizeof(hints));
- hints.ai_family = AF_UNSPEC;
+ hints.ai_family = family;
hints.ai_socktype = SOCK_STREAM;
error = getaddrinfo(host, port, &hints, &res);
res0 = res;
diff --git a/usr.bin/ftp/ftp.c b/usr.bin/ftp/ftp.c
index c31cb94..cfdfda8 100644
--- a/usr.bin/ftp/ftp.c
+++ b/usr.bin/ftp/ftp.c
@@ -121,7 +121,7 @@ hookup(host0, port)
host = hostnamebuf;
memset(&hints, 0, sizeof(hints));
hints.ai_flags = AI_CANONNAME;
- hints.ai_family = AF_UNSPEC;
+ hints.ai_family = family;
hints.ai_socktype = SOCK_STREAM;
hints.ai_protocol = 0;
error = getaddrinfo(host, port, &hints, &res0);
diff --git a/usr.bin/ftp/main.c b/usr.bin/ftp/main.c
index 48bf77e..4460878 100644
--- a/usr.bin/ftp/main.c
+++ b/usr.bin/ftp/main.c
@@ -70,6 +70,8 @@ __RCSID_SOURCE("$NetBSD: main.c,v 1.26 1997/10/14 16:31:22 christos Exp $");
#include "ftp_var.h"
#include "pathnames.h"
+int family = AF_UNSPEC;
+
int main __P((int, char **));
int
@@ -151,8 +153,16 @@ main(argc, argv)
if (isatty(fileno(stdout)) && !dumbterm)
progress = 1; /* progress bar on if tty is usable */
- while ((ch = getopt(argc, argv, "adeginpP:s:tUvV")) != -1) {
+ while ((ch = getopt(argc, argv, "46adeginpP:s:tUvV")) != -1) {
switch (ch) {
+ case '4':
+ family = AF_INET;
+ break;
+#ifdef INET6
+ case '6':
+ family = AF_INET6;
+ break;
+#endif
case 'a':
anonftp = 1;
break;
@@ -228,7 +238,7 @@ main(argc, argv)
int error;
memset(&hints, 0, sizeof(hints));
- hints.ai_family = AF_UNSPEC;
+ hints.ai_family = family;
hints.ai_socktype = SOCK_STREAM;
error = getaddrinfo(src_addr, NULL, &hints, &res);
if (error) {
@@ -697,7 +707,7 @@ void
usage()
{
(void)fprintf(stderr,
- "usage: %s [-adeginptUvV] [-P port] [-s src_addr] [host [port]]\n"
+ "usage: %s [-46adeginptUvV] [-P port] [-s src_addr] [host [port]]\n"
" %s host:path[/]\n"
" %s ftp://host[:port]/path[/]\n"
" %s http://host[:port]/file\n",
diff --git a/usr.bin/rlogin/rlogin.c b/usr.bin/rlogin/rlogin.c
index 4f2cb6b..fb3f3d4 100644
--- a/usr.bin/rlogin/rlogin.c
+++ b/usr.bin/rlogin/rlogin.c
@@ -95,6 +95,7 @@ char dst_realm_buf[REALM_SZ], *dest_realm = NULL;
#endif
int eight, litout, rem;
+int family = PF_UNSPEC;
int noescape;
u_char escapechar = '~';
@@ -176,12 +177,20 @@ main(argc, argv)
}
#ifdef KERBEROS
-#define OPTIONS "8DEKLde:i:k:l:x"
+#define OPTIONS "468DEKLde:i:k:l:x"
#else
-#define OPTIONS "8DEKLde:i:l:"
+#define OPTIONS "468DEKLde:i:l:"
#endif
while ((ch = getopt(argc - argoff, argv + argoff, OPTIONS)) != -1)
switch(ch) {
+ case '4':
+ family = PF_INET;
+ break;
+
+ case '6':
+ family = PF_INET6;
+ break;
+
case '8':
eight = 1;
break;
@@ -334,10 +343,10 @@ main(argc, argv)
errx(1, "the -x flag requires Kerberos authentication");
#endif /* CRYPT */
rem = rcmd_af(&host, sp->s_port, localname, user, term, 0,
- PF_UNSPEC);
+ family);
}
#else
- rem = rcmd_af(&host, sp->s_port, localname, user, term, 0, PF_UNSPEC);
+ rem = rcmd_af(&host, sp->s_port, localname, user, term, 0, family);
#endif /* KERBEROS */
if (rem < 0)
@@ -876,7 +885,7 @@ void
usage()
{
(void)fprintf(stderr,
- "usage: rlogin [-%s]%s[-e char] [-i localname] [-l username] host\n",
+ "usage: rlogin [-46%s]%s[-e char] [-i localname] [-l username] host\n",
#ifdef KERBEROS
#ifdef CRYPT
"8DEKLdx", " [-k realm] ");
diff --git a/usr.bin/rsh/rsh.c b/usr.bin/rsh/rsh.c
index aecb818..69579ff 100644
--- a/usr.bin/rsh/rsh.c
+++ b/usr.bin/rsh/rsh.c
@@ -85,6 +85,8 @@ extern char *krb_realmofhost();
*/
int rfd2;
+int family = PF_UNSPEC;
+
char *copyargs __P((char **));
void sendsig __P((int));
void talk __P((int, long, pid_t, int, int));
@@ -129,15 +131,23 @@ main(argc, argv)
#ifdef KERBEROS
#ifdef CRYPT
-#define OPTIONS "8KLde:k:l:nt:wx"
+#define OPTIONS "468KLde:k:l:nt:wx"
#else
-#define OPTIONS "8KLde:k:l:nt:w"
+#define OPTIONS "468KLde:k:l:nt:w"
#endif
#else
-#define OPTIONS "8KLde:l:nt:w"
+#define OPTIONS "468KLde:l:nt:w"
#endif
while ((ch = getopt(argc - argoff, argv + argoff, OPTIONS)) != -1)
switch(ch) {
+ case '4':
+ family = PF_INET;
+ break;
+
+ case '6':
+ family = PF_INET6;
+ break;
+
case 'K':
#ifdef KERBEROS
use_kerberos = 0;
@@ -270,11 +280,11 @@ try_connect:
if (doencrypt)
errx(1, "the -x flag requires Kerberos authentication");
rem = rcmd_af(&host, sp->s_port, pw->pw_name, user, args,
- &rfd2, PF_UNSPEC);
+ &rfd2, family);
}
#else
rem = rcmd_af(&host, sp->s_port, pw->pw_name, user, args, &rfd2,
- PF_UNSPEC);
+ family);
#endif
if (rem < 0)
@@ -479,7 +489,7 @@ usage()
{
(void)fprintf(stderr,
- "usage: rsh [-nd%s]%s[-l login] [-t timeout] host [command]\n",
+ "usage: rsh [-46] [-nd%s]%s[-l login] [-t timeout] host [command]\n",
#ifdef KERBEROS
#ifdef CRYPT
"x", " [-k realm] ");
OpenPOWER on IntegriCloud