summaryrefslogtreecommitdiffstats
path: root/crypto/openssh/ssh.c
diff options
context:
space:
mode:
Diffstat (limited to 'crypto/openssh/ssh.c')
-rw-r--r--crypto/openssh/ssh.c107
1 files changed, 41 insertions, 66 deletions
diff --git a/crypto/openssh/ssh.c b/crypto/openssh/ssh.c
index 3940dab..57c6274 100644
--- a/crypto/openssh/ssh.c
+++ b/crypto/openssh/ssh.c
@@ -40,7 +40,8 @@
*/
#include "includes.h"
-RCSID("$OpenBSD: ssh.c,v 1.257 2005/12/20 04:41:07 dtucker Exp $");
+RCSID("$OpenBSD: ssh.c,v 1.249 2005/07/30 01:26:16 djm Exp $");
+RCSID("$FreeBSD$");
#include <openssl/evp.h>
#include <openssl/err.h>
@@ -158,13 +159,13 @@ usage(void)
{
fprintf(stderr,
"usage: ssh [-1246AaCfgkMNnqsTtVvXxY] [-b bind_address] [-c cipher_spec]\n"
-" [-D [bind_address:]port] [-e escape_char] [-F configfile]\n"
+" [-D port] [-e escape_char] [-F configfile]\n"
" [-i identity_file] [-L [bind_address:]port:host:hostport]\n"
" [-l login_name] [-m mac_spec] [-O ctl_cmd] [-o option] [-p port]\n"
" [-R [bind_address:]port:host:hostport] [-S ctl_path]\n"
-" [-w tunnel:tunnel] [user@]hostname [command]\n"
+" [user@]hostname [command]\n"
);
- exit(255);
+ exit(1);
}
static int ssh_session(void);
@@ -188,9 +189,6 @@ main(int ac, char **av)
struct servent *sp;
Forward fwd;
- /* Ensure that fds 0, 1 and 2 are open or directed to /dev/null */
- sanitise_stdfd();
-
__progname = ssh_get_progname(av[0]);
init_rng();
@@ -223,7 +221,7 @@ main(int ac, char **av)
pw = getpwuid(original_real_uid);
if (!pw) {
logit("You don't exist, go away!");
- exit(255);
+ exit(1);
}
/* Take a copy of the returned structure. */
pw = pwcopy(pw);
@@ -244,7 +242,7 @@ main(int ac, char **av)
again:
while ((opt = getopt(ac, av,
- "1246ab:c:e:fgi:kl:m:no:p:qstvxACD:F:I:L:MNO:PR:S:TVw:XY")) != -1) {
+ "1246ab:c:e:fgi:kl:m:no:p:qstvxACD:F:I:L:MNO:PR:S:TVXY")) != -1) {
switch (opt) {
case '1':
options.protocol = SSH_PROTO_1;
@@ -340,15 +338,6 @@ again:
if (opt == 'V')
exit(0);
break;
- case 'w':
- if (options.tun_open == -1)
- options.tun_open = SSH_TUNMODE_DEFAULT;
- options.tun_local = a2tun(optarg, &options.tun_remote);
- if (options.tun_local == SSH_TUNID_ERR) {
- fprintf(stderr, "Bad tun device '%s'\n", optarg);
- exit(255);
- }
- break;
case 'q':
options.log_level = SYSLOG_LEVEL_QUIET;
break;
@@ -364,7 +353,7 @@ again:
else {
fprintf(stderr, "Bad escape character '%s'.\n",
optarg);
- exit(255);
+ exit(1);
}
break;
case 'c':
@@ -379,7 +368,7 @@ again:
fprintf(stderr,
"Unknown cipher type '%s'\n",
optarg);
- exit(255);
+ exit(1);
}
if (options.cipher == SSH_CIPHER_3DES)
options.ciphers = "3des-cbc";
@@ -395,7 +384,7 @@ again:
else {
fprintf(stderr, "Unknown mac type '%s'\n",
optarg);
- exit(255);
+ exit(1);
}
break;
case 'M':
@@ -408,7 +397,7 @@ again:
options.port = a2port(optarg);
if (options.port == 0) {
fprintf(stderr, "Bad port '%s'\n", optarg);
- exit(255);
+ exit(1);
}
break;
case 'l':
@@ -422,7 +411,7 @@ again:
fprintf(stderr,
"Bad local forwarding specification '%s'\n",
optarg);
- exit(255);
+ exit(1);
}
break;
@@ -433,7 +422,7 @@ again:
fprintf(stderr,
"Bad remote forwarding specification "
"'%s'\n", optarg);
- exit(255);
+ exit(1);
}
break;
@@ -444,7 +433,7 @@ again:
if ((fwd.listen_host = hpdelim(&cp)) == NULL) {
fprintf(stderr, "Bad dynamic forwarding "
"specification '%.100s'\n", optarg);
- exit(255);
+ exit(1);
}
if (cp != NULL) {
fwd.listen_port = a2port(cp);
@@ -457,7 +446,7 @@ again:
if (fwd.listen_port == 0) {
fprintf(stderr, "Bad dynamic port '%s'\n",
optarg);
- exit(255);
+ exit(1);
}
add_local_forward(&options, &fwd);
xfree(p);
@@ -478,7 +467,7 @@ again:
line = xstrdup(optarg);
if (process_config_line(&options, host ? host : "",
line, "command-line", 0, &dummy) != 0)
- exit(255);
+ exit(1);
xfree(line);
break;
case 's':
@@ -612,6 +601,23 @@ again:
if (options.hostname != NULL)
host = options.hostname;
+ /* Find canonic host name. */
+ if (strchr(host, '.') == 0) {
+ struct addrinfo hints;
+ struct addrinfo *ai = NULL;
+ int errgai;
+ memset(&hints, 0, sizeof(hints));
+ hints.ai_family = options.address_family;
+ hints.ai_flags = AI_CANONNAME;
+ hints.ai_socktype = SOCK_STREAM;
+ errgai = getaddrinfo(host, NULL, &hints, &ai);
+ if (errgai == 0) {
+ if (ai->ai_canonname != NULL)
+ host = xstrdup(ai->ai_canonname);
+ freeaddrinfo(ai);
+ }
+ }
+
/* force lowercase for hostkey matching */
if (options.host_key_alias != NULL) {
for (p = options.host_key_alias; *p; p++)
@@ -654,7 +660,7 @@ again:
original_effective_uid == 0 && options.use_privileged_port,
#endif
options.proxy_command) != 0)
- exit(255);
+ exit(1);
/*
* If we successfully made the connection, load the host private key
@@ -707,7 +713,7 @@ again:
/*
* Now that we are back to our own permissions, create ~/.ssh
- * directory if it doesn't already exist.
+ * directory if it doesn\'t already exist.
*/
snprintf(buf, sizeof buf, "%.100s%s%.100s", pw->pw_dir, strcmp(pw->pw_dir, "/") ? "/" : "", _PATH_SSH_USER_DIR);
if (stat(buf, &st) < 0)
@@ -803,7 +809,8 @@ ssh_init_forwarding(void)
debug("Remote connections from %.200s:%d forwarded to "
"local address %.200s:%d",
(options.remote_forwards[i].listen_host == NULL) ?
- "LOCALHOST" : options.remote_forwards[i].listen_host,
+ (options.gateway_ports ? "*" : "LOCALHOST") :
+ options.remote_forwards[i].listen_host,
options.remote_forwards[i].listen_port,
options.remote_forwards[i].connect_host,
options.remote_forwards[i].connect_port);
@@ -819,7 +826,7 @@ static void
check_agent_present(void)
{
if (options.forward_agent) {
- /* Clear agent forwarding if we don't have an agent. */
+ /* Clear agent forwarding if we don\'t have an agent. */
if (!ssh_agent_present())
options.forward_agent = 0;
}
@@ -1021,7 +1028,7 @@ ssh_control_listener(void)
fatal("ControlPath too long");
if ((control_fd = socket(PF_UNIX, SOCK_STREAM, 0)) < 0)
- fatal("%s socket(): %s", __func__, strerror(errno));
+ fatal("%s socket(): %s\n", __func__, strerror(errno));
old_umask = umask(0177);
if (bind(control_fd, (struct sockaddr*)&addr, addr_len) == -1) {
@@ -1030,12 +1037,12 @@ ssh_control_listener(void)
fatal("ControlSocket %s already exists",
options.control_path);
else
- fatal("%s bind(): %s", __func__, strerror(errno));
+ fatal("%s bind(): %s\n", __func__, strerror(errno));
}
umask(old_umask);
if (listen(control_fd, 64) == -1)
- fatal("%s listen(): %s", __func__, strerror(errno));
+ fatal("%s listen(): %s\n", __func__, strerror(errno));
set_nonblock(control_fd);
}
@@ -1068,33 +1075,6 @@ ssh_session2_setup(int id, void *arg)
packet_send();
}
- if (options.tun_open != SSH_TUNMODE_NO) {
- Channel *c;
- int fd;
-
- debug("Requesting tun.");
- if ((fd = tun_open(options.tun_local,
- options.tun_open)) >= 0) {
- c = channel_new("tun", SSH_CHANNEL_OPENING, fd, fd, -1,
- CHAN_TCP_WINDOW_DEFAULT, CHAN_TCP_PACKET_DEFAULT,
- 0, "tun", 1);
- c->datagram = 1;
-#if defined(SSH_TUN_FILTER)
- if (options.tun_open == SSH_TUNMODE_POINTOPOINT)
- channel_register_filter(c->self, sys_tun_infilter,
- sys_tun_outfilter);
-#endif
- packet_start(SSH2_MSG_CHANNEL_OPEN);
- packet_put_cstring("tun@openssh.com");
- packet_put_int(c->self);
- packet_put_int(c->local_window_max);
- packet_put_int(c->local_maxpacket);
- packet_put_int(options.tun_open);
- packet_put_int(options.tun_remote);
- packet_send();
- }
- }
-
client_session2_setup(id, tty_flag, subsystem_flag, getenv("TERM"),
NULL, fileno(stdin), &command, environ, &ssh_subsystem_reply);
@@ -1159,11 +1139,6 @@ ssh_session2(void)
if (!no_shell_flag || (datafellows & SSH_BUG_DUMMYCHAN))
id = ssh_session2_open();
- /* Execute a local command */
- if (options.local_command != NULL &&
- options.permit_local_command)
- ssh_local_cmd(options.local_command);
-
/* If requested, let ssh continue in the background. */
if (fork_after_authentication_flag)
if (daemon(1, 1) < 0)
OpenPOWER on IntegriCloud