summaryrefslogtreecommitdiff
path: root/session.c
diff options
context:
space:
mode:
authorDamien Miller <djm@mindrot.org>2000-09-05 13:34:53 +1100
committerDamien Miller <djm@mindrot.org>2000-09-05 13:34:53 +1100
commit7b28dc5eb0b4d766ddbf5c1955de7e4edbe50e7c (patch)
treea3f8409e421134c543a49851c5cfd9d62a0455d5 /session.c
parent123cbe8e86b1f6e4c4dc016e76dcac1616971089 (diff)
downloadopenssh-git-7b28dc5eb0b4d766ddbf5c1955de7e4edbe50e7c.tar.gz
20000905
- (djm) Import OpenBSD CVS changes - markus@cvs.openbsd.org 2000/08/31 15:52:24 [Makefile sshd.8 sshd_config sftp-server.8 sftp-server.c] implement a SFTP server. interops with sftp2, scp2 and the windows client from ssh.com - markus@cvs.openbsd.org 2000/08/31 15:56:03 [README.openssh2] sync - markus@cvs.openbsd.org 2000/08/31 16:05:42 [session.c] Wall - markus@cvs.openbsd.org 2000/08/31 16:09:34 [authfd.c ssh-agent.c] add a flag to SSH2_AGENTC_SIGN_REQUEST for future extensions - deraadt@cvs.openbsd.org 2000/09/01 09:25:13 [scp.1 scp.c] cleanup and fix -S support; stevesk@sweden.hp.com - markus@cvs.openbsd.org 2000/09/01 16:29:32 [sftp-server.c] portability fixes - markus@cvs.openbsd.org 2000/09/01 16:32:41 [sftp-server.c] fix cast; mouring@pconline.com - itojun@cvs.openbsd.org 2000/09/03 09:23:28 [ssh-add.1 ssh.1] add missing .El against .Bl. - markus@cvs.openbsd.org 2000/09/04 13:03:41 [session.c] missing close; ok theo - markus@cvs.openbsd.org 2000/09/04 13:07:21 [session.c] fix get_last_login_time order; from andre@van-veen.de - markus@cvs.openbsd.org 2000/09/04 13:10:09 [sftp-server.c] more cast fixes; from mouring@pconline.com - markus@cvs.openbsd.org 2000/09/04 13:06:04 [session.c] set SSH_ORIGINAL_COMMAND; from Leakin@dfw.nostrum.com, bet@rahul.net - (djm) Cleanup after import. Fix sftp-server compilation, Makefile
Diffstat (limited to 'session.c')
-rw-r--r--session.c35
1 files changed, 23 insertions, 12 deletions
diff --git a/session.c b/session.c
index 3678b8f0..d5faf4cf 100644
--- a/session.c
+++ b/session.c
@@ -8,7 +8,7 @@
*/
#include "includes.h"
-RCSID("$OpenBSD: session.c,v 1.31 2000/08/28 03:50:54 deraadt Exp $");
+RCSID("$OpenBSD: session.c,v 1.35 2000/09/04 19:07:21 markus Exp $");
#include "xmalloc.h"
#include "ssh.h"
@@ -113,6 +113,9 @@ extern int startup_pipe;
/* Local Xauthority file. */
static char *xauthfile;
+/* original command from peer. */
+char *original_command = NULL;
+
/* data */
#define MAX_SESSIONS 10
Session sessions[MAX_SESSIONS];
@@ -177,7 +180,7 @@ void
do_authenticated(struct passwd * pw)
{
Session *s;
- int type;
+ int type, fd;
int compression_level = 0, enable_compression_after_reply = 0;
int have_pty = 0;
char *command;
@@ -332,7 +335,9 @@ do_authenticated(struct passwd * pw)
break;
}
strlcat(xauthfile, "/cookies", MAXPATHLEN);
- open(xauthfile, O_RDWR|O_CREAT|O_EXCL, 0600);
+ fd = open(xauthfile, O_RDWR|O_CREAT|O_EXCL, 0600);
+ if (fd >= 0)
+ close(fd);
restore_uid();
fatal_add_cleanup(xauthfile_cleanup_proc, NULL);
success = 1;
@@ -377,6 +382,7 @@ do_authenticated(struct passwd * pw)
packet_integrity_check(plen, 0, type);
}
if (forced_command != NULL) {
+ original_command = command;
command = forced_command;
debug("Forced command '%.500s'", forced_command);
}
@@ -638,6 +644,7 @@ do_login(Session *s)
FILE *f;
char *time_string;
char buf[256];
+ char hostname[MAXHOSTNAMELEN];
socklen_t fromlen;
struct sockaddr_storage from;
struct stat st;
@@ -659,6 +666,10 @@ do_login(Session *s)
}
}
+ /* Get the time and hostname when the user last logged in. */
+ last_login_time = get_last_login_time(pw->pw_uid, pw->pw_name,
+ hostname, sizeof(hostname));
+
/* Record that there was a login on that tty from the remote host. */
record_login(pid, s->tty, pw->pw_name, pw->pw_uid,
get_remote_name_or_ip(), (struct sockaddr *)&from);
@@ -680,12 +691,6 @@ do_login(Session *s)
printf("%s\n", aixloginmsg);
#endif /* WITH_AIXAUTHENTICATE */
- /*
- * Get the time when the user last logged in. 'buf' will be set
- * to contain the hostname the last login was from.
- */
- last_login_time = get_last_login_time(pw->pw_uid, pw->pw_name,
- buf, sizeof(buf));
if (last_login_time != 0) {
time_string = ctime(&last_login_time);
if (strchr(time_string, '\n'))
@@ -911,7 +916,7 @@ do_child(const char *command, struct passwd * pw, const char *term,
const char *display, const char *auth_proto,
const char *auth_data, const char *ttyname)
{
- const char *shell, *hostname, *cp = NULL;
+ const char *shell, *hostname = NULL, *cp = NULL;
char buf[256];
char cmd[1024];
FILE *f = NULL;
@@ -1089,6 +1094,9 @@ do_child(const char *command, struct passwd * pw, const char *term,
child_set_env(&env, &envsize, "TERM", term);
if (display)
child_set_env(&env, &envsize, "DISPLAY", display);
+ if (original_command)
+ child_set_env(&env, &envsize, "SSH_ORIGINAL_COMMAND",
+ original_command);
#ifdef _AIX
{
@@ -1511,6 +1519,7 @@ session_subsystem_req(Session *s)
int
session_x11_req(Session *s)
{
+ int fd;
if (no_x11_forwarding_flag) {
debug("X11 forwarding disabled in user configuration file.");
return 0;
@@ -1555,7 +1564,9 @@ session_x11_req(Session *s)
return 0;
}
strlcat(xauthfile, "/cookies", MAXPATHLEN);
- open(xauthfile, O_RDWR|O_CREAT|O_EXCL, 0600);
+ fd = open(xauthfile, O_RDWR|O_CREAT|O_EXCL, 0600);
+ if (fd >= 0)
+ close(fd);
restore_uid();
fatal_add_cleanup(xauthfile_cleanup_proc, s);
return 1;
@@ -1582,7 +1593,7 @@ session_exec_req(Session *s)
char *command = packet_get_string(&len);
packet_done();
if (forced_command) {
- xfree(command);
+ original_command = command;
command = forced_command;
debug("Forced command '%.500s'", forced_command);
}