Copy Link
Add to Bookmark
Report

Phrack Inc. Volume 03 Issue 30 File 07

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

  

==Phrack Inc.=

Volume Three, Issue 30, File #7 of 12

=-------------------=

VAX/VMS Fake Mail

by Jack T. Tab

=-------------------=


In the August 1986 issue of VAX PROFESSIONAL, the BASIC subroutine that appears
at the end of this text was published. It was not until more than two years
later that DEC included a callable mail interface with VMS 5.x. While the
official version is much more extensive, the routine included here has one
important feature. The ability to have a mail message appear to be from
someone else is a good addition to most "toolkits."

VMS Mail works in two manners. The first is the familiar interactive. The
second is as a network object. In this method, MAIL is invoked by the
NETSERVER.COM command procedure in response to an incoming connect request.
MAIL.EXE is activated as network object 27. The other network objects can be
viewed by using the NCP command SHOW KNOWN OBJECTS. In this mode, MAIL.EXE
operates as a slave process, receiving instructions from the master process.
The master, in most cases, is another process running MAIL.EXE interactively.
The slave process can handle requests to deliver mail to as many recipients as
necessary. Addresses that are not on the same node as the slave process are
forwarded by activating yet another slave process on the target node. The
information sent by the master MAIL to the slave MAIL is quite simple and
straightforward, consisting of a series of strings.

The first string is for the FROM name. This is what makes the subroutine
useful, as it can be anything (i.e. the_Easter_Bunny). The next set of strings
are to whom the mail is to be sent. One address per string, with a null
string, chr(0), terminating the list. The third item is what the receiver(s)
sees in their TO: field. This also can be anything. VMS MAIL can use this
option for its .DIS distribution lists. The final information is the body of
the message. It too is terminated by another null string. The subject of the
mail message is taken from the first line of this text.

The MAIL slave will send back appropriate status messages indicating problems
if they occur. Such as "Addressee Unknown" or VMS and DECnet errors like "Disk
Quota Exceeded" or "Remote Node Not Reachable").

The only privilege that seems necessary is NETMBX. Without it the subroutine
cannot call MAIL as a network object. Our beloved system management resolved
the problem of people pretending to be SYSTEM by installing MAIL with NETMBX
and removing the priv from the student accounts. The subroutine works just as
well with JNET and BITNET as it does with DECNET addresses.


***********************************CUT HERE************************************
1 %TITLE 'MAIL SUBROUTINE'

SUB MAILT( STRING NODE, &
STRING FROM_NAME, &
STRING TO_LIST(), &
STRING TO_SHOW, &
STRING SUBJECT, &
STRING TEXT() )

OPTION TYPE = INTEGER

DECLARE INTEGER FUNCTION &
PUT_MSG

DECLARE STRING FUNCTION &
GET_MSG, &
GET_INPUT

DECLARE INTEGER CONSTANT &
TRUE = -1, &
FALSE = 0
Net_Link_Open = FALSE

Z = POS( NODE + ":" , ":" , 1)
NODE_NAME$ = LEFT$( NODE , Z - 1 )
ON ERROR GOTO Mail_Net_Error
MAIL_CHANNEL = 12
OPEN NODE_NAME$ + '::"27="' AS FILE MAIL_CHANNEL

Net_Link_Open = TRUE

STS = PUT_MSG( FROM_NAME )
IF STS <> 0 THEN
GOTO ERROR_DONE
END IF
RECEIVERS = 0
TO_COUNT = 1

Mail_Recipients:
IF TO_LIST( TO_COUNT ) = "" THEN
GOTO End_Of_Line
END IF
STS = PUT_MSG( EDIT$( TO_LIST( TO_COUNT ) , 32 ) )
IF STS <> 0 THEN
GOTO Error_Done
END IF
GOSUB Errchk
IF LINK_ERR <> 0 THEN
GOTO Error_Done
END IF

IF ( ERRSTS AND 1 ) = 0 THEN
GOTO Error_Done
END IF

TO_COUNT = TO_COUNT + 1
GOTO Mail_Recipients

END_OF_LINE:
STS = PUT_MSG( CHR$(0) )
IF STS <> 0 THEN
GOTO Error_Done
END IF
IF RECEIVERS = 0 THEN
GOTO Mail_Done
END IF

STS = PUT_MSG( TO_SHOW )
IF STS <> 0 THEN
GOTO Error_Done
END IF

STS = PUT_MSG( SUBJECT )
IF STS <> 0 THEN
GOTO Error_Done
END IF

FOR I = 1 UNTIL TEXT(I) = CHR$(255)
STS = PUT_MSG( TEXT(I) )
IF STS <> 0 THEN
GOTO Error_Done
END IF
NEXT I

STS = PUT_MSG( CHR$(0) )
IF STS <> 0 THEN
GOTO Error_Done
END IF
SAVE_COUNT = RECEIVERS
INDEX = 0

Delivery_Check:
GOSUB Errchk
IF LINK_ERR <> 0 THEN
GOTO Error_Done
END IF
INDEX = INDEX + 1
IF INDEX <> SAVE_COUNT THEN
GOTO Delivery_Check
END IF
GOTO Mail_Done

Errchk:
MAIL_STS = ASCII( GET_MSG )
IF LINK_ERR <> 0 THEN
ERRSTS = LINK_ERR
RETURN
END IF
IF ( MAIL_STS AND 1 ) = 1 THEN
Receivers = Receivers + 1
ERRSTS = MAIL_STS
RETURN
END IF

Errmsg:
MAIL_ERR$ = GET_MSG
IF LINK_ERR <> 0 THEN
ERRSTS = LINK_ERR
RETURN
END IF
IF LEN( MAIL_ERR$ ) <> 1 THEN
PRINT MAIL_ERR$
GOTO Errmsg
END IF
IF ASCII( MAIL_ERR$ ) = 0 THEN
RETURN
ELSE
GOTO Errmsg
END IF

DEF INTEGER PUT_MSG( STRING M )
ON ERROR GOTO 1550
MLEN = LEN( M )
MOVE TO # MAIL_CHANNEL , M = MLEN
PUT # MAIL_CHANNEL, COUNT MLEN
PUT_MSG = 0
EXIT DEF

1550 RESUME 1555

1555 PUT_MSG = ERR
END DEF

DEF STRING GET_INPUT( INTEGER C )
EOF = FALSE
ON ERROR GOTO 1650
GET # C
R = RECOUNT
MOVE FROM #C , TEMP$ = R
GET_INPUT = TEMP$
EXIT DEF

1650 RESUME 1655

1655 EOF = TRUE
END DEF

DEF STRING GET_MSG
ON ERROR GOTO 1750
GET # MAIL_CHANNEL
R = RECOUNT
MOVE FROM # MAIL_CHANNEL , TEMP$ = R
GET_MSG = TEMP$
LINK_ERR = 0
EXIT DEF

1750 RESUME

1755 LINK_ERR = ERR
END DEF

Mail_Net_Error:
RESUME 1900

1900 PRINT "%Network communications error."

Error_Done:

Mail_Done:
IF Net_Link_Open THEN
CLOSE MAIL_CHANNEL
END IF

END SUB
***********************************CUT HERE************************************

← 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