version 1.62, 2001/03/20 18:57:04 |
version 1.63, 2001/03/20 19:21:21 |
|
|
void session_set_fds(Session *s, int fdin, int fdout, int fderr); |
void session_set_fds(Session *s, int fdin, int fdout, int fderr); |
void session_pty_cleanup(Session *s); |
void session_pty_cleanup(Session *s); |
void session_proctitle(Session *s); |
void session_proctitle(Session *s); |
void do_exec_pty(Session *s, const char *command, struct passwd * pw); |
void do_exec_pty(Session *s, const char *command); |
void do_exec_no_pty(Session *s, const char *command, struct passwd * pw); |
void do_exec_no_pty(Session *s, const char *command); |
void do_login(Session *s, const char *command); |
void do_login(Session *s, const char *command); |
void do_child(Session *s, const char *command); |
void do_child(Session *s, const char *command); |
|
|
|
|
debug("Forced command '%.500s'", forced_command); |
debug("Forced command '%.500s'", forced_command); |
} |
} |
if (have_pty) |
if (have_pty) |
do_exec_pty(s, command, pw); |
do_exec_pty(s, command); |
else |
else |
do_exec_no_pty(s, command, pw); |
do_exec_no_pty(s, command); |
|
|
if (command != NULL) |
if (command != NULL) |
xfree(command); |
xfree(command); |
|
|
* setting up file descriptors and such. |
* setting up file descriptors and such. |
*/ |
*/ |
void |
void |
do_exec_no_pty(Session *s, const char *command, struct passwd * pw) |
do_exec_no_pty(Session *s, const char *command) |
{ |
{ |
int pid; |
int pid; |
|
|
|
|
* lastlog, and other such operations. |
* lastlog, and other such operations. |
*/ |
*/ |
void |
void |
do_exec_pty(Session *s, const char *command, struct passwd * pw) |
do_exec_pty(Session *s, const char *command) |
{ |
{ |
int fdout, ptyfd, ttyfd, ptymaster; |
int fdout, ptyfd, ttyfd, ptymaster; |
pid_t pid; |
pid_t pid; |
|
|
for (i = 0; i < options.num_subsystems; i++) { |
for (i = 0; i < options.num_subsystems; i++) { |
if(strcmp(subsys, options.subsystem_name[i]) == 0) { |
if(strcmp(subsys, options.subsystem_name[i]) == 0) { |
debug("subsystem: exec() %s", options.subsystem_command[i]); |
debug("subsystem: exec() %s", options.subsystem_command[i]); |
do_exec_no_pty(s, options.subsystem_command[i], s->pw); |
do_exec_no_pty(s, options.subsystem_command[i]); |
success = 1; |
success = 1; |
} |
} |
} |
} |
|
|
packet_done(); |
packet_done(); |
s->extended = 1; |
s->extended = 1; |
if (s->ttyfd == -1) |
if (s->ttyfd == -1) |
do_exec_no_pty(s, shell, s->pw); |
do_exec_no_pty(s, shell); |
else |
else |
do_exec_pty(s, shell, s->pw); |
do_exec_pty(s, shell); |
return 1; |
return 1; |
} |
} |
|
|
|
|
} |
} |
s->extended = 1; |
s->extended = 1; |
if (s->ttyfd == -1) |
if (s->ttyfd == -1) |
do_exec_no_pty(s, command, s->pw); |
do_exec_no_pty(s, command); |
else |
else |
do_exec_pty(s, command, s->pw); |
do_exec_pty(s, command); |
if (forced_command == NULL) |
if (forced_command == NULL) |
xfree(command); |
xfree(command); |
return 1; |
return 1; |