mirror of git://anongit.mindrot.org/openssh.git
- markus@cvs.openbsd.org 2001/06/19 12:34:09
[session.c] cleanup forced command handling, from dwd@bell-labs.com
This commit is contained in:
parent
3af4d4634f
commit
c85ab8afab
|
@ -12,6 +12,9 @@
|
||||||
- markus@cvs.openbsd.org 2001/06/16 08:58:34
|
- markus@cvs.openbsd.org 2001/06/16 08:58:34
|
||||||
[misc.c]
|
[misc.c]
|
||||||
copy pw_expire and pw_change, too.
|
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
|
20010615
|
||||||
- (stevesk) don't set SA_RESTART and set SIGCHLD to SIG_DFL
|
- (stevesk) don't set SA_RESTART and set SIGCHLD to SIG_DFL
|
||||||
|
@ -5664,4 +5667,4 @@
|
||||||
- Wrote replacements for strlcpy and mkdtemp
|
- Wrote replacements for strlcpy and mkdtemp
|
||||||
- Released 1.0pre1
|
- 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 $
|
||||||
|
|
63
session.c
63
session.c
|
@ -33,7 +33,7 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "includes.h"
|
#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 "ssh.h"
|
||||||
#include "ssh1.h"
|
#include "ssh1.h"
|
||||||
|
@ -128,6 +128,7 @@ int session_setup_x11fwd(Session *s);
|
||||||
void session_close(Session *s);
|
void session_close(Session *s);
|
||||||
void do_exec_pty(Session *s, const char *command);
|
void do_exec_pty(Session *s, const char *command);
|
||||||
void do_exec_no_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);
|
void do_login(Session *s, const char *command);
|
||||||
#ifdef LOGIN_NEEDS_UTMPX
|
#ifdef LOGIN_NEEDS_UTMPX
|
||||||
void do_pre_login(Session *s);
|
void do_pre_login(Session *s);
|
||||||
|
@ -313,17 +314,7 @@ do_authenticated1(Authctxt *authctxt)
|
||||||
command = NULL;
|
command = NULL;
|
||||||
packet_integrity_check(plen, 0, type);
|
packet_integrity_check(plen, 0, type);
|
||||||
}
|
}
|
||||||
if (forced_command != NULL) {
|
do_exec(s, command);
|
||||||
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);
|
|
||||||
session_close(s);
|
session_close(s);
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
@ -598,6 +589,35 @@ do_pre_login(Session *s)
|
||||||
}
|
}
|
||||||
#endif
|
#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 */
|
/* administrative, login(1)-like work */
|
||||||
void
|
void
|
||||||
do_login(Session *s, const char *command)
|
do_login(Session *s, const char *command)
|
||||||
|
@ -1666,13 +1686,8 @@ session_x11_req(Session *s)
|
||||||
int
|
int
|
||||||
session_shell_req(Session *s)
|
session_shell_req(Session *s)
|
||||||
{
|
{
|
||||||
/* if forced_command == NULL, the shell is execed */
|
|
||||||
char *shell = forced_command;
|
|
||||||
packet_done();
|
packet_done();
|
||||||
if (s->ttyfd == -1)
|
do_exec(s, NULL);
|
||||||
do_exec_no_pty(s, shell);
|
|
||||||
else
|
|
||||||
do_exec_pty(s, shell);
|
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1682,17 +1697,7 @@ session_exec_req(Session *s)
|
||||||
u_int len;
|
u_int len;
|
||||||
char *command = packet_get_string(&len);
|
char *command = packet_get_string(&len);
|
||||||
packet_done();
|
packet_done();
|
||||||
if (forced_command) {
|
do_exec(s, 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);
|
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue