diff options
author | Damien Miller <djm@mindrot.org> | 1999-11-25 00:26:21 +1100 |
---|---|---|
committer | Damien Miller <djm@mindrot.org> | 1999-11-25 00:26:21 +1100 |
commit | 95def09838fc61b37b6ea7cd5c234a465b4b129b (patch) | |
tree | 042744f76f40a326b873cb1c3690a6d7d966bc3e /nchan.c | |
parent | 4d2f15f895f4c795afc008aeff3fd2ceffbc44f4 (diff) | |
download | openssh-git-95def09838fc61b37b6ea7cd5c234a465b4b129b.tar.gz |
- Merged very large OpenBSD source code reformat
- OpenBSD CVS updates
- [channels.c cipher.c compat.c log-client.c scp.c serverloop.c]
[ssh.h sshd.8 sshd.c]
syslog changes:
* Unified Logmessage for all auth-types, for success and for failed
* Standard connections get only ONE line in the LOG when level==LOG:
Auth-attempts are logged only, if authentication is:
a) successfull or
b) with passwd or
c) we had more than AUTH_FAIL_LOG failues
* many log() became verbose()
* old behaviour with level=VERBOSE
- [readconf.c readconf.h ssh.1 ssh.h sshconnect.c sshd.c]
tranfer s/key challenge/response data in SSH_SMSG_AUTH_TIS_CHALLENGE
messages. allows use of s/key in windows (ttssh, securecrt) and
ssh-1.2.27 clients without 'ssh -v', ok: niels@
- [sshd.8]
-V, for fallback to openssh in SSH2 compatibility mode
- [sshd.c]
fix sigchld race; cjc5@po.cwru.edu
Diffstat (limited to 'nchan.c')
-rw-r--r-- | nchan.c | 119 |
1 files changed, 67 insertions, 52 deletions
@@ -1,5 +1,5 @@ #include "includes.h" -RCSID("$Id: nchan.c,v 1.1 1999/10/27 03:42:44 damien Exp $"); +RCSID("$Id: nchan.c,v 1.2 1999/11/24 13:26:22 damien Exp $"); #include "ssh.h" @@ -15,122 +15,131 @@ static void chan_shutdown_read(Channel *c); static void chan_delele_if_full_closed(Channel *c); /* - * EVENTS: update channel input/output states - * execute ACTIONS + * EVENTS update channel input/output states execute ACTIONS */ + /* events concerning the INPUT from socket for channel (istate) */ void -chan_rcvd_oclose(Channel *c){ - switch(c->istate){ +chan_rcvd_oclose(Channel *c) +{ + switch (c->istate) { case CHAN_INPUT_WAIT_OCLOSE: debug("channel %d: INPUT_WAIT_OCLOSE -> INPUT_CLOSED [rcvd OCLOSE]", c->self); - c->istate=CHAN_INPUT_CLOSED; + c->istate = CHAN_INPUT_CLOSED; chan_delele_if_full_closed(c); break; case CHAN_INPUT_OPEN: debug("channel %d: INPUT_OPEN -> INPUT_CLOSED [rvcd OCLOSE, send IEOF]", c->self); chan_shutdown_read(c); chan_send_ieof(c); - c->istate=CHAN_INPUT_CLOSED; + c->istate = CHAN_INPUT_CLOSED; chan_delele_if_full_closed(c); break; default: - debug("protocol error: chan_rcvd_oclose %d for istate %d",c->self,c->istate); + debug("protocol error: chan_rcvd_oclose %d for istate %d", c->self, c->istate); break; } } void -chan_read_failed(Channel *c){ - switch(c->istate){ +chan_read_failed(Channel *c) +{ + switch (c->istate) { case CHAN_INPUT_OPEN: debug("channel %d: INPUT_OPEN -> INPUT_WAIT_DRAIN [read failed]", c->self); chan_shutdown_read(c); - c->istate=CHAN_INPUT_WAIT_DRAIN; + c->istate = CHAN_INPUT_WAIT_DRAIN; break; default: debug("internal error: we do not read, but chan_read_failed %d for istate %d", - c->self,c->istate); + c->self, c->istate); break; } } void -chan_ibuf_empty(Channel *c){ - if(buffer_len(&c->input)){ - debug("internal error: chan_ibuf_empty %d for non empty buffer",c->self); +chan_ibuf_empty(Channel *c) +{ + if (buffer_len(&c->input)) { + debug("internal error: chan_ibuf_empty %d for non empty buffer", c->self); return; } - switch(c->istate){ + switch (c->istate) { case CHAN_INPUT_WAIT_DRAIN: debug("channel %d: INPUT_WAIT_DRAIN -> INPUT_WAIT_OCLOSE [inbuf empty, send IEOF]", c->self); chan_send_ieof(c); - c->istate=CHAN_INPUT_WAIT_OCLOSE; + c->istate = CHAN_INPUT_WAIT_OCLOSE; break; default: - debug("internal error: chan_ibuf_empty %d for istate %d",c->self,c->istate); + debug("internal error: chan_ibuf_empty %d for istate %d", c->self, c->istate); break; } } + /* events concerning the OUTPUT from channel for socket (ostate) */ void -chan_rcvd_ieof(Channel *c){ - switch(c->ostate){ +chan_rcvd_ieof(Channel *c) +{ + switch (c->ostate) { case CHAN_OUTPUT_OPEN: debug("channel %d: OUTPUT_OPEN -> OUTPUT_WAIT_DRAIN [rvcd IEOF]", c->self); - c->ostate=CHAN_OUTPUT_WAIT_DRAIN; + c->ostate = CHAN_OUTPUT_WAIT_DRAIN; break; case CHAN_OUTPUT_WAIT_IEOF: debug("channel %d: OUTPUT_WAIT_IEOF -> OUTPUT_CLOSED [rvcd IEOF]", c->self); - c->ostate=CHAN_OUTPUT_CLOSED; + c->ostate = CHAN_OUTPUT_CLOSED; chan_delele_if_full_closed(c); break; default: - debug("protocol error: chan_rcvd_ieof %d for ostate %d", c->self,c->ostate); + debug("protocol error: chan_rcvd_ieof %d for ostate %d", c->self, c->ostate); break; } } void -chan_write_failed(Channel *c){ - switch(c->ostate){ +chan_write_failed(Channel *c) +{ + switch (c->ostate) { case CHAN_OUTPUT_OPEN: debug("channel %d: OUTPUT_OPEN -> OUTPUT_WAIT_IEOF [write failed]", c->self); chan_send_oclose(c); - c->ostate=CHAN_OUTPUT_WAIT_IEOF; + c->ostate = CHAN_OUTPUT_WAIT_IEOF; break; case CHAN_OUTPUT_WAIT_DRAIN: debug("channel %d: OUTPUT_WAIT_DRAIN -> OUTPUT_CLOSED [write failed]", c->self); chan_send_oclose(c); - c->ostate=CHAN_OUTPUT_CLOSED; + c->ostate = CHAN_OUTPUT_CLOSED; chan_delele_if_full_closed(c); break; default: - debug("internal error: chan_write_failed %d for ostate %d",c->self,c->ostate); + debug("internal error: chan_write_failed %d for ostate %d", c->self, c->ostate); break; } } void -chan_obuf_empty(Channel *c){ - if(buffer_len(&c->output)){ - debug("internal error: chan_obuf_empty %d for non empty buffer",c->self); +chan_obuf_empty(Channel *c) +{ + if (buffer_len(&c->output)) { + debug("internal error: chan_obuf_empty %d for non empty buffer", c->self); return; } - switch(c->ostate){ + switch (c->ostate) { case CHAN_OUTPUT_WAIT_DRAIN: debug("channel %d: OUTPUT_WAIT_DRAIN -> OUTPUT_CLOSED [obuf empty, send OCLOSE]", c->self); chan_send_oclose(c); - c->ostate=CHAN_OUTPUT_CLOSED; + c->ostate = CHAN_OUTPUT_CLOSED; chan_delele_if_full_closed(c); break; default: - debug("internal error: chan_obuf_empty %d for ostate %d",c->self,c->ostate); + debug("internal error: chan_obuf_empty %d for ostate %d", c->self, c->ostate); break; } } + /* - * ACTIONS: should never update c->istate or c->ostate + * ACTIONS: should never update the channel states: c->istate or c->ostate */ static void -chan_send_ieof(Channel *c){ - switch(c->istate){ +chan_send_ieof(Channel *c) +{ + switch (c->istate) { case CHAN_INPUT_OPEN: case CHAN_INPUT_WAIT_DRAIN: packet_start(SSH_MSG_CHANNEL_INPUT_EOF); @@ -138,13 +147,14 @@ chan_send_ieof(Channel *c){ packet_send(); break; default: - debug("internal error: channel %d: cannot send IEOF for istate %d",c->self,c->istate); + debug("internal error: channel %d: cannot send IEOF for istate %d", c->self, c->istate); break; } } static void -chan_send_oclose(Channel *c){ - switch(c->ostate){ +chan_send_oclose(Channel *c) +{ + switch (c->ostate) { case CHAN_OUTPUT_OPEN: case CHAN_OUTPUT_WAIT_DRAIN: chan_shutdown_write(c); @@ -154,34 +164,39 @@ chan_send_oclose(Channel *c){ packet_send(); break; default: - debug("internal error: channel %d: cannot send OCLOSE for ostate %d",c->self,c->istate); + debug("internal error: channel %d: cannot send OCLOSE for ostate %d", c->self, c->istate); break; } } + /* helper */ static void -chan_shutdown_write(Channel *c){ +chan_shutdown_write(Channel *c) +{ debug("channel %d: shutdown_write", c->self); - if(shutdown(c->sock, SHUT_WR)<0) + if (shutdown(c->sock, SHUT_WR) < 0) error("chan_shutdown_write failed for #%d/fd%d: %.100s", - c->self, c->sock, strerror(errno)); + c->self, c->sock, strerror(errno)); } static void -chan_shutdown_read(Channel *c){ +chan_shutdown_read(Channel *c) +{ debug("channel %d: shutdown_read", c->self); - if(shutdown(c->sock, SHUT_RD)<0) + if (shutdown(c->sock, SHUT_RD) < 0) error("chan_shutdown_read failed for #%d/fd%d: %.100s", - c->self, c->sock, strerror(errno)); + c->self, c->sock, strerror(errno)); } static void -chan_delele_if_full_closed(Channel *c){ - if(c->istate==CHAN_INPUT_CLOSED && c->ostate==CHAN_OUTPUT_CLOSED){ +chan_delele_if_full_closed(Channel *c) +{ + if (c->istate == CHAN_INPUT_CLOSED && c->ostate == CHAN_OUTPUT_CLOSED) { debug("channel %d: closing", c->self); channel_free(c->self); } } void -chan_init_iostates(Channel *c){ - c->ostate=CHAN_OUTPUT_OPEN; - c->istate=CHAN_INPUT_OPEN; +chan_init_iostates(Channel *c) +{ + c->ostate = CHAN_OUTPUT_OPEN; + c->istate = CHAN_INPUT_OPEN; } |