[session.c]
     pass Session to do_child + KNF
This commit is contained in:
Ben Lindstrom 2001-03-17 00:32:57 +00:00
parent a4c57666b9
commit 86fe8686b9
2 changed files with 64 additions and 61 deletions

View File

@ -5,6 +5,9 @@
- markus@cvs.openbsd.org 2001/03/15 15:05:59 - markus@cvs.openbsd.org 2001/03/15 15:05:59
[scp.c] [scp.c]
use %lld in printf, ok millert@/deraadt@; report from ssh@client.fi use %lld in printf, ok millert@/deraadt@; report from ssh@client.fi
- markus@cvs.openbsd.org 2001/03/15 22:07:08
[session.c]
pass Session to do_child + KNF
20010315 20010315
- OpenBSD CVS Sync - OpenBSD CVS Sync
@ -4567,4 +4570,4 @@
- Wrote replacements for strlcpy and mkdtemp - Wrote replacements for strlcpy and mkdtemp
- Released 1.0pre1 - Released 1.0pre1
$Id: ChangeLog,v 1.962 2001/03/17 00:10:20 mouring Exp $ $Id: ChangeLog,v 1.963 2001/03/17 00:32:57 mouring Exp $

View File

@ -33,7 +33,7 @@
*/ */
#include "includes.h" #include "includes.h"
RCSID("$OpenBSD: session.c,v 1.59 2001/03/04 01:46:30 djm Exp $"); RCSID("$OpenBSD: session.c,v 1.60 2001/03/15 22:07:08 markus Exp $");
#include "ssh.h" #include "ssh.h"
#include "ssh1.h" #include "ssh1.h"
@ -127,11 +127,7 @@ 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, struct passwd * pw);
void do_exec_no_pty(Session *s, const char *command, struct passwd * pw); void do_exec_no_pty(Session *s, const char *command, struct passwd * pw);
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(const char *command, struct passwd * pw, const char *term,
const char *display, const char *auth_proto,
const char *auth_data, const char *ttyname);
/* import */ /* import */
extern ServerOptions options; extern ServerOptions options;
@ -547,7 +543,7 @@ do_exec_no_pty(Session *s, const char *command, struct passwd * pw)
#endif /* USE_PIPES */ #endif /* USE_PIPES */
/* Do processing for the child (exec command etc). */ /* Do processing for the child (exec command etc). */
do_child(command, pw, NULL, s->display, s->auth_proto, s->auth_data, NULL); do_child(s, command);
/* NOTREACHED */ /* NOTREACHED */
} }
#ifdef HAVE_CYGWIN #ifdef HAVE_CYGWIN
@ -645,8 +641,7 @@ do_exec_pty(Session *s, const char *command, struct passwd * pw)
do_login(s, command); do_login(s, command);
/* Do common processing for the child, such as execing the command. */ /* Do common processing for the child, such as execing the command. */
do_child(command, pw, s->term, s->display, s->auth_proto, do_child(s, command);
s->auth_data, s->tty);
/* NOTREACHED */ /* NOTREACHED */
} }
#ifdef HAVE_CYGWIN #ifdef HAVE_CYGWIN
@ -1012,11 +1007,10 @@ void set_limits_from_userattr(char *user)
* ids, and executing the command or shell. * ids, and executing the command or shell.
*/ */
void void
do_child(const char *command, struct passwd * pw, const char *term, do_child(Session *s, const char *command)
const char *display, const char *auth_proto,
const char *auth_data, const char *ttyname)
{ {
const char *shell, *hostname = NULL, *cp = NULL; const char *shell, *hostname = NULL, *cp = NULL;
struct passwd * pw = s->pw;
char buf[256]; char buf[256];
char cmd[1024]; char cmd[1024];
FILE *f = NULL; FILE *f = NULL;
@ -1025,6 +1019,7 @@ do_child(const char *command, struct passwd * pw, const char *term,
extern char **environ; extern char **environ;
struct stat st; struct stat st;
char *argv[10]; char *argv[10];
int do_xauth = s->auth_proto != NULL && s->auth_data != NULL;
#ifdef WITH_IRIX_PROJECT #ifdef WITH_IRIX_PROJECT
prid_t projid; prid_t projid;
#endif /* WITH_IRIX_PROJECT */ #endif /* WITH_IRIX_PROJECT */
@ -1252,12 +1247,12 @@ do_child(const char *command, struct passwd * pw, const char *term,
get_remote_ipaddr(), get_remote_port(), get_local_port()); get_remote_ipaddr(), get_remote_port(), get_local_port());
child_set_env(&env, &envsize, "SSH_CLIENT", buf); child_set_env(&env, &envsize, "SSH_CLIENT", buf);
if (ttyname) if (s->ttyfd != -1)
child_set_env(&env, &envsize, "SSH_TTY", ttyname); child_set_env(&env, &envsize, "SSH_TTY", s->tty);
if (term) if (s->term)
child_set_env(&env, &envsize, "TERM", term); child_set_env(&env, &envsize, "TERM", s->term);
if (display) if (s->display)
child_set_env(&env, &envsize, "DISPLAY", display); child_set_env(&env, &envsize, "DISPLAY", s->display);
if (original_command) if (original_command)
child_set_env(&env, &envsize, "SSH_ORIGINAL_COMMAND", child_set_env(&env, &envsize, "SSH_ORIGINAL_COMMAND",
original_command); original_command);
@ -1363,62 +1358,66 @@ do_child(const char *command, struct passwd * pw, const char *term,
if (!options.use_login) { if (!options.use_login) {
if (stat(_PATH_SSH_USER_RC, &st) >= 0) { if (stat(_PATH_SSH_USER_RC, &st) >= 0) {
if (debug_flag) if (debug_flag)
fprintf(stderr, "Running %s %s\n", _PATH_BSHELL, _PATH_SSH_USER_RC); fprintf(stderr, "Running %s %s\n", _PATH_BSHELL,
_PATH_SSH_USER_RC);
f = popen(_PATH_BSHELL " " _PATH_SSH_USER_RC, "w"); f = popen(_PATH_BSHELL " " _PATH_SSH_USER_RC, "w");
if (f) { if (f) {
if (auth_proto != NULL && auth_data != NULL) if (do_xauth)
fprintf(f, "%s %s\n", auth_proto, auth_data); fprintf(f, "%s %s\n", s->auth_proto,
s->auth_data);
pclose(f); pclose(f);
} else } else
fprintf(stderr, "Could not run %s\n", _PATH_SSH_USER_RC); fprintf(stderr, "Could not run %s\n",
_PATH_SSH_USER_RC);
} else if (stat(_PATH_SSH_SYSTEM_RC, &st) >= 0) { } else if (stat(_PATH_SSH_SYSTEM_RC, &st) >= 0) {
if (debug_flag) if (debug_flag)
fprintf(stderr, "Running %s %s\n", _PATH_BSHELL, _PATH_SSH_SYSTEM_RC); fprintf(stderr, "Running %s %s\n", _PATH_BSHELL,
_PATH_SSH_SYSTEM_RC);
f = popen(_PATH_BSHELL " " _PATH_SSH_SYSTEM_RC, "w"); f = popen(_PATH_BSHELL " " _PATH_SSH_SYSTEM_RC, "w");
if (f) { if (f) {
if (auth_proto != NULL && auth_data != NULL) if (do_xauth)
fprintf(f, "%s %s\n", auth_proto, auth_data); fprintf(f, "%s %s\n", s->auth_proto,
s->auth_data);
pclose(f); pclose(f);
} else } else
fprintf(stderr, "Could not run %s\n", _PATH_SSH_SYSTEM_RC); fprintf(stderr, "Could not run %s\n",
} else if (options.xauth_location != NULL) { _PATH_SSH_SYSTEM_RC);
} else if (do_xauth && options.xauth_location != NULL) {
/* Add authority data to .Xauthority if appropriate. */ /* Add authority data to .Xauthority if appropriate. */
if (auth_proto != NULL && auth_data != NULL) { char *screen = strchr(s->display, ':');
char *screen = strchr(display, ':');
if (debug_flag) { if (debug_flag) {
fprintf(stderr, fprintf(stderr,
"Running %.100s add %.100s %.100s %.100s\n", "Running %.100s add "
options.xauth_location, display, "%.100s %.100s %.100s\n",
auth_proto, auth_data); options.xauth_location, s->display,
#ifndef NO_X11_UNIX_SOCKETS s->auth_proto, s->auth_data);
if (screen != NULL) if (screen != NULL)
fprintf(stderr, fprintf(stderr,
"Adding %.*s/unix%s %s %s\n", "Adding %.*s/unix%s %s %s\n",
(int)(screen-display), display, (int)(screen - s->display),
screen, auth_proto, auth_data); s->display, screen,
#endif /* NO_X11_UNIX_SOCKETS */ s->auth_proto, s->auth_data);
} }
snprintf(cmd, sizeof cmd, "%s -q -", snprintf(cmd, sizeof cmd, "%s -q -",
options.xauth_location); options.xauth_location);
f = popen(cmd, "w"); f = popen(cmd, "w");
if (f) { if (f) {
fprintf(f, "add %s %s %s\n", display, fprintf(f, "add %s %s %s\n", s->display,
auth_proto, auth_data); s->auth_proto, s->auth_data);
#ifndef NO_X11_UNIX_SOCKETS
if (screen != NULL) if (screen != NULL)
fprintf(f, "add %.*s/unix%s %s %s\n", fprintf(f, "add %.*s/unix%s %s %s\n",
(int)(screen-display), display, (int)(screen - s->display),
screen, auth_proto, auth_data); s->display, screen,
#endif /* NO_X11_UNIX_SOCKETS */ s->auth_proto,
s->auth_data);
pclose(f); pclose(f);
} else { } else {
fprintf(stderr, "Could not run %s\n", fprintf(stderr, "Could not run %s\n",
cmd); cmd);
} }
} }
}
/* Get the last component of the shell name. */ /* Get the last component of the shell name. */
cp = strrchr(shell, '/'); cp = strrchr(shell, '/');
if (cp) if (cp)
@ -1439,9 +1438,10 @@ do_child(const char *command, struct passwd * pw, const char *term,
* Check for mail if we have a tty and it was enabled * Check for mail if we have a tty and it was enabled
* in server options. * in server options.
*/ */
if (ttyname && options.check_mail) { if (s->ttyfd != -1 && options.check_mail) {
char *mailbox; char *mailbox;
struct stat mailstat; struct stat mailstat;
mailbox = getenv("MAIL"); mailbox = getenv("MAIL");
if (mailbox != NULL) { if (mailbox != NULL) {
if (stat(mailbox, &mailstat) != 0 || if (stat(mailbox, &mailstat) != 0 ||