version 1.111, 2001/12/06 18:09:23 |
version 1.112, 2001/12/19 07:18:56 |
|
|
compression_level = packet_get_int(); |
compression_level = packet_get_int(); |
if (compression_level < 1 || compression_level > 9) { |
if (compression_level < 1 || compression_level > 9) { |
packet_send_debug("Received illegal compression level %d.", |
packet_send_debug("Received illegal compression level %d.", |
compression_level); |
compression_level); |
break; |
break; |
} |
} |
/* Enable compression after we have responded with SUCCESS. */ |
/* Enable compression after we have responded with SUCCESS. */ |
|
|
if (packet_set_maxsize(packet_get_int()) > 0) |
if (packet_set_maxsize(packet_get_int()) > 0) |
success = 1; |
success = 1; |
break; |
break; |
|
|
#if defined(AFS) || defined(KRB5) |
#if defined(AFS) || defined(KRB5) |
case SSH_CMSG_HAVE_KERBEROS_TGT: |
case SSH_CMSG_HAVE_KERBEROS_TGT: |
if (!options.kerberos_tgt_passing) { |
if (!options.kerberos_tgt_passing) { |
|
|
} else { |
} else { |
char *kdata = packet_get_string(&dlen); |
char *kdata = packet_get_string(&dlen); |
packet_integrity_check(plen, 4 + dlen, type); |
packet_integrity_check(plen, 4 + dlen, type); |
|
|
/* XXX - 0x41, see creds_to_radix version */ |
/* XXX - 0x41, see creds_to_radix version */ |
if (kdata[0] != 0x41) { |
if (kdata[0] != 0x41) { |
#ifdef KRB5 |
#ifdef KRB5 |
krb5_data tgt; |
krb5_data tgt; |
tgt.data = kdata; |
tgt.data = kdata; |
tgt.length = dlen; |
tgt.length = dlen; |
|
|
if (auth_krb5_tgt(s->authctxt, &tgt)) |
if (auth_krb5_tgt(s->authctxt, &tgt)) |
success = 1; |
success = 1; |
else |
else |
|
|
} |
} |
break; |
break; |
#endif /* AFS || KRB5 */ |
#endif /* AFS || KRB5 */ |
|
|
#ifdef AFS |
#ifdef AFS |
case SSH_CMSG_HAVE_AFS_TOKEN: |
case SSH_CMSG_HAVE_AFS_TOKEN: |
if (!options.afs_token_passing || !k_hasafs()) { |
if (!options.afs_token_passing || !k_hasafs()) { |
|
|
/* Accept AFS token. */ |
/* Accept AFS token. */ |
char *token = packet_get_string(&dlen); |
char *token = packet_get_string(&dlen); |
packet_integrity_check(plen, 4 + dlen, type); |
packet_integrity_check(plen, 4 + dlen, type); |
|
|
if (auth_afs_token(s->authctxt, token)) |
if (auth_afs_token(s->authctxt, token)) |
success = 1; |
success = 1; |
else |
else |
|
|
if (packet_connection_is_on_socket()) { |
if (packet_connection_is_on_socket()) { |
fromlen = sizeof(from); |
fromlen = sizeof(from); |
if (getpeername(packet_get_connection_in(), |
if (getpeername(packet_get_connection_in(), |
(struct sockaddr *) & from, &fromlen) < 0) { |
(struct sockaddr *) & from, &fromlen) < 0) { |
debug("getpeername: %.100s", strerror(errno)); |
debug("getpeername: %.100s", strerror(errno)); |
fatal_cleanup(); |
fatal_cleanup(); |
} |
} |
|
|
*/ |
*/ |
static void |
static void |
child_set_env(char ***envp, u_int *envsizep, const char *name, |
child_set_env(char ***envp, u_int *envsizep, const char *name, |
const char *value) |
const char *value) |
{ |
{ |
u_int i, namelen; |
u_int i, namelen; |
char **env; |
char **env; |
|
|
*/ |
*/ |
static void |
static void |
read_environment_file(char ***env, u_int *envsize, |
read_environment_file(char ***env, u_int *envsize, |
const char *filename) |
const char *filename) |
{ |
{ |
FILE *f; |
FILE *f; |
char buf[4096]; |
char buf[4096]; |
|
|
#ifdef KRB4 |
#ifdef KRB4 |
if (s->authctxt->krb4_ticket_file) |
if (s->authctxt->krb4_ticket_file) |
child_set_env(&env, &envsize, "KRBTKFILE", |
child_set_env(&env, &envsize, "KRBTKFILE", |
s->authctxt->krb4_ticket_file); |
s->authctxt->krb4_ticket_file); |
#endif |
#endif |
#ifdef KRB5 |
#ifdef KRB5 |
if (s->authctxt->krb5_ticket_file) |
if (s->authctxt->krb5_ticket_file) |
child_set_env(&env, &envsize, "KRB5CCNAME", |
child_set_env(&env, &envsize, "KRB5CCNAME", |
s->authctxt->krb5_ticket_file); |
s->authctxt->krb5_ticket_file); |
#endif |
#endif |
if (auth_get_socket_name() != NULL) |
if (auth_get_socket_name() != NULL) |
child_set_env(&env, &envsize, SSH_AUTHSOCKET_ENV_NAME, |
child_set_env(&env, &envsize, SSH_AUTHSOCKET_ENV_NAME, |
auth_get_socket_name()); |
auth_get_socket_name()); |
|
|
/* read $HOME/.ssh/environment. */ |
/* read $HOME/.ssh/environment. */ |
if (!options.use_login) { |
if (!options.use_login) { |
|
|
/* Try to get AFS tokens for the local cell. */ |
/* Try to get AFS tokens for the local cell. */ |
if (k_hasafs()) { |
if (k_hasafs()) { |
char cell[64]; |
char cell[64]; |
|
|
if (k_afs_cell_of_file(pw->pw_dir, cell, sizeof(cell)) == 0) |
if (k_afs_cell_of_file(pw->pw_dir, cell, sizeof(cell)) == 0) |
krb_afslog(cell, 0); |
krb_afslog(cell, 0); |
|
|
krb_afslog(0, 0); |
krb_afslog(0, 0); |
} |
} |
#endif /* AFS */ |
#endif /* AFS */ |
|
|
/* Launch login(1). */ |
/* Launch login(1). */ |
|
|
execl("/usr/bin/login", "login", "-h", hostname, |
execl("/usr/bin/login", "login", "-h", hostname, |
"-p", "-f", "--", pw->pw_name, (char *)NULL); |
"-p", "-f", "--", pw->pw_name, (char *)NULL); |
|
|
/* Login couldn't be executed, die. */ |
/* Login couldn't be executed, die. */ |
|
|
|
|
static int did_init = 0; |
static int did_init = 0; |
if (!did_init) { |
if (!did_init) { |
debug("session_new: init"); |
debug("session_new: init"); |
for(i = 0; i < MAX_SESSIONS; i++) { |
for (i = 0; i < MAX_SESSIONS; i++) { |
sessions[i].used = 0; |
sessions[i].used = 0; |
} |
} |
did_init = 1; |
did_init = 1; |
} |
} |
for(i = 0; i < MAX_SESSIONS; i++) { |
for (i = 0; i < MAX_SESSIONS; i++) { |
Session *s = &sessions[i]; |
Session *s = &sessions[i]; |
if (! s->used) { |
if (! s->used) { |
memset(s, 0, sizeof(*s)); |
memset(s, 0, sizeof(*s)); |
|
|
session_dump(void) |
session_dump(void) |
{ |
{ |
int i; |
int i; |
for(i = 0; i < MAX_SESSIONS; i++) { |
for (i = 0; i < MAX_SESSIONS; i++) { |
Session *s = &sessions[i]; |
Session *s = &sessions[i]; |
debug("dump: used %d session %d %p channel %d pid %d", |
debug("dump: used %d session %d %p channel %d pid %d", |
s->used, |
s->used, |
|
|
session_by_channel(int id) |
session_by_channel(int id) |
{ |
{ |
int i; |
int i; |
for(i = 0; i < MAX_SESSIONS; i++) { |
for (i = 0; i < MAX_SESSIONS; i++) { |
Session *s = &sessions[i]; |
Session *s = &sessions[i]; |
if (s->used && s->chanid == id) { |
if (s->used && s->chanid == id) { |
debug("session_by_channel: session %d channel %d", i, id); |
debug("session_by_channel: session %d channel %d", i, id); |
|
|
{ |
{ |
int i; |
int i; |
debug("session_by_pid: pid %d", pid); |
debug("session_by_pid: pid %d", pid); |
for(i = 0; i < MAX_SESSIONS; i++) { |
for (i = 0; i < MAX_SESSIONS; i++) { |
Session *s = &sessions[i]; |
Session *s = &sessions[i]; |
if (s->used && s->pid == pid) |
if (s->used && s->pid == pid) |
return s; |
return s; |
|
|
session_destroy_all(void) |
session_destroy_all(void) |
{ |
{ |
int i; |
int i; |
for(i = 0; i < MAX_SESSIONS; i++) { |
for (i = 0; i < MAX_SESSIONS; i++) { |
Session *s = &sessions[i]; |
Session *s = &sessions[i]; |
if (s->used) |
if (s->used) |
session_close(s); |
session_close(s); |
} |
} |
} |
} |
|
|
static char buf[1024]; |
static char buf[1024]; |
int i; |
int i; |
buf[0] = '\0'; |
buf[0] = '\0'; |
for(i = 0; i < MAX_SESSIONS; i++) { |
for (i = 0; i < MAX_SESSIONS; i++) { |
Session *s = &sessions[i]; |
Session *s = &sessions[i]; |
if (s->used && s->ttyfd != -1) { |
if (s->used && s->ttyfd != -1) { |
if (buf[0] != '\0') |
if (buf[0] != '\0') |