summaryrefslogtreecommitdiff
path: root/ssh.c
diff options
context:
space:
mode:
authorDamien Miller <djm@mindrot.org>2000-08-23 10:46:23 +1000
committerDamien Miller <djm@mindrot.org>2000-08-23 10:46:23 +1000
commitad833b3e65c1887674714d514eb818d862bb499a (patch)
tree16fa75fe42aede072c5d3edac562c2870d1bb0e5 /ssh.c
parentb078567bf5de1dcf12d265d98acb4dc9eba8b325 (diff)
- (djm) Pick up LOGIN_PROGRAM from environment or PATH if not set by headers
- (djm) OpenBSD CVS updates: - deraadt@cvs.openbsd.org 2000/08/18 20:07:23 [ssh.c] accept remsh as a valid name as well; roman@buildpoint.com - deraadt@cvs.openbsd.org 2000/08/18 20:17:13 [deattack.c crc32.c packet.c] rename crc32() to ssh_crc32() to avoid zlib name clash. do not move to libz crc32 function yet, because it has ugly "long"'s in it; oneill@cs.sfu.ca - deraadt@cvs.openbsd.org 2000/08/18 20:26:08 [scp.1 scp.c] -S prog support; tv@debian.org - deraadt@cvs.openbsd.org 2000/08/18 20:50:07 [scp.c] knf - deraadt@cvs.openbsd.org 2000/08/18 20:57:33 [log-client.c] shorten - markus@cvs.openbsd.org 2000/08/19 12:48:11 [channels.c channels.h clientloop.c ssh.c ssh.h] support for ~. in ssh2 - deraadt@cvs.openbsd.org 2000/08/19 15:29:40 [crc32.h] proper prototype - markus@cvs.openbsd.org 2000/08/19 15:34:44 [authfd.c authfd.h key.c key.h ssh-add.1 ssh-add.c ssh-agent.1] [ssh-agent.c ssh-keygen.c sshconnect1.c sshconnect2.c Makefile] [fingerprint.c fingerprint.h] add SSH2/DSA support to the agent and some other DSA related cleanups. (note that we cannot talk to ssh.com's ssh2 agents) - markus@cvs.openbsd.org 2000/08/19 15:55:52 [channels.c channels.h clientloop.c] more ~ support for ssh2 - markus@cvs.openbsd.org 2000/08/19 16:21:19 [clientloop.c] oops - millert@cvs.openbsd.org 2000/08/20 12:25:53 [session.c] We have to stash the result of get_remote_name_or_ip() before we close our socket or getpeername() will get EBADF and the process will exit. Only a problem for "UseLogin yes". - millert@cvs.openbsd.org 2000/08/20 12:30:59 [session.c] Only check /etc/nologin if "UseLogin no" since login(1) may have its own policy on determining who is allowed to login when /etc/nologin is present. Also use the _PATH_NOLOGIN define. - millert@cvs.openbsd.org 2000/08/20 12:42:43 [auth1.c auth2.c session.c ssh.c] Add calls to setusercontext() and login_get*(). We basically call setusercontext() in most places where previously we did a setlogin(). Add default login.conf file and put root in the "daemon" login class. - millert@cvs.openbsd.org 2000/08/21 10:23:31 [session.c] Fix incorrect PATH setting; noted by Markus.
Diffstat (limited to 'ssh.c')
-rw-r--r--ssh.c28
1 files changed, 19 insertions, 9 deletions
diff --git a/ssh.c b/ssh.c
index 58e4d7bd9..39512c5f1 100644
--- a/ssh.c
+++ b/ssh.c
@@ -11,7 +11,7 @@
11 */ 11 */
12 12
13#include "includes.h" 13#include "includes.h"
14RCSID("$OpenBSD: ssh.c,v 1.58 2000/07/16 08:27:22 markus Exp $"); 14RCSID("$OpenBSD: ssh.c,v 1.61 2000/08/20 18:42:40 millert Exp $");
15 15
16#include <openssl/evp.h> 16#include <openssl/evp.h>
17#include <openssl/dsa.h> 17#include <openssl/dsa.h>
@@ -253,8 +253,8 @@ main(int ac, char **av)
253 cp = strrchr(av0, '/') + 1; 253 cp = strrchr(av0, '/') + 1;
254 else 254 else
255 cp = av0; 255 cp = av0;
256 if (strcmp(cp, "rsh") != 0 && strcmp(cp, "ssh") != 0 && 256 if (strcmp(cp, "rsh") && strcmp(cp, "ssh") && strcmp(cp, "rlogin") &&
257 strcmp(cp, "rlogin") != 0 && strcmp(cp, "slogin") != 0) 257 strcmp(cp, "slogin") && strcmp(cp, "remsh"))
258 host = cp; 258 host = cp;
259 259
260 for (optind = 1; optind < ac; optind++) { 260 for (optind = 1; optind < ac; optind++) {
@@ -490,6 +490,9 @@ main(int ac, char **av)
490 pwcopy.pw_passwd = xstrdup(pw->pw_passwd); 490 pwcopy.pw_passwd = xstrdup(pw->pw_passwd);
491 pwcopy.pw_uid = pw->pw_uid; 491 pwcopy.pw_uid = pw->pw_uid;
492 pwcopy.pw_gid = pw->pw_gid; 492 pwcopy.pw_gid = pw->pw_gid;
493#ifdef HAVE_PW_CLASS_IN_PASSWD
494 pwcopy.pw_class = xstrdup(pw->pw_class);
495#endif
493 pwcopy.pw_dir = xstrdup(pw->pw_dir); 496 pwcopy.pw_dir = xstrdup(pw->pw_dir);
494 pwcopy.pw_shell = xstrdup(pw->pw_shell); 497 pwcopy.pw_shell = xstrdup(pw->pw_shell);
495 pw = &pwcopy; 498 pw = &pwcopy;
@@ -871,7 +874,7 @@ ssh_session(void)
871 } 874 }
872 875
873 /* Enter the interactive session. */ 876 /* Enter the interactive session. */
874 return client_loop(have_tty, tty_flag ? options.escape_char : -1); 877 return client_loop(have_tty, tty_flag ? options.escape_char : -1, 0);
875} 878}
876 879
877void 880void
@@ -954,9 +957,16 @@ int
954ssh_session2(void) 957ssh_session2(void)
955{ 958{
956 int window, packetmax, id; 959 int window, packetmax, id;
957 int in = dup(STDIN_FILENO); 960 int in, out, err;
958 int out = dup(STDOUT_FILENO); 961
959 int err = dup(STDERR_FILENO); 962 /* If requested, let ssh continue in the background. */
963 if (fork_after_authentication_flag)
964 if (daemon(1, 1) < 0)
965 fatal("daemon() failed: %.200s", strerror(errno));
966
967 in = dup(STDIN_FILENO);
968 out = dup(STDOUT_FILENO);
969 err = dup(STDERR_FILENO);
960 970
961 if (in < 0 || out < 0 || err < 0) 971 if (in < 0 || out < 0 || err < 0)
962 fatal("dump in/out/err failed"); 972 fatal("dump in/out/err failed");
@@ -972,13 +982,13 @@ ssh_session2(void)
972 packetmax = window/2; 982 packetmax = window/2;
973 } 983 }
974 984
985/*XXX MAXPACK */
975 id = channel_new( 986 id = channel_new(
976 "session", SSH_CHANNEL_OPENING, in, out, err, 987 "session", SSH_CHANNEL_OPENING, in, out, err,
977 window, packetmax, CHAN_EXTENDED_WRITE, xstrdup("client-session")); 988 window, packetmax, CHAN_EXTENDED_WRITE, xstrdup("client-session"));
978 989
979
980 channel_open(id); 990 channel_open(id);
981 channel_register_callback(id, SSH2_MSG_CHANNEL_OPEN_CONFIRMATION, client_init, (void *)0); 991 channel_register_callback(id, SSH2_MSG_CHANNEL_OPEN_CONFIRMATION, client_init, (void *)0);
982 992
983 return client_loop(tty_flag, tty_flag ? options.escape_char : -1); 993 return client_loop(tty_flag, tty_flag ? options.escape_char : -1, id);
984} 994}