diff options
Diffstat (limited to 'debian/patches/gssapi.patch')
-rw-r--r-- | debian/patches/gssapi.patch | 201 |
1 files changed, 128 insertions, 73 deletions
diff --git a/debian/patches/gssapi.patch b/debian/patches/gssapi.patch index 778c23023..692437142 100644 --- a/debian/patches/gssapi.patch +++ b/debian/patches/gssapi.patch | |||
@@ -19,14 +19,24 @@ Index: b/ChangeLog.gssapi | |||
19 | =================================================================== | 19 | =================================================================== |
20 | --- /dev/null | 20 | --- /dev/null |
21 | +++ b/ChangeLog.gssapi | 21 | +++ b/ChangeLog.gssapi |
22 | @@ -0,0 +1,103 @@ | 22 | @@ -0,0 +1,113 @@ |
23 | +20110101 | ||
24 | + - Finally update for OpenSSH 5.6p1 | ||
25 | + - Add GSSAPIServerIdentity option from Jim Basney | ||
26 | + | ||
27 | +20100308 | ||
28 | + - [ Makefile.in, key.c, key.h ] | ||
29 | + Updates for OpenSSH 5.4p1 | ||
30 | + - [ servconf.c ] | ||
31 | + Include GSSAPI options in the sshd -T configuration dump, and flag | ||
32 | + some older configuration options as being unsupported. Thanks to Colin | ||
33 | + Watson. | ||
34 | + - | ||
35 | + | ||
23 | +20100124 | 36 | +20100124 |
24 | + - [ sshconnect2.c ] | 37 | + - [ sshconnect2.c ] |
25 | + Adapt to deal with additional element in Authmethod structure. Thanks to | 38 | + Adapt to deal with additional element in Authmethod structure. Thanks to |
26 | + Colin Wilson | 39 | + Colin Watson |
27 | + - [ clientloop.c ] | ||
28 | + Protect credentials updated code with suitable #ifdefs. Thanks to Colin | ||
29 | + Wilson | ||
30 | + | 40 | + |
31 | +20090615 | 41 | +20090615 |
32 | + - [ gss-genr.c gss-serv.c kexgssc.c kexgsss.c monitor.c sshconnect2.c | 42 | + - [ gss-genr.c gss-serv.c kexgssc.c kexgsss.c monitor.c sshconnect2.c |
@@ -127,23 +137,23 @@ Index: b/Makefile.in | |||
127 | =================================================================== | 137 | =================================================================== |
128 | --- a/Makefile.in | 138 | --- a/Makefile.in |
129 | +++ b/Makefile.in | 139 | +++ b/Makefile.in |
130 | @@ -74,7 +74,7 @@ | 140 | @@ -75,7 +75,7 @@ |
131 | monitor_fdpass.o rijndael.o ssh-dss.o ssh-rsa.o dh.o kexdh.o \ | 141 | monitor_fdpass.o rijndael.o ssh-dss.o ssh-ecdsa.o ssh-rsa.o dh.o \ |
132 | kexgex.o kexdhc.o kexgexc.o msg.o progressmeter.o dns.o \ | 142 | kexdh.o kexgex.o kexdhc.o kexgexc.o bufec.o kexecdh.o kexecdhc.o \ |
133 | entropy.o gss-genr.o umac.o jpake.o schnorr.o \ | 143 | msg.o progressmeter.o dns.o entropy.o gss-genr.o umac.o jpake.o \ |
134 | - ssh-pkcs11.o | 144 | - schnorr.o ssh-pkcs11.o |
135 | + ssh-pkcs11.o kexgssc.o | 145 | + schnorr.o kexgssc.o ssh-pkcs11.o |
136 | 146 | ||
137 | SSHOBJS= ssh.o readconf.o clientloop.o sshtty.o \ | 147 | SSHOBJS= ssh.o readconf.o clientloop.o sshtty.o \ |
138 | sshconnect.o sshconnect1.o sshconnect2.o mux.o \ | 148 | sshconnect.o sshconnect1.o sshconnect2.o mux.o \ |
139 | @@ -88,7 +88,7 @@ | 149 | @@ -90,7 +90,7 @@ |
140 | auth2-none.o auth2-passwd.o auth2-pubkey.o auth2-jpake.o \ | 150 | auth2-none.o auth2-passwd.o auth2-pubkey.o auth2-jpake.o \ |
141 | monitor_mm.o monitor.o monitor_wrap.o kexdhs.o kexgexs.o \ | 151 | monitor_mm.o monitor.o monitor_wrap.o kexdhs.o kexgexs.o kexecdhs.o \ |
142 | auth-krb5.o \ | 152 | auth-krb5.o \ |
143 | - auth2-gss.o gss-serv.o gss-serv-krb5.o \ | 153 | - auth2-gss.o gss-serv.o gss-serv-krb5.o \ |
144 | + auth2-gss.o gss-serv.o gss-serv-krb5.o kexgsss.o\ | 154 | + auth2-gss.o gss-serv.o gss-serv-krb5.o kexgsss.o\ |
145 | loginrec.o auth-pam.o auth-shadow.o auth-sia.o md5crypt.o \ | 155 | loginrec.o auth-pam.o auth-shadow.o auth-sia.o md5crypt.o \ |
146 | audit.o audit-bsm.o platform.o sftp-server.o sftp-common.o \ | 156 | sftp-server.o sftp-common.o \ |
147 | roaming_common.o roaming_serv.o | 157 | roaming_common.o roaming_serv.o |
148 | Index: b/auth-krb5.c | 158 | Index: b/auth-krb5.c |
149 | =================================================================== | 159 | =================================================================== |
@@ -384,7 +394,7 @@ Index: b/configure.ac | |||
384 | =================================================================== | 394 | =================================================================== |
385 | --- a/configure.ac | 395 | --- a/configure.ac |
386 | +++ b/configure.ac | 396 | +++ b/configure.ac |
387 | @@ -477,6 +477,30 @@ | 397 | @@ -514,6 +514,30 @@ |
388 | [Use tunnel device compatibility to OpenBSD]) | 398 | [Use tunnel device compatibility to OpenBSD]) |
389 | AC_DEFINE(SSH_TUN_PREPEND_AF, 1, | 399 | AC_DEFINE(SSH_TUN_PREPEND_AF, 1, |
390 | [Prepend the address family to IP tunnel traffic]) | 400 | [Prepend the address family to IP tunnel traffic]) |
@@ -1222,9 +1232,9 @@ Index: b/kex.c | |||
1222 | #if OPENSSL_VERSION_NUMBER >= 0x00907000L | 1232 | #if OPENSSL_VERSION_NUMBER >= 0x00907000L |
1223 | # if defined(HAVE_EVP_SHA256) | 1233 | # if defined(HAVE_EVP_SHA256) |
1224 | # define evp_ssh_sha256 EVP_sha256 | 1234 | # define evp_ssh_sha256 EVP_sha256 |
1225 | @@ -326,6 +330,20 @@ | 1235 | @@ -358,6 +362,20 @@ |
1226 | k->kex_type = KEX_DH_GEX_SHA256; | 1236 | k->kex_type = KEX_ECDH_SHA2; |
1227 | k->evp_md = evp_ssh_sha256(); | 1237 | k->evp_md = kex_ecdh_name_to_evpmd(k->name); |
1228 | #endif | 1238 | #endif |
1229 | +#ifdef GSSAPI | 1239 | +#ifdef GSSAPI |
1230 | + } else if (strncmp(k->name, KEX_GSS_GEX_SHA1_ID, | 1240 | + } else if (strncmp(k->name, KEX_GSS_GEX_SHA1_ID, |
@@ -1247,17 +1257,17 @@ Index: b/kex.h | |||
1247 | =================================================================== | 1257 | =================================================================== |
1248 | --- a/kex.h | 1258 | --- a/kex.h |
1249 | +++ b/kex.h | 1259 | +++ b/kex.h |
1250 | @@ -67,6 +67,9 @@ | 1260 | @@ -73,6 +73,9 @@ |
1251 | KEX_DH_GRP14_SHA1, | ||
1252 | KEX_DH_GEX_SHA1, | 1261 | KEX_DH_GEX_SHA1, |
1253 | KEX_DH_GEX_SHA256, | 1262 | KEX_DH_GEX_SHA256, |
1263 | KEX_ECDH_SHA2, | ||
1254 | + KEX_GSS_GRP1_SHA1, | 1264 | + KEX_GSS_GRP1_SHA1, |
1255 | + KEX_GSS_GRP14_SHA1, | 1265 | + KEX_GSS_GRP14_SHA1, |
1256 | + KEX_GSS_GEX_SHA1, | 1266 | + KEX_GSS_GEX_SHA1, |
1257 | KEX_MAX | 1267 | KEX_MAX |
1258 | }; | 1268 | }; |
1259 | 1269 | ||
1260 | @@ -123,6 +126,12 @@ | 1270 | @@ -129,6 +132,12 @@ |
1261 | sig_atomic_t done; | 1271 | sig_atomic_t done; |
1262 | int flags; | 1272 | int flags; |
1263 | const EVP_MD *evp_md; | 1273 | const EVP_MD *evp_md; |
@@ -1270,9 +1280,9 @@ Index: b/kex.h | |||
1270 | char *client_version_string; | 1280 | char *client_version_string; |
1271 | char *server_version_string; | 1281 | char *server_version_string; |
1272 | int (*verify_host_key)(Key *); | 1282 | int (*verify_host_key)(Key *); |
1273 | @@ -146,6 +155,11 @@ | 1283 | @@ -156,6 +165,11 @@ |
1274 | void kexgex_client(Kex *); | 1284 | void kexecdh_client(Kex *); |
1275 | void kexgex_server(Kex *); | 1285 | void kexecdh_server(Kex *); |
1276 | 1286 | ||
1277 | +#ifdef GSSAPI | 1287 | +#ifdef GSSAPI |
1278 | +void kexgss_client(Kex *); | 1288 | +void kexgss_client(Kex *); |
@@ -1918,21 +1928,30 @@ Index: b/key.c | |||
1918 | =================================================================== | 1928 | =================================================================== |
1919 | --- a/key.c | 1929 | --- a/key.c |
1920 | +++ b/key.c | 1930 | +++ b/key.c |
1921 | @@ -1020,6 +1020,8 @@ | 1931 | @@ -971,6 +971,8 @@ |
1922 | return KEY_RSA_CERT; | 1932 | } |
1923 | } else if (strcmp(name, "ssh-dss-cert-v01@openssh.com") == 0) { | 1933 | break; |
1924 | return KEY_DSA_CERT; | 1934 | #endif /* OPENSSL_HAS_ECC */ |
1935 | + case KEY_NULL: | ||
1936 | + return "null"; | ||
1937 | } | ||
1938 | return "ssh-unknown"; | ||
1939 | } | ||
1940 | @@ -1276,6 +1278,8 @@ | ||
1941 | strcmp(name, "ecdsa-sha2-nistp521-cert-v01@openssh.com") == 0) { | ||
1942 | return KEY_ECDSA_CERT; | ||
1943 | #endif | ||
1925 | + } else if (strcmp(name, "null") == 0) { | 1944 | + } else if (strcmp(name, "null") == 0) { |
1926 | + return KEY_NULL; | 1945 | + return KEY_NULL; |
1927 | } | 1946 | } |
1947 | |||
1928 | debug2("key_type_from_name: unknown key type '%s'", name); | 1948 | debug2("key_type_from_name: unknown key type '%s'", name); |
1929 | return KEY_UNSPEC; | ||
1930 | Index: b/key.h | 1949 | Index: b/key.h |
1931 | =================================================================== | 1950 | =================================================================== |
1932 | --- a/key.h | 1951 | --- a/key.h |
1933 | +++ b/key.h | 1952 | +++ b/key.h |
1934 | @@ -39,6 +39,7 @@ | 1953 | @@ -44,6 +44,7 @@ |
1935 | KEY_DSA_CERT, | 1954 | KEY_ECDSA_CERT, |
1936 | KEY_RSA_CERT_V00, | 1955 | KEY_RSA_CERT_V00, |
1937 | KEY_DSA_CERT_V00, | 1956 | KEY_DSA_CERT_V00, |
1938 | + KEY_NULL, | 1957 | + KEY_NULL, |
@@ -1995,10 +2014,10 @@ Index: b/monitor.c | |||
1995 | } else { | 2014 | } else { |
1996 | mon_dispatch = mon_dispatch_postauth15; | 2015 | mon_dispatch = mon_dispatch_postauth15; |
1997 | monitor_permit(mon_dispatch, MONITOR_REQ_TERM, 1); | 2016 | monitor_permit(mon_dispatch, MONITOR_REQ_TERM, 1); |
1998 | @@ -1691,6 +1708,13 @@ | 2017 | @@ -1692,6 +1709,13 @@ |
1999 | kex->kex[KEX_DH_GRP14_SHA1] = kexdh_server; | ||
2000 | kex->kex[KEX_DH_GEX_SHA1] = kexgex_server; | 2018 | kex->kex[KEX_DH_GEX_SHA1] = kexgex_server; |
2001 | kex->kex[KEX_DH_GEX_SHA256] = kexgex_server; | 2019 | kex->kex[KEX_DH_GEX_SHA256] = kexgex_server; |
2020 | kex->kex[KEX_ECDH_SHA2] = kexecdh_server; | ||
2002 | +#ifdef GSSAPI | 2021 | +#ifdef GSSAPI |
2003 | + if (options.gss_keyex) { | 2022 | + if (options.gss_keyex) { |
2004 | + kex->kex[KEX_GSS_GRP1_SHA1] = kexgss_server; | 2023 | + kex->kex[KEX_GSS_GRP1_SHA1] = kexgss_server; |
@@ -2009,7 +2028,7 @@ Index: b/monitor.c | |||
2009 | kex->server = 1; | 2028 | kex->server = 1; |
2010 | kex->hostkey_type = buffer_get_int(m); | 2029 | kex->hostkey_type = buffer_get_int(m); |
2011 | kex->kex_type = buffer_get_int(m); | 2030 | kex->kex_type = buffer_get_int(m); |
2012 | @@ -1897,6 +1921,9 @@ | 2031 | @@ -1898,6 +1922,9 @@ |
2013 | OM_uint32 major; | 2032 | OM_uint32 major; |
2014 | u_int len; | 2033 | u_int len; |
2015 | 2034 | ||
@@ -2019,7 +2038,7 @@ Index: b/monitor.c | |||
2019 | goid.elements = buffer_get_string(m, &len); | 2038 | goid.elements = buffer_get_string(m, &len); |
2020 | goid.length = len; | 2039 | goid.length = len; |
2021 | 2040 | ||
2022 | @@ -1924,6 +1951,9 @@ | 2041 | @@ -1925,6 +1952,9 @@ |
2023 | OM_uint32 flags = 0; /* GSI needs this */ | 2042 | OM_uint32 flags = 0; /* GSI needs this */ |
2024 | u_int len; | 2043 | u_int len; |
2025 | 2044 | ||
@@ -2029,7 +2048,7 @@ Index: b/monitor.c | |||
2029 | in.value = buffer_get_string(m, &len); | 2048 | in.value = buffer_get_string(m, &len); |
2030 | in.length = len; | 2049 | in.length = len; |
2031 | major = ssh_gssapi_accept_ctx(gsscontext, &in, &out, &flags); | 2050 | major = ssh_gssapi_accept_ctx(gsscontext, &in, &out, &flags); |
2032 | @@ -1941,6 +1971,7 @@ | 2051 | @@ -1942,6 +1972,7 @@ |
2033 | monitor_permit(mon_dispatch, MONITOR_REQ_GSSSTEP, 0); | 2052 | monitor_permit(mon_dispatch, MONITOR_REQ_GSSSTEP, 0); |
2034 | monitor_permit(mon_dispatch, MONITOR_REQ_GSSUSEROK, 1); | 2053 | monitor_permit(mon_dispatch, MONITOR_REQ_GSSUSEROK, 1); |
2035 | monitor_permit(mon_dispatch, MONITOR_REQ_GSSCHECKMIC, 1); | 2054 | monitor_permit(mon_dispatch, MONITOR_REQ_GSSCHECKMIC, 1); |
@@ -2037,7 +2056,7 @@ Index: b/monitor.c | |||
2037 | } | 2056 | } |
2038 | return (0); | 2057 | return (0); |
2039 | } | 2058 | } |
2040 | @@ -1952,6 +1983,9 @@ | 2059 | @@ -1953,6 +1984,9 @@ |
2041 | OM_uint32 ret; | 2060 | OM_uint32 ret; |
2042 | u_int len; | 2061 | u_int len; |
2043 | 2062 | ||
@@ -2047,7 +2066,7 @@ Index: b/monitor.c | |||
2047 | gssbuf.value = buffer_get_string(m, &len); | 2066 | gssbuf.value = buffer_get_string(m, &len); |
2048 | gssbuf.length = len; | 2067 | gssbuf.length = len; |
2049 | mic.value = buffer_get_string(m, &len); | 2068 | mic.value = buffer_get_string(m, &len); |
2050 | @@ -1978,7 +2012,11 @@ | 2069 | @@ -1979,7 +2013,11 @@ |
2051 | { | 2070 | { |
2052 | int authenticated; | 2071 | int authenticated; |
2053 | 2072 | ||
@@ -2060,7 +2079,7 @@ Index: b/monitor.c | |||
2060 | 2079 | ||
2061 | buffer_clear(m); | 2080 | buffer_clear(m); |
2062 | buffer_put_int(m, authenticated); | 2081 | buffer_put_int(m, authenticated); |
2063 | @@ -1991,6 +2029,74 @@ | 2082 | @@ -1992,6 +2030,74 @@ |
2064 | /* Monitor loop will terminate if authenticated */ | 2083 | /* Monitor loop will terminate if authenticated */ |
2065 | return (authenticated); | 2084 | return (authenticated); |
2066 | } | 2085 | } |
@@ -2152,7 +2171,7 @@ Index: b/monitor_wrap.c | |||
2152 | =================================================================== | 2171 | =================================================================== |
2153 | --- a/monitor_wrap.c | 2172 | --- a/monitor_wrap.c |
2154 | +++ b/monitor_wrap.c | 2173 | +++ b/monitor_wrap.c |
2155 | @@ -1231,7 +1231,7 @@ | 2174 | @@ -1232,7 +1232,7 @@ |
2156 | } | 2175 | } |
2157 | 2176 | ||
2158 | int | 2177 | int |
@@ -2161,7 +2180,7 @@ Index: b/monitor_wrap.c | |||
2161 | { | 2180 | { |
2162 | Buffer m; | 2181 | Buffer m; |
2163 | int authenticated = 0; | 2182 | int authenticated = 0; |
2164 | @@ -1248,6 +1248,51 @@ | 2183 | @@ -1249,6 +1249,51 @@ |
2165 | debug3("%s: user %sauthenticated",__func__, authenticated ? "" : "not "); | 2184 | debug3("%s: user %sauthenticated",__func__, authenticated ? "" : "not "); |
2166 | return (authenticated); | 2185 | return (authenticated); |
2167 | } | 2186 | } |
@@ -2233,15 +2252,16 @@ Index: b/readconf.c | |||
2233 | =================================================================== | 2252 | =================================================================== |
2234 | --- a/readconf.c | 2253 | --- a/readconf.c |
2235 | +++ b/readconf.c | 2254 | +++ b/readconf.c |
2236 | @@ -127,6 +127,7 @@ | 2255 | @@ -129,6 +129,8 @@ |
2237 | oClearAllForwardings, oNoHostAuthenticationForLocalhost, | 2256 | oClearAllForwardings, oNoHostAuthenticationForLocalhost, |
2238 | oEnableSSHKeysign, oRekeyLimit, oVerifyHostKeyDNS, oConnectTimeout, | 2257 | oEnableSSHKeysign, oRekeyLimit, oVerifyHostKeyDNS, oConnectTimeout, |
2239 | oAddressFamily, oGssAuthentication, oGssDelegateCreds, | 2258 | oAddressFamily, oGssAuthentication, oGssDelegateCreds, |
2240 | + oGssTrustDns, oGssKeyEx, oGssClientIdentity, oGssRenewalRekey, | 2259 | + oGssTrustDns, oGssKeyEx, oGssClientIdentity, oGssRenewalRekey, |
2260 | + oGssServerIdentity, | ||
2241 | oServerAliveInterval, oServerAliveCountMax, oIdentitiesOnly, | 2261 | oServerAliveInterval, oServerAliveCountMax, oIdentitiesOnly, |
2242 | oSendEnv, oControlPath, oControlMaster, oControlPersist, | 2262 | oSendEnv, oControlPath, oControlMaster, oControlPersist, |
2243 | oHashKnownHosts, | 2263 | oHashKnownHosts, |
2244 | @@ -166,10 +167,18 @@ | 2264 | @@ -169,10 +171,19 @@ |
2245 | { "afstokenpassing", oUnsupported }, | 2265 | { "afstokenpassing", oUnsupported }, |
2246 | #if defined(GSSAPI) | 2266 | #if defined(GSSAPI) |
2247 | { "gssapiauthentication", oGssAuthentication }, | 2267 | { "gssapiauthentication", oGssAuthentication }, |
@@ -2249,6 +2269,7 @@ Index: b/readconf.c | |||
2249 | { "gssapidelegatecredentials", oGssDelegateCreds }, | 2269 | { "gssapidelegatecredentials", oGssDelegateCreds }, |
2250 | + { "gssapitrustdns", oGssTrustDns }, | 2270 | + { "gssapitrustdns", oGssTrustDns }, |
2251 | + { "gssapiclientidentity", oGssClientIdentity }, | 2271 | + { "gssapiclientidentity", oGssClientIdentity }, |
2272 | + { "gssapiserveridentity", oGssServerIdentity }, | ||
2252 | + { "gssapirenewalforcesrekey", oGssRenewalRekey }, | 2273 | + { "gssapirenewalforcesrekey", oGssRenewalRekey }, |
2253 | #else | 2274 | #else |
2254 | { "gssapiauthentication", oUnsupported }, | 2275 | { "gssapiauthentication", oUnsupported }, |
@@ -2260,7 +2281,7 @@ Index: b/readconf.c | |||
2260 | #endif | 2281 | #endif |
2261 | { "fallbacktorsh", oDeprecated }, | 2282 | { "fallbacktorsh", oDeprecated }, |
2262 | { "usersh", oDeprecated }, | 2283 | { "usersh", oDeprecated }, |
2263 | @@ -474,10 +483,26 @@ | 2284 | @@ -479,10 +490,30 @@ |
2264 | intptr = &options->gss_authentication; | 2285 | intptr = &options->gss_authentication; |
2265 | goto parse_flag; | 2286 | goto parse_flag; |
2266 | 2287 | ||
@@ -2280,6 +2301,10 @@ Index: b/readconf.c | |||
2280 | + charptr = &options->gss_client_identity; | 2301 | + charptr = &options->gss_client_identity; |
2281 | + goto parse_string; | 2302 | + goto parse_string; |
2282 | + | 2303 | + |
2304 | + case oGssServerIdentity: | ||
2305 | + charptr = &options->gss_server_identity; | ||
2306 | + goto parse_string; | ||
2307 | + | ||
2283 | + case oGssRenewalRekey: | 2308 | + case oGssRenewalRekey: |
2284 | + intptr = &options->gss_renewal_rekey; | 2309 | + intptr = &options->gss_renewal_rekey; |
2285 | + goto parse_flag; | 2310 | + goto parse_flag; |
@@ -2287,7 +2312,7 @@ Index: b/readconf.c | |||
2287 | case oBatchMode: | 2312 | case oBatchMode: |
2288 | intptr = &options->batch_mode; | 2313 | intptr = &options->batch_mode; |
2289 | goto parse_flag; | 2314 | goto parse_flag; |
2290 | @@ -1058,7 +1083,11 @@ | 2315 | @@ -1092,7 +1123,12 @@ |
2291 | options->pubkey_authentication = -1; | 2316 | options->pubkey_authentication = -1; |
2292 | options->challenge_response_authentication = -1; | 2317 | options->challenge_response_authentication = -1; |
2293 | options->gss_authentication = -1; | 2318 | options->gss_authentication = -1; |
@@ -2296,10 +2321,11 @@ Index: b/readconf.c | |||
2296 | + options->gss_trust_dns = -1; | 2321 | + options->gss_trust_dns = -1; |
2297 | + options->gss_renewal_rekey = -1; | 2322 | + options->gss_renewal_rekey = -1; |
2298 | + options->gss_client_identity = NULL; | 2323 | + options->gss_client_identity = NULL; |
2324 | + options->gss_server_identity = NULL; | ||
2299 | options->password_authentication = -1; | 2325 | options->password_authentication = -1; |
2300 | options->kbd_interactive_authentication = -1; | 2326 | options->kbd_interactive_authentication = -1; |
2301 | options->kbd_interactive_devices = NULL; | 2327 | options->kbd_interactive_devices = NULL; |
2302 | @@ -1156,8 +1185,14 @@ | 2328 | @@ -1193,8 +1229,14 @@ |
2303 | options->challenge_response_authentication = 1; | 2329 | options->challenge_response_authentication = 1; |
2304 | if (options->gss_authentication == -1) | 2330 | if (options->gss_authentication == -1) |
2305 | options->gss_authentication = 0; | 2331 | options->gss_authentication = 0; |
@@ -2318,7 +2344,7 @@ Index: b/readconf.h | |||
2318 | =================================================================== | 2344 | =================================================================== |
2319 | --- a/readconf.h | 2345 | --- a/readconf.h |
2320 | +++ b/readconf.h | 2346 | +++ b/readconf.h |
2321 | @@ -46,7 +46,11 @@ | 2347 | @@ -46,7 +46,12 @@ |
2322 | int challenge_response_authentication; | 2348 | int challenge_response_authentication; |
2323 | /* Try S/Key or TIS, authentication. */ | 2349 | /* Try S/Key or TIS, authentication. */ |
2324 | int gss_authentication; /* Try GSS authentication */ | 2350 | int gss_authentication; /* Try GSS authentication */ |
@@ -2327,6 +2353,7 @@ Index: b/readconf.h | |||
2327 | + int gss_trust_dns; /* Trust DNS for GSS canonicalization */ | 2353 | + int gss_trust_dns; /* Trust DNS for GSS canonicalization */ |
2328 | + int gss_renewal_rekey; /* Credential renewal forces rekey */ | 2354 | + int gss_renewal_rekey; /* Credential renewal forces rekey */ |
2329 | + char *gss_client_identity; /* Principal to initiate GSSAPI with */ | 2355 | + char *gss_client_identity; /* Principal to initiate GSSAPI with */ |
2356 | + char *gss_server_identity; /* GSSAPI target principal */ | ||
2330 | int password_authentication; /* Try password | 2357 | int password_authentication; /* Try password |
2331 | * authentication. */ | 2358 | * authentication. */ |
2332 | int kbd_interactive_authentication; /* Try keyboard-interactive auth. */ | 2359 | int kbd_interactive_authentication; /* Try keyboard-interactive auth. */ |
@@ -2334,7 +2361,7 @@ Index: b/servconf.c | |||
2334 | =================================================================== | 2361 | =================================================================== |
2335 | --- a/servconf.c | 2362 | --- a/servconf.c |
2336 | +++ b/servconf.c | 2363 | +++ b/servconf.c |
2337 | @@ -93,7 +93,10 @@ | 2364 | @@ -97,7 +97,10 @@ |
2338 | options->kerberos_ticket_cleanup = -1; | 2365 | options->kerberos_ticket_cleanup = -1; |
2339 | options->kerberos_get_afs_token = -1; | 2366 | options->kerberos_get_afs_token = -1; |
2340 | options->gss_authentication=-1; | 2367 | options->gss_authentication=-1; |
@@ -2345,7 +2372,7 @@ Index: b/servconf.c | |||
2345 | options->password_authentication = -1; | 2372 | options->password_authentication = -1; |
2346 | options->kbd_interactive_authentication = -1; | 2373 | options->kbd_interactive_authentication = -1; |
2347 | options->challenge_response_authentication = -1; | 2374 | options->challenge_response_authentication = -1; |
2348 | @@ -215,8 +218,14 @@ | 2375 | @@ -226,8 +229,14 @@ |
2349 | options->kerberos_get_afs_token = 0; | 2376 | options->kerberos_get_afs_token = 0; |
2350 | if (options->gss_authentication == -1) | 2377 | if (options->gss_authentication == -1) |
2351 | options->gss_authentication = 0; | 2378 | options->gss_authentication = 0; |
@@ -2360,7 +2387,7 @@ Index: b/servconf.c | |||
2360 | if (options->password_authentication == -1) | 2387 | if (options->password_authentication == -1) |
2361 | options->password_authentication = 1; | 2388 | options->password_authentication = 1; |
2362 | if (options->kbd_interactive_authentication == -1) | 2389 | if (options->kbd_interactive_authentication == -1) |
2363 | @@ -307,7 +316,9 @@ | 2390 | @@ -322,7 +331,9 @@ |
2364 | sBanner, sUseDNS, sHostbasedAuthentication, | 2391 | sBanner, sUseDNS, sHostbasedAuthentication, |
2365 | sHostbasedUsesNameFromPacketOnly, sClientAliveInterval, | 2392 | sHostbasedUsesNameFromPacketOnly, sClientAliveInterval, |
2366 | sClientAliveCountMax, sAuthorizedKeysFile, sAuthorizedKeysFile2, | 2393 | sClientAliveCountMax, sAuthorizedKeysFile, sAuthorizedKeysFile2, |
@@ -2371,23 +2398,28 @@ Index: b/servconf.c | |||
2371 | sMatch, sPermitOpen, sForceCommand, sChrootDirectory, | 2398 | sMatch, sPermitOpen, sForceCommand, sChrootDirectory, |
2372 | sUsePrivilegeSeparation, sAllowAgentForwarding, | 2399 | sUsePrivilegeSeparation, sAllowAgentForwarding, |
2373 | sZeroKnowledgePasswordAuthentication, sHostCertificate, | 2400 | sZeroKnowledgePasswordAuthentication, sHostCertificate, |
2374 | @@ -370,9 +381,15 @@ | 2401 | @@ -386,10 +397,20 @@ |
2375 | #ifdef GSSAPI | 2402 | #ifdef GSSAPI |
2376 | { "gssapiauthentication", sGssAuthentication, SSHCFG_ALL }, | 2403 | { "gssapiauthentication", sGssAuthentication, SSHCFG_ALL }, |
2377 | { "gssapicleanupcredentials", sGssCleanupCreds, SSHCFG_GLOBAL }, | 2404 | { "gssapicleanupcredentials", sGssCleanupCreds, SSHCFG_GLOBAL }, |
2405 | + { "gssapicleanupcreds", sGssCleanupCreds, SSHCFG_GLOBAL }, | ||
2378 | + { "gssapistrictacceptorcheck", sGssStrictAcceptor, SSHCFG_GLOBAL }, | 2406 | + { "gssapistrictacceptorcheck", sGssStrictAcceptor, SSHCFG_GLOBAL }, |
2379 | + { "gssapikeyexchange", sGssKeyEx, SSHCFG_GLOBAL }, | 2407 | + { "gssapikeyexchange", sGssKeyEx, SSHCFG_GLOBAL }, |
2380 | + { "gssapistorecredentialsonrekey", sGssStoreRekey, SSHCFG_GLOBAL }, | 2408 | + { "gssapistorecredentialsonrekey", sGssStoreRekey, SSHCFG_GLOBAL }, |
2381 | #else | 2409 | #else |
2382 | { "gssapiauthentication", sUnsupported, SSHCFG_ALL }, | 2410 | { "gssapiauthentication", sUnsupported, SSHCFG_ALL }, |
2383 | { "gssapicleanupcredentials", sUnsupported, SSHCFG_GLOBAL }, | 2411 | { "gssapicleanupcredentials", sUnsupported, SSHCFG_GLOBAL }, |
2412 | + { "gssapicleanupcreds", sUnsupported, SSHCFG_GLOBAL }, | ||
2384 | + { "gssapistrictacceptorcheck", sUnsupported, SSHCFG_GLOBAL }, | 2413 | + { "gssapistrictacceptorcheck", sUnsupported, SSHCFG_GLOBAL }, |
2385 | + { "gssapikeyexchange", sUnsupported, SSHCFG_GLOBAL }, | 2414 | + { "gssapikeyexchange", sUnsupported, SSHCFG_GLOBAL }, |
2386 | + { "gssapistorecredentialsonrekey", sUnsupported, SSHCFG_GLOBAL }, | 2415 | + { "gssapistorecredentialsonrekey", sUnsupported, SSHCFG_GLOBAL }, |
2387 | #endif | 2416 | #endif |
2417 | + { "gssusesessionccache", sUnsupported, SSHCFG_GLOBAL }, | ||
2418 | + { "gssapiusesessioncredcache", sUnsupported, SSHCFG_GLOBAL }, | ||
2388 | { "passwordauthentication", sPasswordAuthentication, SSHCFG_ALL }, | 2419 | { "passwordauthentication", sPasswordAuthentication, SSHCFG_ALL }, |
2389 | { "kbdinteractiveauthentication", sKbdInteractiveAuthentication, SSHCFG_ALL }, | 2420 | { "kbdinteractiveauthentication", sKbdInteractiveAuthentication, SSHCFG_ALL }, |
2390 | @@ -926,10 +943,22 @@ | 2421 | { "challengeresponseauthentication", sChallengeResponseAuthentication, SSHCFG_GLOBAL }, |
2422 | @@ -944,10 +965,22 @@ | ||
2391 | intptr = &options->gss_authentication; | 2423 | intptr = &options->gss_authentication; |
2392 | goto parse_flag; | 2424 | goto parse_flag; |
2393 | 2425 | ||
@@ -2410,11 +2442,22 @@ Index: b/servconf.c | |||
2410 | case sPasswordAuthentication: | 2442 | case sPasswordAuthentication: |
2411 | intptr = &options->password_authentication; | 2443 | intptr = &options->password_authentication; |
2412 | goto parse_flag; | 2444 | goto parse_flag; |
2445 | @@ -1704,7 +1737,10 @@ | ||
2446 | #endif | ||
2447 | #ifdef GSSAPI | ||
2448 | dump_cfg_fmtint(sGssAuthentication, o->gss_authentication); | ||
2449 | + dump_cfg_fmtint(sGssKeyEx, o->gss_keyex); | ||
2450 | dump_cfg_fmtint(sGssCleanupCreds, o->gss_cleanup_creds); | ||
2451 | + dump_cfg_fmtint(sGssStrictAcceptor, o->gss_strict_acceptor); | ||
2452 | + dump_cfg_fmtint(sGssStoreRekey, o->gss_store_rekey); | ||
2453 | #endif | ||
2454 | #ifdef JPAKE | ||
2455 | dump_cfg_fmtint(sZeroKnowledgePasswordAuthentication, | ||
2413 | Index: b/servconf.h | 2456 | Index: b/servconf.h |
2414 | =================================================================== | 2457 | =================================================================== |
2415 | --- a/servconf.h | 2458 | --- a/servconf.h |
2416 | +++ b/servconf.h | 2459 | +++ b/servconf.h |
2417 | @@ -94,7 +94,10 @@ | 2460 | @@ -97,7 +97,10 @@ |
2418 | int kerberos_get_afs_token; /* If true, try to get AFS token if | 2461 | int kerberos_get_afs_token; /* If true, try to get AFS token if |
2419 | * authenticated with Kerberos. */ | 2462 | * authenticated with Kerberos. */ |
2420 | int gss_authentication; /* If true, permit GSSAPI authentication */ | 2463 | int gss_authentication; /* If true, permit GSSAPI authentication */ |
@@ -2543,7 +2586,7 @@ Index: b/ssh_config.5 | |||
2543 | =================================================================== | 2586 | =================================================================== |
2544 | --- a/ssh_config.5 | 2587 | --- a/ssh_config.5 |
2545 | +++ b/ssh_config.5 | 2588 | +++ b/ssh_config.5 |
2546 | @@ -509,11 +509,38 @@ | 2589 | @@ -508,11 +508,43 @@ |
2547 | The default is | 2590 | The default is |
2548 | .Dq no . | 2591 | .Dq no . |
2549 | Note that this option applies to protocol version 2 only. | 2592 | Note that this option applies to protocol version 2 only. |
@@ -2557,6 +2600,11 @@ Index: b/ssh_config.5 | |||
2557 | +If set, specifies the GSSAPI client identity that ssh should use when | 2600 | +If set, specifies the GSSAPI client identity that ssh should use when |
2558 | +connecting to the server. The default is unset, which means that the default | 2601 | +connecting to the server. The default is unset, which means that the default |
2559 | +identity will be used. | 2602 | +identity will be used. |
2603 | +.It Cm GSSAPIServerIdentity | ||
2604 | +If set, specifies the GSSAPI server identity that ssh should expect when | ||
2605 | +connecting to the server. The default is unset, which means that the | ||
2606 | +expected GSSAPI server identity will be determined from the target | ||
2607 | +hostname. | ||
2560 | .It Cm GSSAPIDelegateCredentials | 2608 | .It Cm GSSAPIDelegateCredentials |
2561 | Forward (delegate) credentials to the server. | 2609 | Forward (delegate) credentials to the server. |
2562 | The default is | 2610 | The default is |
@@ -2587,7 +2635,7 @@ Index: b/sshconnect2.c | |||
2587 | =================================================================== | 2635 | =================================================================== |
2588 | --- a/sshconnect2.c | 2636 | --- a/sshconnect2.c |
2589 | +++ b/sshconnect2.c | 2637 | +++ b/sshconnect2.c |
2590 | @@ -106,9 +106,34 @@ | 2638 | @@ -159,9 +159,34 @@ |
2591 | { | 2639 | { |
2592 | Kex *kex; | 2640 | Kex *kex; |
2593 | 2641 | ||
@@ -2622,9 +2670,9 @@ Index: b/sshconnect2.c | |||
2622 | if (options.ciphers == (char *)-1) { | 2670 | if (options.ciphers == (char *)-1) { |
2623 | logit("No valid ciphers for protocol version 2 given, using defaults."); | 2671 | logit("No valid ciphers for protocol version 2 given, using defaults."); |
2624 | options.ciphers = NULL; | 2672 | options.ciphers = NULL; |
2625 | @@ -136,6 +161,17 @@ | 2673 | @@ -196,6 +221,17 @@ |
2626 | myproposal[PROPOSAL_SERVER_HOST_KEY_ALGS] = | 2674 | if (options.kex_algorithms != NULL) |
2627 | options.hostkeyalgorithms; | 2675 | myproposal[PROPOSAL_KEX_ALGS] = options.kex_algorithms; |
2628 | 2676 | ||
2629 | +#ifdef GSSAPI | 2677 | +#ifdef GSSAPI |
2630 | + /* If we've got GSSAPI algorithms, then we also support the | 2678 | + /* If we've got GSSAPI algorithms, then we also support the |
@@ -2640,10 +2688,10 @@ Index: b/sshconnect2.c | |||
2640 | if (options.rekey_limit) | 2688 | if (options.rekey_limit) |
2641 | packet_set_rekey_limit((u_int32_t)options.rekey_limit); | 2689 | packet_set_rekey_limit((u_int32_t)options.rekey_limit); |
2642 | 2690 | ||
2643 | @@ -145,10 +181,26 @@ | 2691 | @@ -206,10 +242,30 @@ |
2644 | kex->kex[KEX_DH_GRP14_SHA1] = kexdh_client; | ||
2645 | kex->kex[KEX_DH_GEX_SHA1] = kexgex_client; | 2692 | kex->kex[KEX_DH_GEX_SHA1] = kexgex_client; |
2646 | kex->kex[KEX_DH_GEX_SHA256] = kexgex_client; | 2693 | kex->kex[KEX_DH_GEX_SHA256] = kexgex_client; |
2694 | kex->kex[KEX_ECDH_SHA2] = kexecdh_client; | ||
2647 | +#ifdef GSSAPI | 2695 | +#ifdef GSSAPI |
2648 | + if (options.gss_keyex) { | 2696 | + if (options.gss_keyex) { |
2649 | + kex->kex[KEX_GSS_GRP1_SHA1] = kexgss_client; | 2697 | + kex->kex[KEX_GSS_GRP1_SHA1] = kexgss_client; |
@@ -2660,14 +2708,18 @@ Index: b/sshconnect2.c | |||
2660 | + kex->gss_deleg_creds = options.gss_deleg_creds; | 2708 | + kex->gss_deleg_creds = options.gss_deleg_creds; |
2661 | + kex->gss_trust_dns = options.gss_trust_dns; | 2709 | + kex->gss_trust_dns = options.gss_trust_dns; |
2662 | + kex->gss_client = options.gss_client_identity; | 2710 | + kex->gss_client = options.gss_client_identity; |
2663 | + kex->gss_host = gss_host; | 2711 | + if (options.gss_server_identity) { |
2712 | + kex->gss_host = options.gss_server_identity; | ||
2713 | + } else { | ||
2714 | + kex->gss_host = gss_host; | ||
2715 | + } | ||
2664 | + } | 2716 | + } |
2665 | +#endif | 2717 | +#endif |
2666 | + | 2718 | + |
2667 | xxx_kex = kex; | 2719 | xxx_kex = kex; |
2668 | 2720 | ||
2669 | dispatch_run(DISPATCH_BLOCK, &kex->done, kex); | 2721 | dispatch_run(DISPATCH_BLOCK, &kex->done, kex); |
2670 | @@ -243,6 +295,7 @@ | 2722 | @@ -304,6 +360,7 @@ |
2671 | void input_gssapi_hash(int type, u_int32_t, void *); | 2723 | void input_gssapi_hash(int type, u_int32_t, void *); |
2672 | void input_gssapi_error(int, u_int32_t, void *); | 2724 | void input_gssapi_error(int, u_int32_t, void *); |
2673 | void input_gssapi_errtok(int, u_int32_t, void *); | 2725 | void input_gssapi_errtok(int, u_int32_t, void *); |
@@ -2675,7 +2727,7 @@ Index: b/sshconnect2.c | |||
2675 | #endif | 2727 | #endif |
2676 | 2728 | ||
2677 | void userauth(Authctxt *, char *); | 2729 | void userauth(Authctxt *, char *); |
2678 | @@ -258,6 +311,11 @@ | 2730 | @@ -319,6 +376,11 @@ |
2679 | 2731 | ||
2680 | Authmethod authmethods[] = { | 2732 | Authmethod authmethods[] = { |
2681 | #ifdef GSSAPI | 2733 | #ifdef GSSAPI |
@@ -2687,13 +2739,15 @@ Index: b/sshconnect2.c | |||
2687 | {"gssapi-with-mic", | 2739 | {"gssapi-with-mic", |
2688 | userauth_gssapi, | 2740 | userauth_gssapi, |
2689 | NULL, | 2741 | NULL, |
2690 | @@ -564,19 +622,29 @@ | 2742 | @@ -625,19 +687,31 @@ |
2691 | static u_int mech = 0; | 2743 | static u_int mech = 0; |
2692 | OM_uint32 min; | 2744 | OM_uint32 min; |
2693 | int ok = 0; | 2745 | int ok = 0; |
2694 | + const char *gss_host; | 2746 | + const char *gss_host; |
2695 | + | 2747 | + |
2696 | + if (options.gss_trust_dns) | 2748 | + if (options.gss_server_identity) |
2749 | + gss_host = options.gss_server_identity; | ||
2750 | + else if (options.gss_trust_dns) | ||
2697 | + gss_host = get_canonical_hostname(1); | 2751 | + gss_host = get_canonical_hostname(1); |
2698 | + else | 2752 | + else |
2699 | + gss_host = authctxt->host; | 2753 | + gss_host = authctxt->host; |
@@ -2719,7 +2773,7 @@ Index: b/sshconnect2.c | |||
2719 | ok = 1; /* Mechanism works */ | 2773 | ok = 1; /* Mechanism works */ |
2720 | } else { | 2774 | } else { |
2721 | mech++; | 2775 | mech++; |
2722 | @@ -673,8 +741,8 @@ | 2776 | @@ -734,8 +808,8 @@ |
2723 | { | 2777 | { |
2724 | Authctxt *authctxt = ctxt; | 2778 | Authctxt *authctxt = ctxt; |
2725 | Gssctxt *gssctxt; | 2779 | Gssctxt *gssctxt; |
@@ -2730,7 +2784,7 @@ Index: b/sshconnect2.c | |||
2730 | 2784 | ||
2731 | if (authctxt == NULL) | 2785 | if (authctxt == NULL) |
2732 | fatal("input_gssapi_response: no authentication context"); | 2786 | fatal("input_gssapi_response: no authentication context"); |
2733 | @@ -784,6 +852,48 @@ | 2787 | @@ -845,6 +919,48 @@ |
2734 | xfree(msg); | 2788 | xfree(msg); |
2735 | xfree(lang); | 2789 | xfree(lang); |
2736 | } | 2790 | } |
@@ -2794,7 +2848,7 @@ Index: b/sshd.c | |||
2794 | #ifdef LIBWRAP | 2848 | #ifdef LIBWRAP |
2795 | #include <tcpd.h> | 2849 | #include <tcpd.h> |
2796 | #include <syslog.h> | 2850 | #include <syslog.h> |
2797 | @@ -1586,10 +1590,13 @@ | 2851 | @@ -1590,10 +1594,13 @@ |
2798 | logit("Disabling protocol version 1. Could not load host key"); | 2852 | logit("Disabling protocol version 1. Could not load host key"); |
2799 | options.protocol &= ~SSH_PROTO_1; | 2853 | options.protocol &= ~SSH_PROTO_1; |
2800 | } | 2854 | } |
@@ -2808,7 +2862,7 @@ Index: b/sshd.c | |||
2808 | if (!(options.protocol & (SSH_PROTO_1|SSH_PROTO_2))) { | 2862 | if (!(options.protocol & (SSH_PROTO_1|SSH_PROTO_2))) { |
2809 | logit("sshd: no hostkeys available -- exiting."); | 2863 | logit("sshd: no hostkeys available -- exiting."); |
2810 | exit(1); | 2864 | exit(1); |
2811 | @@ -1918,6 +1925,60 @@ | 2865 | @@ -1922,6 +1929,60 @@ |
2812 | /* Log the connection. */ | 2866 | /* Log the connection. */ |
2813 | verbose("Connection from %.500s port %d", remote_ip, remote_port); | 2867 | verbose("Connection from %.500s port %d", remote_ip, remote_port); |
2814 | 2868 | ||
@@ -2869,7 +2923,7 @@ Index: b/sshd.c | |||
2869 | /* | 2923 | /* |
2870 | * We don't want to listen forever unless the other side | 2924 | * We don't want to listen forever unless the other side |
2871 | * successfully authenticates itself. So we set up an alarm which is | 2925 | * successfully authenticates itself. So we set up an alarm which is |
2872 | @@ -2296,12 +2357,61 @@ | 2926 | @@ -2303,6 +2364,48 @@ |
2873 | 2927 | ||
2874 | myproposal[PROPOSAL_SERVER_HOST_KEY_ALGS] = list_hostkey_types(); | 2928 | myproposal[PROPOSAL_SERVER_HOST_KEY_ALGS] = list_hostkey_types(); |
2875 | 2929 | ||
@@ -2918,9 +2972,10 @@ Index: b/sshd.c | |||
2918 | /* start key exchange */ | 2972 | /* start key exchange */ |
2919 | kex = kex_setup(myproposal); | 2973 | kex = kex_setup(myproposal); |
2920 | kex->kex[KEX_DH_GRP1_SHA1] = kexdh_server; | 2974 | kex->kex[KEX_DH_GRP1_SHA1] = kexdh_server; |
2921 | kex->kex[KEX_DH_GRP14_SHA1] = kexdh_server; | 2975 | @@ -2310,6 +2413,13 @@ |
2922 | kex->kex[KEX_DH_GEX_SHA1] = kexgex_server; | 2976 | kex->kex[KEX_DH_GEX_SHA1] = kexgex_server; |
2923 | kex->kex[KEX_DH_GEX_SHA256] = kexgex_server; | 2977 | kex->kex[KEX_DH_GEX_SHA256] = kexgex_server; |
2978 | kex->kex[KEX_ECDH_SHA2] = kexecdh_server; | ||
2924 | +#ifdef GSSAPI | 2979 | +#ifdef GSSAPI |
2925 | + if (options.gss_keyex) { | 2980 | + if (options.gss_keyex) { |
2926 | + kex->kex[KEX_GSS_GRP1_SHA1] = kexgss_server; | 2981 | + kex->kex[KEX_GSS_GRP1_SHA1] = kexgss_server; |
@@ -2935,7 +2990,7 @@ Index: b/sshd_config | |||
2935 | =================================================================== | 2990 | =================================================================== |
2936 | --- a/sshd_config | 2991 | --- a/sshd_config |
2937 | +++ b/sshd_config | 2992 | +++ b/sshd_config |
2938 | @@ -71,6 +71,8 @@ | 2993 | @@ -72,6 +72,8 @@ |
2939 | # GSSAPI options | 2994 | # GSSAPI options |
2940 | #GSSAPIAuthentication no | 2995 | #GSSAPIAuthentication no |
2941 | #GSSAPICleanupCredentials yes | 2996 | #GSSAPICleanupCredentials yes |
@@ -2948,7 +3003,7 @@ Index: b/sshd_config.5 | |||
2948 | =================================================================== | 3003 | =================================================================== |
2949 | --- a/sshd_config.5 | 3004 | --- a/sshd_config.5 |
2950 | +++ b/sshd_config.5 | 3005 | +++ b/sshd_config.5 |
2951 | @@ -424,12 +424,40 @@ | 3006 | @@ -423,12 +423,40 @@ |
2952 | The default is | 3007 | The default is |
2953 | .Dq no . | 3008 | .Dq no . |
2954 | Note that this option applies to protocol version 2 only. | 3009 | Note that this option applies to protocol version 2 only. |