1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
|
$NetBSD: patch-bi,v 1.1 1999/12/25 05:28:37 kim Exp $
--- ssh.c.orig Wed May 12 07:19:28 1999
+++ ssh.c Fri Dec 24 21:50:42 1999
@@ -218,6 +218,14 @@
other functions. */
RandomState random_state;
+/* Flag indicating whether IPv4 or IPv6. This can be set on the command line.
+ Default value is AF_UNSPEC means both IPv4 and IPv6. */
+#ifdef ENABLE_IPV6
+int IPv4or6 = AF_UNSPEC;
+#else
+int IPv4or6 = AF_INET;
+#endif
+
/* Flag indicating whether debug mode is on. This can be set on the
command line. */
int debug_flag = 0;
@@ -277,12 +285,19 @@
{
fprintf(stderr, "Usage: %s [options] host [command]\n", av0);
fprintf(stderr, "Options:\n");
+ fprintf(stderr, " -4 Use IPv4 only.\n");
+#ifdef ENABLE_IPV6
+ fprintf(stderr, " -6 Use IPv6 only.\n");
+#endif
+#ifdef ENABLE_ANOTHER_PORT_TRY
+ fprintf(stderr, " -A Try to connect to another port before original port.\n");
+#endif /* ENABLE_ANOTHER_PORT_TRY */
fprintf(stderr, " -l user Log in using this user name.\n");
fprintf(stderr, " -n Redirect input from /dev/null.\n");
fprintf(stderr, " -a Disable authentication agent forwarding.\n");
-#if defined(KERBEROS_TGT_PASSING) && defined(KRB5)
- fprintf(stderr, " -k Disable Kerberos ticket passing.\n");
-#endif /* defined(KERBEROS_TGT_PASSING) && defined(KRB5) */
+#ifdef AFS
+ fprintf(stderr, " -k Disable Kerberos ticket and AFS token passing.\n");
+#endif /* AFS */
#ifndef SSH_NO_X11_FORWARDING
fprintf(stderr, " -x Disable X11 connection forwarding.\n");
#endif
@@ -413,6 +428,9 @@
#ifdef SIGWINCH
struct winsize ws;
#endif /* SIGWINCH */
+#ifdef ENABLE_ANOTHER_PORT_TRY
+ int another_port_flag = 0;
+#endif /* ENABLE_ANOTHER_PORT_TRY */
/* Save the original real uid. It will be needed later (uid-swapping may
clobber the real uid). */
@@ -522,6 +540,26 @@
}
switch (opt)
{
+ case '4':
+#ifdef ENABLE_IPV6
+ IPv4or6 = (IPv4or6 == AF_INET6) ? AF_UNSPEC : AF_INET;
+#else
+ IPv4or6 = AF_INET;
+#endif
+ break;
+
+#ifdef ENABLE_IPV6
+ case '6':
+ IPv4or6 = (IPv4or6 == AF_INET) ? AF_UNSPEC : AF_INET6;
+ break;
+#endif
+
+#ifdef ENABLE_ANOTHER_PORT_TRY
+ case 'A':
+ another_port_flag = 1;
+ break;
+#endif /* ENABLE_ANOTHER_PORT_TRY */
+
case 'n':
stdin_null_flag = 1;
break;
@@ -541,6 +579,9 @@
case 'k':
options.kerberos_tgt_passing = 0;
+#ifdef AFS
+ options.afs_token_passing = 0;
+#endif /* AFS */
break;
case 'i':
@@ -789,11 +830,18 @@
{
use_privileged_port = 0;
}
+#ifdef ENABLE_ANOTHER_PORT_TRY
+ if (!another_port_flag)
+ options.another_port = 0;
+#endif /* ENABLE_ANOTHER_PORT_TRY */
/* Open a connection to the remote host. This needs root privileges if
rhosts_authentication is true. Note that the random_state is not
yet used by this call, although a pointer to it is stored, and thus it
need not be initialized. */
ok = ssh_connect(host, options.port, options.connection_attempts,
+#ifdef ENABLE_ANOTHER_PORT_TRY
+ options.another_port,
+#endif /* ENABLE_ANOTHER_PORT_TRY */
!use_privileged_port,
original_real_uid, options.proxy_command, &random_state);
|