- markus@cvs.openbsd.org 2001/03/15 22:07:08
[session.c] pass Session to do_child + KNF
This commit is contained in:
parent
a4c57666b9
commit
86fe8686b9
|
@ -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 $
|
||||||
|
|
90
session.c
90
session.c
|
@ -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 ||
|
||||||
|
|
Loading…
Reference in New Issue