[comp.lang.perl] chat2.pl/select and character-by-character mode

frechett@spot.Colorado.EDU (-=Runaway Daemon=-) (06/16/91)

I have been messing with chat2.pl and the little select routine
that came with the last release.  I have found that it is a 
simple matter to open a port on a machine and allow someone to telnet 
into that port and grab a pty on my machine with this setup. There are
a couple problems though once this happens besides obvious security 
issues.

The call chat'select() appears to use \n as the signal for pending data.
Unfortunately this puts everything in line by line mode.. It is useable
but painful.  Consider using vi where it won't read your commands until 
you press return and besides that, it echos back everything you type
as you type it, and then the remote end echos it back again as it
receives it as it should normally.. messy.  The way I have it set up
select is trying to listen to the socket (NS) and the pty ($SH) and 
I would like to figure out a way to put it in character at a time 
mode... I can get perl to read one character at a time as it comes in
but I can't seem to get select to do it.. Is there a way?

The next problem is that I am trying to figure out how to make the 
chat routines aware of when $SH closes.  If I have this set up on a 
port of the machine, I would like it to disconnect current connection
and go back to listening for a new one if it sees the process running on
the pty die.  Right now, if I exit 'sh' for instance it will 
just keep listening for output from the socket but for some reason it 
also won't let the process hanging off the pty to die completely 
<defunct> processes and such.. until you do an explicit 
chat'close($SH); which is fine, except that I can't seem to figure out 
what denotes the end of the highest process.  I can't use eof or it 
will close unpredictably somewhere else... like in a subshell of sh.

Lastly, for now, I would like to use chat'open_proc("/bin/csh") but that 
doesn't work.. neither does tcsh.. .. Of course sh works and so does
any other non-real-shell command like, telnet, rlogin etc.. Any way to 
change the default shell?

Thanks for anything that anyone can offer.

	ian

-=Runaway Daemon=-    (UNIXOPS  University of Colorado at Boulder)