summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBen Lindstrom <mouring@eviladmin.org>2001-06-21 03:13:10 +0000
committerBen Lindstrom <mouring@eviladmin.org>2001-06-21 03:13:10 +0000
commitc85ab8afab0b1f73cda607859f32f0d9558af594 (patch)
treece62dd0d65e5c1a057de9d11544d603e418fa773
parent3af4d4634f66a9325fc76d7c68262bccbb8ce24c (diff)
- markus@cvs.openbsd.org 2001/06/19 12:34:09
[session.c] cleanup forced command handling, from dwd@bell-labs.com
-rw-r--r--ChangeLog5
-rw-r--r--session.c63
2 files changed, 38 insertions, 30 deletions
diff --git a/ChangeLog b/ChangeLog
index e75e3978..a3766b28 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -12,6 +12,9 @@
- markus@cvs.openbsd.org 2001/06/16 08:58:34
[misc.c]
copy pw_expire and pw_change, too.
+ - markus@cvs.openbsd.org 2001/06/19 12:34:09
+ [session.c]
+ cleanup forced command handling, from dwd@bell-labs.com
20010615
- (stevesk) don't set SA_RESTART and set SIGCHLD to SIG_DFL
@@ -5664,4 +5667,4 @@
- Wrote replacements for strlcpy and mkdtemp
- Released 1.0pre1
-$Id: ChangeLog,v 1.1292 2001/06/21 03:11:27 mouring Exp $
+$Id: ChangeLog,v 1.1293 2001/06/21 03:13:10 mouring Exp $
diff --git a/session.c b/session.c
index 65f6bac1..005f7ab1 100644
--- a/session.c
+++ b/session.c
@@ -33,7 +33,7 @@
*/
#include "includes.h"
-RCSID("$OpenBSD: session.c,v 1.89 2001/06/13 09:10:31 markus Exp $");
+RCSID("$OpenBSD: session.c,v 1.90 2001/06/19 12:34:09 markus Exp $");
#include "ssh.h"
#include "ssh1.h"
@@ -128,6 +128,7 @@ int session_setup_x11fwd(Session *s);
void session_close(Session *s);
void do_exec_pty(Session *s, const char *command);
void do_exec_no_pty(Session *s, const char *command);
+void do_exec(Session *s, const char *command);
void do_login(Session *s, const char *command);
#ifdef LOGIN_NEEDS_UTMPX
void do_pre_login(Session *s);
@@ -313,17 +314,7 @@ do_authenticated1(Authctxt *authctxt)
command = NULL;
packet_integrity_check(plen, 0, type);
}
- if (forced_command != NULL) {
- original_command = command;
- command = forced_command;
- debug("Forced command '%.500s'", forced_command);
- }
- if (s->ttyfd != -1)
- do_exec_pty(s, command);
- else
- do_exec_no_pty(s, command);
- if (command != NULL)
- xfree(command);
+ do_exec(s, command);
session_close(s);
return;
@@ -598,6 +589,35 @@ do_pre_login(Session *s)
}
#endif
+/*
+ * This is called to fork and execute a command. If another command is
+ * to be forced, execute that instead.
+ */
+void
+do_exec(Session *s, const char *command)
+{
+ if (forced_command) {
+ original_command = command;
+ command = forced_command;
+ forced_command = NULL;
+ debug("Forced command '%.900s'", command);
+ }
+
+ if (s->ttyfd != -1)
+ do_exec_pty(s, command);
+ else
+ do_exec_no_pty(s, command);
+
+ if (command != NULL)
+ xfree(command);
+
+ if (original_command != NULL) {
+ xfree(original_command);
+ original_command = NULL;
+ }
+}
+
+
/* administrative, login(1)-like work */
void
do_login(Session *s, const char *command)
@@ -1666,13 +1686,8 @@ session_x11_req(Session *s)
int
session_shell_req(Session *s)
{
- /* if forced_command == NULL, the shell is execed */
- char *shell = forced_command;
packet_done();
- if (s->ttyfd == -1)
- do_exec_no_pty(s, shell);
- else
- do_exec_pty(s, shell);
+ do_exec(s, NULL);
return 1;
}
@@ -1682,17 +1697,7 @@ session_exec_req(Session *s)
u_int len;
char *command = packet_get_string(&len);
packet_done();
- if (forced_command) {
- original_command = command;
- command = forced_command;
- debug("Forced command '%.500s'", forced_command);
- }
- if (s->ttyfd == -1)
- do_exec_no_pty(s, command);
- else
- do_exec_pty(s, command);
- if (forced_command == NULL)
- xfree(command);
+ do_exec(s, command);
return 1;
}