Copy Link
Add to Bookmark
Report

Phrack Inc. Volume 03 Issue 30 File 06

eZine's profile picture
Published in 
Phrack Inc
 · 5 years ago

  

==Phrack Inc.==

Volume Three, Issue 30, File #6 of 12

Decnet Hackola : Remote Turist TTY (RTT)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

A Late-Night Creation Of

*Hobbit*

This VMS network frob is yet another "tell"-type thing. This one has an
uncommon feature though: recursion (i.e. you can be connected to some host
and open *another* connection to a third host and it will [attempt to!] "do the
right thing"). Also, you can ^Y out and if you run it again, it will return to
the open connection instead of starting a new one.

_H*


*************************************************************************
$! RTT -- Remote Turist TTY interface. Do @RTT hostname or @RTT area.node
$! to start; this file must exist in the remote machine's default area.
$! You can ^Y out and the network channel will stick around; invoking RTT
$! again will resume the extant process and ignore arguments.
$! If we are a network object, play server, if not, we must be the client.
$! If we are called while already playing server, recurse to the end host.
$! This recursion in theory can happen infinite times. Make damn sure
$! what you call this file and the "task=" spec jive, and that they are the
$! same file, or you will fall victim to very vicious timing screws.
$!
$! Another result of *Hobbit* abusing network file jobs until well past dawn.
$!
$! _H*
$set noon
$if f$mode().eqs."NETWORK".and.p1.eqs."" then $goto srv
$! Talking to a luser, go find the net job
$magic=0 ! assume top level
$if f$trnlnm("nf",,,,,"table_name").nes."" then $goto lread
$sl=f$len(p1)
$dot=f$locate(".",p1) ! area.node
$if sl.eq.dot then $goto nopen ! no dot, treat normally
$q=f$loc("""",p1) ! access control??
$node=f$ext(0,dot,p1) ! area
$dot=dot+1 ! point past it now
$node=node*1024+f$ext(dot,q-dot,p1) ! and pull out the complete node
$rest=""""+f$ext(q,80,p1)+"""" ! superquotify the quotes [yeccchh!]
$p1="''node'''rest'" ! add remains in stringwise [ack barf]
$! We were called with an argument; but if we're network mode, we're *already*
$! a server, so do special things.
$nopen: $if f$mode().eqs."NETWORK" then $magic=1
$! Top-level user process or recursed here: client connect
$open/read/write/err=yuk nf 'p1'::"0=rtt"
$read/time=5/err=yuk nf hprm ! let other end tell us where we got
$prm==hprm ! global prompt str so we resume correctly
$write sys$output "Connection open"
$if magic then $goto m_setup
$lread: $read/prompt="''prm'$ "/end=lclose sys$command line
$write nf line ! send the sucker and go get the stuff
$ltype: $read/time=8/err=tmo/end=lclose nf line
$if line.eqs."%%eoc%%" then $goto lread
$if line.eqs."%%magic%%" then $goto newprm
$write sys$output line
$goto ltype
$newprm: $read nf hprm ! new prompt gets piped in from servers
$prm==hprm ! let us find it
$read nf line ! garbola %%eoc%% -- avoid timing fuckup
$if line.nes."%%eoc%%" then $goto hpe !! oops !!
$goto lread
$tmo: $write sys$output "[Timed out]" ! supposed to bail out on a fuckup
$goto lread ! it doesn't always work, though.
$!
$! Do a special dance when we're recursing
$m_setup: $write nnn "%%magic%%"
$write nnn prm ! notify client end of new connection
$signal ! flush the inbetweens
$goto rread ! and drop to magic server
$!
$srv: ! Normal remote task half
$! This is an unbelievable kludge. You can't just open sys$net: and then
$! have program output go there as well as the control thingies, but you
$! *can* pipe everything to your sys$net-opened-device: and it *works*!
$open/read/write/err=yuk nnn sys$net:
$close sys$output ! netserver.log?
$close sys$error
$magic=0 ! not recursing yet
$! Some handy symbols for the far end
$rtt:==@sys$login:rtt ! make further connects easier
$ncp:==$ncp ! for hacking the network
$signal:==write nnn """%%eoc%%""" ! magic sync string
$write nnn f$trnl("sys$node","lnm$system_table") ! HELO...
$def/pr sys$output nnn: ! the awful kludge is invoked
$def/pr sys$error nnn: ! for error handling too
$!
$! Server loop
$rread: $read/end=rclose nnn line
$if magic then $goto passing
$'line'
$m_cmd_end: $signal ! signal for all completions
$goto rread
$! If we're magically in the middle, handle differently
$passing: $write nf line
$mtype: $read/time=5/err=mclose/end=mclose nf line
$if line.eqs."%%eoc%%" then $goto m_cmd_end
$write nnn line
$goto mtype
$!
$! Closure and error handlers
$! General protocol error catch
$yuk: $write sys$output "Couldn't open network!"
$exit
$! Here if the luser typed ^Z
$lclose: $close nf ! should signal eof at far end
$exit
$! Here if we got hung up on by the client
$rclose: $if magic then $close nf
$close nnn
$stop/id=0
$! Here if we're magic and our remote server exited: tell client whats flying
$mclose: $close nf
$magic=0
$write nnn "%%magic%%"
$write nnn f$trnl("sys$node","lnm$system_table")
$signal
$goto rread
$! Here if we recursed down the line there and didn't see the right things
$hpe: $write sys$output "!!Hairy protocol error!!"
$close nf
$exit
_______________________________________________________________________________

← previous
next →
loading
sending ...
New to Neperos ? Sign Up for free
download Neperos App from Google Play
install Neperos as PWA

Let's discover also

Recent Articles

Recent Comments

Neperos cookies
This website uses cookies to store your preferences and improve the service. Cookies authorization will allow me and / or my partners to process personal data such as browsing behaviour.

By pressing OK you agree to the Terms of Service and acknowledge the Privacy Policy

By pressing REJECT you will be able to continue to use Neperos (like read articles or write comments) but some important cookies will not be set. This may affect certain features and functions of the platform.
OK
REJECT