- djm@cvs.openbsd.org 2009/11/19 23:39:50
[session.c] bz#1606: error when an attempt is made to connect to a server with ForceCommand=internal-sftp with a shell session (i.e. not a subsystem session). Avoids stuck client when attempting to ssh to such a service. ok dtucker@
This commit is contained in:
parent
2944082b3f
commit
d6b06a9f39
|
@ -61,6 +61,12 @@
|
||||||
[clientloop.c]
|
[clientloop.c]
|
||||||
fix incorrect exit status when multiplexing and channel ID 0 is recycled
|
fix incorrect exit status when multiplexing and channel ID 0 is recycled
|
||||||
bz#1570 reported by peter.oliver AT eon-is.co.uk; ok dtucker
|
bz#1570 reported by peter.oliver AT eon-is.co.uk; ok dtucker
|
||||||
|
- djm@cvs.openbsd.org 2009/11/19 23:39:50
|
||||||
|
[session.c]
|
||||||
|
bz#1606: error when an attempt is made to connect to a server
|
||||||
|
with ForceCommand=internal-sftp with a shell session (i.e. not a
|
||||||
|
subsystem session). Avoids stuck client when attempting to ssh to such a
|
||||||
|
service. ok dtucker@
|
||||||
|
|
||||||
20091226
|
20091226
|
||||||
- (tim) [contrib/cygwin/Makefile] Install ssh-copy-id and ssh-copy-id.1
|
- (tim) [contrib/cygwin/Makefile] Install ssh-copy-id and ssh-copy-id.1
|
||||||
|
|
23
session.c
23
session.c
|
@ -1,4 +1,4 @@
|
||||||
/* $OpenBSD: session.c,v 1.247 2009/10/06 04:46:40 djm Exp $ */
|
/* $OpenBSD: session.c,v 1.248 2009/11/19 23:39:50 djm Exp $ */
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 1995 Tatu Ylonen <ylo@cs.hut.fi>, Espoo, Finland
|
* Copyright (c) 1995 Tatu Ylonen <ylo@cs.hut.fi>, Espoo, Finland
|
||||||
* All rights reserved
|
* All rights reserved
|
||||||
|
@ -145,6 +145,7 @@ static Session *sessions = NULL;
|
||||||
#define SUBSYSTEM_NONE 0
|
#define SUBSYSTEM_NONE 0
|
||||||
#define SUBSYSTEM_EXT 1
|
#define SUBSYSTEM_EXT 1
|
||||||
#define SUBSYSTEM_INT_SFTP 2
|
#define SUBSYSTEM_INT_SFTP 2
|
||||||
|
#define SUBSYSTEM_INT_SFTP_ERROR 3
|
||||||
|
|
||||||
#ifdef HAVE_LOGIN_CAP
|
#ifdef HAVE_LOGIN_CAP
|
||||||
login_cap_t *lc;
|
login_cap_t *lc;
|
||||||
|
@ -785,17 +786,19 @@ do_exec(Session *s, const char *command)
|
||||||
if (options.adm_forced_command) {
|
if (options.adm_forced_command) {
|
||||||
original_command = command;
|
original_command = command;
|
||||||
command = options.adm_forced_command;
|
command = options.adm_forced_command;
|
||||||
if (IS_INTERNAL_SFTP(command))
|
if (IS_INTERNAL_SFTP(command)) {
|
||||||
s->is_subsystem = SUBSYSTEM_INT_SFTP;
|
s->is_subsystem = s->is_subsystem ?
|
||||||
else if (s->is_subsystem)
|
SUBSYSTEM_INT_SFTP : SUBSYSTEM_INT_SFTP_ERROR;
|
||||||
|
} else if (s->is_subsystem)
|
||||||
s->is_subsystem = SUBSYSTEM_EXT;
|
s->is_subsystem = SUBSYSTEM_EXT;
|
||||||
debug("Forced command (config) '%.900s'", command);
|
debug("Forced command (config) '%.900s'", command);
|
||||||
} else if (forced_command) {
|
} else if (forced_command) {
|
||||||
original_command = command;
|
original_command = command;
|
||||||
command = forced_command;
|
command = forced_command;
|
||||||
if (IS_INTERNAL_SFTP(command))
|
if (IS_INTERNAL_SFTP(command)) {
|
||||||
s->is_subsystem = SUBSYSTEM_INT_SFTP;
|
s->is_subsystem = s->is_subsystem ?
|
||||||
else if (s->is_subsystem)
|
SUBSYSTEM_INT_SFTP : SUBSYSTEM_INT_SFTP_ERROR;
|
||||||
|
} else if (s->is_subsystem)
|
||||||
s->is_subsystem = SUBSYSTEM_EXT;
|
s->is_subsystem = SUBSYSTEM_EXT;
|
||||||
debug("Forced command (key option) '%.900s'", command);
|
debug("Forced command (key option) '%.900s'", command);
|
||||||
}
|
}
|
||||||
|
@ -1783,7 +1786,11 @@ do_child(Session *s, const char *command)
|
||||||
/* restore SIGPIPE for child */
|
/* restore SIGPIPE for child */
|
||||||
signal(SIGPIPE, SIG_DFL);
|
signal(SIGPIPE, SIG_DFL);
|
||||||
|
|
||||||
if (s->is_subsystem == SUBSYSTEM_INT_SFTP) {
|
if (s->is_subsystem == SUBSYSTEM_INT_SFTP_ERROR) {
|
||||||
|
printf("This service allows sftp connections only.\n");
|
||||||
|
fflush(NULL);
|
||||||
|
exit(1);
|
||||||
|
} else if (s->is_subsystem == SUBSYSTEM_INT_SFTP) {
|
||||||
extern int optind, optreset;
|
extern int optind, optreset;
|
||||||
int i;
|
int i;
|
||||||
char *p, *args;
|
char *p, *args;
|
||||||
|
|
Loading…
Reference in New Issue