version 1.18, 2000/06/17 22:52:33 |
version 1.19, 2000/06/18 04:05:02 |
|
|
#include "bufaux.h" |
#include "bufaux.h" |
#include "ssh2.h" |
#include "ssh2.h" |
#include "auth.h" |
#include "auth.h" |
|
#include "auth-options.h" |
|
|
/* types */ |
/* types */ |
|
|
|
|
#define MAX_SESSIONS 10 |
#define MAX_SESSIONS 10 |
Session sessions[MAX_SESSIONS]; |
Session sessions[MAX_SESSIONS]; |
|
|
/* Flags set in auth-rsa from authorized_keys flags. These are set in auth-rsa.c. */ |
|
int no_port_forwarding_flag = 0; |
|
int no_agent_forwarding_flag = 0; |
|
int no_x11_forwarding_flag = 0; |
|
int no_pty_flag = 0; |
|
|
|
/* RSA authentication "command=" option. */ |
|
char *forced_command = NULL; |
|
|
|
/* RSA authentication "environment=" options. */ |
|
struct envstring *custom_environment = NULL; |
|
|
|
/* |
/* |
* Remove local Xauthority file. |
* Remove local Xauthority file. |
*/ |
*/ |
|
|
unsigned int len; |
unsigned int len; |
char *term_modes; /* encoded terminal modes */ |
char *term_modes; /* encoded terminal modes */ |
|
|
|
if (no_pty_flag) |
|
return 0; |
if (s->ttyfd != -1) |
if (s->ttyfd != -1) |
return 0; |
return 0; |
s->term = packet_get_string(&len); |
s->term = packet_get_string(&len); |
|
|
int |
int |
session_x11_req(Session *s) |
session_x11_req(Session *s) |
{ |
{ |
|
if (!no_port_forwarding_flag) { |
|
debug("X11 forwarding disabled in user configuration file."); |
|
return 0; |
|
} |
if (!options.x11_forwarding) { |
if (!options.x11_forwarding) { |
debug("X11 forwarding disabled in server configuration file."); |
debug("X11 forwarding disabled in server configuration file."); |
return 0; |
return 0; |
|
|
return 1; |
return 1; |
} |
} |
|
|
|
int |
|
session_shell_req(Session *s) |
|
{ |
|
/* if forced_command == NULL, the shell is execed */ |
|
char *shell = forced_command; |
|
packet_done(); |
|
s->extended = 1; |
|
if (s->ttyfd == -1) |
|
do_exec_no_pty(s, shell, s->pw); |
|
else |
|
do_exec_pty(s, shell, s->pw); |
|
return 1; |
|
} |
|
|
|
int |
|
session_exec_req(Session *s) |
|
{ |
|
char *command = packet_get_string(&len); |
|
packet_done(); |
|
if (forced_command) { |
|
xfree(command); |
|
command = forced_command; |
|
debug("Forced command '%.500s'", forced_command); |
|
} |
|
s->extended = 1; |
|
if (s->ttyfd == -1) |
|
do_exec_no_pty(s, command, s->pw); |
|
else |
|
do_exec_pty(s, command, s->pw); |
|
if (forced_command == NULL) |
|
xfree(command); |
|
return 1; |
|
} |
|
|
void |
void |
session_input_channel_req(int id, void *arg) |
session_input_channel_req(int id, void *arg) |
{ |
{ |
|
|
*/ |
*/ |
if (c->type == SSH_CHANNEL_LARVAL) { |
if (c->type == SSH_CHANNEL_LARVAL) { |
if (strcmp(rtype, "shell") == 0) { |
if (strcmp(rtype, "shell") == 0) { |
packet_done(); |
success = session_shell_req(s); |
s->extended = 1; |
|
if (s->ttyfd == -1) |
|
do_exec_no_pty(s, NULL, s->pw); |
|
else |
|
do_exec_pty(s, NULL, s->pw); |
|
success = 1; |
|
} else if (strcmp(rtype, "exec") == 0) { |
} else if (strcmp(rtype, "exec") == 0) { |
char *command = packet_get_string(&len); |
success = session_exec_req(s); |
packet_done(); |
|
s->extended = 1; |
|
if (s->ttyfd == -1) |
|
do_exec_no_pty(s, command, s->pw); |
|
else |
|
do_exec_pty(s, command, s->pw); |
|
xfree(command); |
|
success = 1; |
|
} else if (strcmp(rtype, "pty-req") == 0) { |
} else if (strcmp(rtype, "pty-req") == 0) { |
success = session_pty_req(s); |
success = session_pty_req(s); |
} else if (strcmp(rtype, "x11-req") == 0) { |
} else if (strcmp(rtype, "x11-req") == 0) { |