RNALIB 2.2 beta - part 4 of 4

Paolo Ventafridda venta at otello.sublink.org
Mon Feb 11 06:56:21 AEST 1991


Archive-name: RNALIB-22_b1/part04

---- Cut Here and unpack ----
#!/bin/sh
# this is z-rnalib.04 (part 4 of RNALIB-22_b1)
# do not concatenate these parts, unpack them in order with /bin/sh
# file RNA continued
#
if touch 2>&1 | fgrep '[-amc]' > /dev/null
 then TOUCH=touch
 else TOUCH=true
fi
if test ! -r shar3_seq_.tmp; then
	echo "Please unpack part 1 first!"
	exit 1
fi
(read Scheck
 if test "$Scheck" != 4; then
	echo "Please unpack part $Scheck next!"
	exit 1
 else
	exit 0
 fi
) < shar3_seq_.tmp || exit 1
echo "x - Continuing file RNA"
sed 's/^X//' << 'zXqzXqzXq' >> RNA &&
X============================================================"
Xcat $search
Xecho "============================================================\n"
X}
X
XRevEmpty_Msg() {
X	echo "\
XThere are currently NO members of the \"$argument\" mailing-list!\nSorry.\n"
X}
X
XRevNotAv_Msg() {
X	echo "\
XThe mailing-list of \"$argument\" is not available!\n\
XProbably it is empty, or it is never been used.\n\
XSorry!\n"
XAskLstMan_Msg
X}
X
XRevClosed_Msg() {
X	echo "\n\
XSorry, you can't list subscribed users inside \"$argument\"\n\
Xsince this mailing list is read-protected.\n"
XAskLstMan_Msg 
X}
X
XSigClosed_Msg() {
X	echo "\n\
XSorry, the \"$argument\" mailing list is write-protected:\n\
Xyou can't subscribe yourself automatically.\n\
XPlease consult the list-index informations about subscription\n\
Xwith command: @@ lindex $argument \n"
XAskLstMan_Msg
X}
X
X
XRelease_Msg() {
X	echo "\n\
XRNALIB MAIL SERVER RELEASE 2.2 Revision A (beta)- Feb 1991 , Public Domain SW\n\
XDeveloped by  Paolo Ventafridda and Marco Lorenzini,  Sublink Network,  ITALY\n\
X(venta at i2ack.sublink.org and marlor at gear.sublink.org) (c) 1989,1990,1991\n\n"
Xtest -r $RNADIR/release && grep -v '#' $RNADIR/release
Xtest -r $RNADIR/release || echo "== No system configuration available =="
Xecho
X}
X
X
XSplit_Msg() {
X	echo "\
XThis file will be shipped in $SPLIT_PARTS parts of $N_KBYTES Kbytes each \n\
XYou must unpack them in sequence using \"/bin/sh\" \n"
XNoHuman_Msg
XSignature
X}
X
XNoMail_Msg() {
X     echo "\
XWARNING: requested file \"$argument\"\n\
X(size $N_KBYTES Kbytes) has NOT been sent since it is longer\n\
Xthan ($MAIL_LIMIT Kbytes) permitted by our e-mail policy.\n\n\
XYou should try another deliver with :\n\
X\"@@ send {file} from {library} via uusend\" or\n\
X\"@@ send {file} from {library} via uucp\" or\n\
Xif you could not use uusend or uucp, the smaller:\n\
X\"@@ send {file} from {library} with btoa\".\n\n\
XThe problem has been notified to $POSTMASTER here,\n\
Xand your account hasn't been charged.\n\
XSorry for the inconvenience.\n"
XSignature
X}
X
X# End of messages- 
X
X# --- THE PARSER ---
XParse() {
X# Since we use IFS with "set", we start saving the original one.
XIFSorg=$IFS
Xecho "\nXQT `date '+%d/%m/%y %H:%M:%S'`" >>$LOGFILE
Xtest $DEBUG && echo "Parsing message.."
X# Watch out for rejected mails! Don't waste time..
X
Xrejected=""; grep "X-Mailer: RNALIB" $MBOX_CUT >/dev/null && rejected=1; 
Xif [ "$rejected" = "1" ]; then
X	test $DEBUG && echo "Skip this mail: it was rejected from remote"
X	echo "\n`cat $MBOX_CUT`" >>$REJECTED
X
X	echo "Priority: all\nSubject: RNA delivery rejected\n\n\
XAn RNA delivery was rejected from remote. A copy of the following\n\
Xdiagnostic has been archived inside $REJECTED as usual.\n\
XHere comes the stuff i received....\n\n\
X`cat $MBOX_CUT`\n\n   Your friendly RNALIB DAEMON" | $MAILER $POSTMASTER
X
X	return
Xfi
X
X# get the first From path for a (un)trustable bang-reply ;-)
Xset `head -1 $MBOX_CUT`; UUCP_SENDER=$2
Xecho "BNGFRM $UUCP_SENDER" >>$LOGFILE
X# get the ARPA address of the sender. A real hack upon rfc822..
Xset `wc -l $MBOX_CUT`; end=$1; rline=2
Xuntil [ "$rline" = "$end" ]
Xdo
X	rrline=`sed -n "$rline l" $MBOX_CUT`
X	test -z "$rrline" && rline=$end && break
X	set ""
X#	Under bash the following line is correct, according to Vince.
X#	Will now work under bourne shell anyway.
X#	set -f - $rrline
X#	We use this one instead.
X	set -f $rrline
X	if [ "$1" = "From:" ]; then
X#		Here we are, trying to fit the (in)famous rfc822.
X#		Rule of dumb: if only one field, it's it.	
X		if [ "$#" = "2" ]; then
X			ARPA_SENDER=$2
X#			Retry: if one of the fields contains "<>", it's it.
X#			We just check for the open '<'; we won't consider
X#			drunk mailers. We also assume that <address> is the
X#			last field on the line.
X#		The following line was missing a ` ...
X#		elif [ "`echo $@ | grep '<'" != "" ]; then 
X#
X		elif [ "`echo $@ | grep '<'`" != "" ]; then 
X			IFS="<>" ; set $@; ARPA_SENDER=$2;
X		elif [ "`echo $@ | grep '('`" != "" ]; then 
X#			Back on: if one of the fields contains "()", the other 
X#			is the good one. We assume that (Full Name) is the last
X#			field on the line.
X			IFS="( )" ; set $@; ARPA_SENDER=$2
X		fi
X#		If this is not enough, you'll have to find out yourself
X#		the way to get arpa-addresses on your site. Send a copy of
X#		the object header to me, so that i'll add that
X#		specification for the next rna release.
X#		In any case we reset IFS to its original values.
X#		We had so many problems with this IFS...
X		IFS=$IFSorg
X	fi	
X	test "$1" = "Date:" && REQUEST_DATE="$2 $3 $4"	
X	rline=`expr $rline + 1`
Xdone	
Xecho "ARPFRM $ARPA_SENDER\nREQDATE <$REQUEST_DATE>" >>$LOGFILE
Xtest -z "$ARPA_SENDER" && ARPA_SENDER=$UUCP_SENDER
Xtest -z "$REQUEST_DATE" && REQUEST_DATE="(unknown date)"
X
Xtest $DEBUG && echo "UUCP incoming address: $UUCP_SENDER"
Xtest $DEBUG && echo "ARPA incoming address: $ARPA_SENDER"
Xtest $DEBUG && echo "date of original mail: $REQUEST_DATE"
X
X# Now we know everything we need about our incoming message.
X# Let's see if the rna service is on hold for some reason...
Xtest -r $RNADIR/hold && {
X# ..yep. We touch and fill 'pending'. An empty 'pending' should *never
X# exist. Rna at startup would claim there are pending jobs.
X	touch $RNADIR/pending; echo "`cat $MBOX_CUT`\n" >>$RNADIR/pending
X	Pending_Msg | $MAILER $UUCP_SENDER
X#	In rnalib 2.0 interpreter could toss about external destinations.
X#	This line was in fact needed.
X	destination="DEFAULT"
X	return
X}
X
X
X# get command lines from the message (if any)
Xgrep '@@' $MBOX_CUT >$CMDS
X
X# Some pre-parsing for naughty characters.. If security problems are
X# detected inside command lines belonging to the same message, the WHOLE
X# message is rejected. We never know what these hackers can try nowadays ;-)
X# BEWARE: what we do is searching with egrep for these characters:
X#		* | ? " . /  '
X# I gave up trying to grep also:   `  and \  (egrep gives errors).
X# Using these characters, though, gives no results from the "hacker's point
X# of view". So the stuff should be quite secure right now.
X# %%FIX%%
X# We use 'egrep' here. If you don't have a 'egrep' try using the normal
X# 'grep' with some hacks. The aim is to fit the 'if' condition whenever
X# magic characters are detected inside command lines.
X# If you can't come to anything working, then replace the following line
X# with 'error=0' and watch out for enemies on the net!
Xerror=`egrep -c "\*|\||\?|\"|/|\'" $CMDS`
Xif [ "$error" != "0" ]; then
X	test $DEBUG && echo "WARNING: security problems, mail rejected"
X	echo "SECURITY problems with $ARPA_SENDER" >>$LOGFILE
X	BadChars_Msg $error >$ERRSTAT
X#	We need this so the interpreter will stop arguing about external dest.
X	destination="DEFAULT"
X	return
Xfi
X### Not needed, but let's keep it for a while as a comment
X### IFS=$IFSorg  
Xif test -s $CMDS; then
X	set `wc -l $CMDS`; cmds=$1
X	test $DEBUG && echo "this message contains $cmds command line(s)"
X	echo "CMDLINES $cmds\n`cat $CMDS`" >>$LOGFILE
X	strings="`cat $CMDS`"
X	set -f $strings
X#
X# This is the MAIN PARSE loop
X#
Xerror=0; position=0; action=""; argument=""; destination="DEFAULT"; from="";
Xwith=""; via=""
X#
Xwhile [ "$1" != "" ]
Xdo
X	case $1 in
X		@@) 
X		test $DEBUG && echo "restart of command line"
X		if test $position -gt 0
X		then
X			echo $action $argument $from $destination $with $via >>$CMDLOG
X		fi
X		action=""; argument=""; from="DEFAULT"; destination="DEFAULT"
X		with="DEFAULT"; via="DEFAULT"; position=0
X		shift;;
X
X		[sS][eE][nN][dD]|[Gg][eE][Tt]|sendme|SENDME|take|pick)
X			test $DEBUG && echo "found \"send\""
X			if test $position -eq 0
X			then
X				action=send
X				shift
X				if test -z "$1"
X				then
X					argument="DEFAULT"
X					position=1
X				else
X					if [ "$1" = "@@" ]; then
X						argument="DEFAULT"
X						position=1
X					else
X						argument=$1; position=1
X						shift
X					fi
X				fi	
X			fi;;
X						
X
X		[lL][iI][sS][tT])
X			test $DEBUG && echo "found \"list\""
X			if test $position -eq 0
X			then
X				action=list
X				shift
X				if test -z "$1"
X				then
X					argument="DEFAULT"
X					position=1
X				else
X					if [ "$1" = "@@" ]; then
X						argument="DEFAULT"
X						position=1
X					else
X						argument=$1; position=1
X						shift
X					fi
X				fi	
X			fi;;
X						
X		[Ss][Uu][Bb]scribe|[Ss][Ii][Gg][Nn][Oo][Nn]|[Ss][Uu][Bb]|SIGNUP|signup)
X			test $DEBUG && echo "found \"signon\""
X			if test $position -eq 0
X			then
X				action=signon
X				shift
X				if test -z "$1"
X				then
X					argument="DEFAULT"
X					position=1
X				else
X					if [ "$1" = "@@" ]; then
X						argument="DEFAULT"
X						position=1
X					else
X						argument=$1; position=1
X						shift
X					fi
X				fi	
X			fi;;
X
X		[Uu][Nn][Ss]|[Uu][Nn][Ss]ubscribe|[Ss][Ii][Gg][Nn][Oo][Ff][Ff]|UNSUB|unsub)
X			test $DEBUG && echo "found \"signoff\""
X			if test $position -eq 0
X			then
X				action=signoff
X				shift
X				if test -z "$1"
X				then
X					argument="DEFAULT"
X					position=1
X				else
X					if [ "$1" = "@@" ]; then
X						argument="DEFAULT"
X						position=1
X					else
X						argument=$1; position=1
X						shift
X					fi
X				fi	
X			fi;;
X
X		[Ll][iI][Nn][dD][eE][Xx]|[lL][lL][Ii][sS][tT])
X			test $DEBUG && echo "found \"lindex\""
X			if test $position -eq 0
X			then
X				action=lindex
X				shift
X				if test -z "$1"
X				then
X					argument="DEFAULT"
X					position=1
X				else
X					if [ "$1" = "@@" ]; then
X						argument="DEFAULT"
X						position=1
X					else
X						argument=$1; position=1
X						shift
X					fi
X				fi	
X			fi;;
X
X		[Ff]ind[Mm]e|[Ll]ist[Mm]e|[Ww]here)
X			test $DEBUG && echo "found \"findme\""
X			if test $position -eq 0
X			then
X				action=findme
X				shift
X				if test -z "$1"
X				then
X					argument="DEFAULT"
X					position=1
X				else
X					if [ "$1" = "@@" ]; then
X						argument="DEFAULT"
X						position=1
X					else
X						argument=$1; position=1
X						shift
X					fi
X				fi	
X			fi;;
X
X		[Rr][ee][Vv][Ii][Ee][Ww]|[Mm]embers)
X			test $DEBUG && echo "found \"review\""
X			if test $position -eq 0
X			then
X				action=review
X				shift
X				if test -z "$1"
X				then
X					argument="DEFAULT"
X					position=1
X				else
X					if [ "$1" = "@@" ]; then
X						argument="DEFAULT"
X						position=1
X					else
X						argument=$1; position=1
X						shift
X					fi
X				fi	
X			fi;;
X
X		[Rr]elease|[Vv]ersion|RELEASE)
X			test $DEBUG && echo "found \"release\""
X			if test $position -eq 0
X			then
X				action=release
X				shift
X				if test -z "$1"
X				then
X					argument="DEFAULT"
X					position=1
X				else
X					if [ "$1" = "@@" ]; then
X						argument="DEFAULT"
X						position=1
X					else
X						argument=$1; position=1
X						shift
X					fi
X				fi	
X			fi;;
X
X		[iI][nN][dD][eE][xX])
X			test $DEBUG && echo "found \"index\""
X			if test $position -eq 0
X			then
X				action=index
X				shift
X				if test -z "$1"
X				then
X					argument="DEFAULT"
X					position=1
X				else
X					if [ "$1" = "@@" ]; then
X						argument="DEFAULT"
X						position=1
X					else
X						argument=$1; position=1
X						shift
X					fi
X				fi	
X			fi;;
X
X		[fF][iI][nN][dD]|[Ss][Ee][Aa][Rr][Cc][Hh])
X			test $DEBUG && echo "found \"find\""
X			if test $position -eq 0
X			then
X				action=find
X				shift
X				if test -z "$1"
X				then
X					argument="DEFAULT"
X					position=1
X				else
X					if [ "$1" = "@@" ]; then
X						argument="DEFAULT"
X						position=1
X					else
X						argument=$1; position=1
X						shift
X					fi
X				fi	
X			fi;;
X
X		[hH][eE][lL][pP]|hilfe|HILFE|aiuto|AIUTO|aled|ALED|[Ii]nfo)
X			test $DEBUG && echo "found \"help\""
X			if test $position -eq 0
X			then
X				action=help
X				shift
X				if test -z "$1"
X				then
X					argument="DEFAULT"
X					position=1
X				else
X					if [ "$1" = "@@" ]; then
X						argument="DEFAULT"
X						position=1
X					else
X						argument=$1; position=1
X						shift
X					fi
X				fi	
X			fi;;
X
X		[cC][Rr][Ee][Dd][Ii][Tt][Ss]|[cC][Rr][Ee][Dd][Ii][Tt])
X			test $DEBUG && echo "found \"credits\""
X			if test $position -eq 0
X			then
X				action=credits
X				shift
X				if test -z "$1"
X				then
X					argument="DEFAULT"
X					position=1
X				else
X					if [ "$1" = "@@" ]; then
X						argument="DEFAULT"
X						position=1
X					else
X						argument=$1; position=1
X						shift
X					fi
X				fi	
X			fi;;
X
X						
X		[sS][pP][lL][iI][tT])
X			test $DEBUG && echo "found \"split\""
X			if test $position -eq 0
X			then
X				action=split
X				shift
X				if test -z "$1"
X				then
X					argument="DEFAULT"
X					position=1
X				else
X					if [ "$1" = "@@" ]; then
X						argument="DEFAULT"
X						position=1
X					else
X						argument=$1; position=1
X						shift
X					fi
X				fi	
X			fi;;
X			
X
X		[fF][rR][oO][mM]|inside|[iI][nN]|[Pp][Ww]|[Pp]assword)
X			test $DEBUG && echo "found \"from\""
X			shift
X			if test "$1"
X			then
X			    test "$1" != "@@" && from=$1 && shift
X			fi;;
X			
X		[Tt][Oo]|[tT][oO]:)	
X			test $DEBUG && echo "found \"to\""
X			shift
X			if test "$1"
X			then
X			    test "$1" != "@@" && destination=$1 && shift
X			fi;;
X
X		[Ww][Ii][Tt][Hh]|using|USING)	
X			test $DEBUG && echo "found \"with\""
X			shift
X			if test "$1"
X			then
X			    test "$1" != "@@" && with=$1 && shift
X			fi;;
X
X		[vV][iI][aA]|over|OVER|through|THROUGH)	
X			test $DEBUG && echo "found \"via\""
X			shift
X			if test "$1"
X			then
X			    test "$1" != "@@" && via=$1 && shift
X			fi;;
X
X#		Warning: read "RRJP" chapter inside OPER.GUIDE!
X#		This command is a potential system security hole!
X		exec)
X			test $DEBUG && echo "found \"exec\""
X			if test $position -eq 0
X			then
X				action=exec
X				shift
X				if test -z "$1"
X				then
X					argument="DEFAULT"
X					position=1
X				else
X					if [ "$1" = "@@" ]; then
X						argument="DEFAULT"
X						position=1
X					else
X						argument=$1; position=1
X						shift
X					fi
X				fi	
X			fi;;
X
X
X#		These words are skipped if found before a @@ or after
X#		a valid argument shift. 
X		*[Pp]lease*|hello|do|[Ss]ubject:|[Aa]ction:)
X			test $DEBUG &&	echo "junk \"$1\" skipped"
X			shift;;
X
X		*)
X			test $DEBUG &&	echo "unknown command: \"$1\""
X			echo "\nParser error: unknown command \"$1\"" >>$ERRSTAT
X			error=1
X			;;
X	esac			
X
X	if test $error -gt 0
X	then
X		test $DEBUG && echo "looking for a new command line"
X		while [ "$1" != "@@" ]
X		do
X			test -z "$1" && test $DEBUG && echo "no more command lines in this message"
X			test -z "$1" && break
X			shift
X		done
X		error=0; position=0
X		test $DEBUG &&	echo "found a new command line"
X	fi
X
X
X# end while
Xdone
X
Xif test $position -gt 0
Xthen
X	echo $action $argument $from $destination $with $via>>$CMDLOG
Xfi
X		
X# these three lines refer to the test $CMDS at the beginning of parse()
X
Xelse  
Xdestination="DEFAULT"
Xtest $DEBUG && echo "this message does not contain any command line"
Xfi
X
X}	
X
X# --- THE INTERPRETER ---
X
XInterp() {
X
X# If pathsizing is activated, look for credits.. 
Xtest -n "$PATHSIZE" && {
X	if [ "$STRINGS" != "" ]; then 
X		$STRINGS $PATHSIZE > $TMPDIR/pathstr
X		cat $TMPDIR/pathstr > $PATHSIZE
X	fi
X	if [ "$destination" != "DEFAULT" ]; then
X		UUCP_DESTIN=$destination
X		credit="`Check_PathSize $UUCP_DESTIN`"
X		test $DEBUG && echo "External destination old credits=$credit"
X	else
X		credit="`Check_PathSize $UUCP_SENDER`"
X		test $DEBUG && echo "Default destination old credits=$credit"
X	fi
X	if [ "$credit" = "UNLIMITED" ]; then
X		test $DEBUG && echo "This path is marked UNLIMITED and though has no limits."
X		echo "This path is unlimited" >> $LOGFILE
X	else
X	if [ "$credit" = "" ]; then
X		test $DEBUG && echo "This path does not appear inside pathsize"
X#		Unknown path inside pathsize:
X		if [ "$CREDIT" = "0" ]; then
X#			New paths need to subscribe!
X			test $DEBUG && echo "New paths need to subscribe here!"
X			echo "New path: needs to subscribe!" >> $LOGFILE
X			SubScribe_Msg | $MAILER $UUCP_SENDER
X			rejected=1
X		fi
X	elif [ "$credit" -le "0" ]; then
X		test $DEBUG && echo "No credits for this path (value=$credit)"
X		rejected=1
X		echo "No more credits for this account" >> $LOGFILE
X		NoCredit_Msg | $MAILER $UUCP_SENDER
X	fi
X	fi
X}
X
Xtest $DEBUG && echo "Interpreter: \c"
X
Xif [ "$rejected" = "1" ]; then
X	test $DEBUG && echo "Remote rejected or no-credits path: skipping."
X	echo "Message from $ARPA_SENDER discarded" >>$LOGFILE
X	return;
Xfi
X
X#  test -s $RNADIR/hold && {
X#  This ^^ test (wrong) in rna 2.0 was giving a lot of troubles...
Xtest -r $RNADIR/hold && {
X	test $DEBUG && echo "holding message as pending job"
X	echo "HOLDON $ARPA_SENDER" >>$LOGFILE
X	return;
X}
X
X# First we check if the sender is blacklisted. 
Xif [ "`BlackList`" != "" ]; then
X	test $DEBUG && echo "origin is blacklisted!\nDiagnostic: `BlackList`"
X	echo "BLACKLISTED $ARPA_SENDER" >>$LOGFILE
X	Headers_Msg >>$OUTFILE
X	Deliver_Msg >>$OUTFILE
X	echo "\nWARNING, BLACKLIST PROBLEMS!\n`BlackList`\n" >>$OUTFILE
X	BlackListed_Msg >>$OUTFILE
X	YourMail_Msg >>$OUTFILE
X	NoHuman_Msg >>$OUTFILE
X	Mail_File
X#	I'm done with this message; next one, please..
X	return
Xfi
X
X# Then we check if the sender used "to" field with authorization
Xif [ "$destination" != "DEFAULT" ]; then
X	test $DEBUG && echo "external destination for <$destination>\nChecking for privileges...\c"
X	if test -z "`ToCheck`"; then
X		test $DEBUG && echo "NO privileges. Request denied!"
X		echo "EXTDENIED $ARPA_SENDER" >>$LOGFILE
X		Headers_Msg >>$OUTFILE
X		Deliver_Msg >>$OUTFILE
X		echo "\nWARNING: no privilege for external destinations\n" >>$OUTFILE
X		NoTo_Msg >>$OUTFILE
X		YourMail_Msg >>$OUTFILE
X		NoHuman_Msg >>$OUTFILE
X		Mail_File
X#		I'm done with this message; next one, please..
X		return
X	fi
Xtest $DEBUG && echo "OK, origin is authorized!\nDiagnostic: `ToCheck`"
Xecho "EXTACCEPT $ARPA_SENDER" >>$LOGFILE
Xfi
X
X# And now we check if the parser reported errors..
Xif test -s $ERRSTAT; then
X	test $DEBUG && echo "Errors were detected by the parser.\nNotify origin and skip this message."
X	echo "Parser rejects: $ARPA_SENDER" >>$LOGFILE
X	Headers_Msg >>$OUTFILE
X	Deliver_Msg >>$OUTFILE
X	cat $ERRSTAT >>$OUTFILE
X	Syntax_Msg >>$OUTFILE
X	NoHuman_Msg >>$OUTFILE
X	Mail_File
X#	I'm done with this message; next one, please..
X	return
Xfi
X
X# Work for us?
Xif test -s $CMDLOG; then
X	set `wc -l $CMDLOG`; cmds=$1
X	test $DEBUG && echo "working on $cmds valid request(s)"
X	echo "CMDVALID $cmds" >>$LOGFILE
X# Indentation here is simply forgotten..
X# Following two lines are very important:
Xstrings="`cat $CMDLOG`"
Xset -f $strings
Xaction=""; argument=""; destination=""; via=""; with=""; tok=""
X#
X# * INTERPRETER MAIN LOOP *
X# We parse standard 6-fields command lines whose fields are
X# <action> <argument> <from-lib> <destination> <with> <via>
X# These lines are generated by the Parser, and can be really different
X# from the user request; content usually is sortof tokenized.
X# 
Xwhile [ "$1" != "" ]
Xdo
X
Xaction=$1; shift; argument=$1; shift; from=$1; shift; destination=$1
Xshift; with=$1; shift; via=$1
Xecho "TOKEN $action $argument $from $destination $with $via" >>$LOGFILE
X
Xrm -f $OUTFILE 2>/dev/null
X# the following bracket starts the restricted environment of the interpreter:
X# since we are using a streamed handling of a "cat", we *need to be sure that
X# no procedure is executed within the same environment; so status variables
X# won't change and RNA won't loose control of its job. Basically, the main
X# effect of such lack is a message like "RNA: cannot shift" . Which takes
X# RNA to forget about any command line - and any subsequent mail - aside the
X# very first one of the very first income mail. 
X(
Xtest $DEBUG && Reference_Msg
XHeaders_Msg >$OUTFILE 
X
Xcase $action in
X
Xsplit)
X      test $SPLIT || { echo "N" >> $SPLITLOG; return; } &&
X      if [ "$argument" -ge "$MIN_SPLIT" ] && [ "$argument" -le "$MAX_SPLIT" ]; then
X	  N_KBYTES=$argument
X      else
X	  N_KBYTES=$DEF_SPLIT
X	  test $DEBUG && echo "The dimension for splitting is not permitted: setting default"
X      fi
X      echo $N_KBYTES >>$SPLITLOG
X      test $DEBUG && echo "This file will be split in parts of $N_KBYTES Kbytes"
X      echo "This file will be split in parts of $N_KBYTES Kbytes" >>$LOGFILE
X      ;;
X
Xsend)	
X	Deliver_Msg >>$OUTFILE
X	if [ "$argument" = "DEFAULT" ]; then
X		test $DEBUG && echo "Missing argument for \"send\""
X		echo "\nERROR: command \"send\" requires an argument!\n" >>$OUTFILE
X		Syntax_Msg >>$OUTFILE
X		NoHuman_Msg >>$OUTFILE
X		Mail_File
X#		I'm done with this message; next one, please..
X		return
X	fi
X	Reference_Msg >>$OUTFILE
X#	Let's see if library and file do really exist
X	fname=""; fname="`GetFile $argument $from`" 
X	if [ "$fname" != "" ]; then
X
X#	If we are here, file/lib exists , "to" is ok
X#	(if there's one), so we may try to ship the stuff.
X#       We need to know HOW, first!
X
X# Check the field "via". Sorry for the bad indentation. We all need
X# 160 columns monitors nowadays ;-)
X
Xcase $via in
X
Xuusend|UUSEND|Uusend)
X	With_Type
X	viasped="NO_MAIL"
X	Convert_File
X	Cut_Address
X	Ship_Msg >> $OUTFILE
X	test $DEBUG && echo "Now sending file with uusend to :$UUCP_HOST"
X	echo "File sent: $argument via $via to: $UUCP_SENDER">>$LOGFILE
X# if you don't want to 'bill' uusend shippings, comment next line
X	test -n "$PATHSIZE" && Bill $fname
X	$UUSEND -r -f -m 666 $fname $UUCP_HOST$PUBDIR"/"$argument ;; 
X
Xuucp|UUCP|Uucp)
X	With_Type
X	viasped="NO_MAIL"
X	Convert_File
X	Cut_Address
X	Ship_Msg >> $OUTFILE
X	test $DEBUG && echo "Now send file using uucp to :$UUCP_HOST"
X	echo "File sent: $argument via $via to: $UUCP_SENDER">>$LOGFILE
X# if you don't want to 'bill' uucp shippings, comment next line
X	test -n "$PATHSIZE" && Bill $fname
X	$UUCP -r -C $fname $UUCP_HOST$PUBDIR"/"$argument ;;
X
XDEFAULT|default|mail|\
XMAIL|Mail|email|EMAIL|E-Mail|\
Xe-mail|E-MAIL)
X	test $DEBUG && echo "Now send file using e-mail to :$UUCP_SENDER"
X	With_Type
X	viasped=""
X	Convert_File 
X	echo "File sent: $argument via $via to: $UUCP_SENDER">>$LOGFILE
X	;;
X
X*)
X	via="DEFAULT"
X	With_Type
X	viasped=""
X	Convert_File
X	ViaError_Msg >> $OUTFILE
X	test $DEBUG && echo "Now send file using e-mail to :$UUCP_SENDER"
X	echo "File sent: $argument via $via to: $UUCP_SENDER">>$LOGFILE
X	
Xesac
X
X
X	else
X#	Something wrong with object file, Scotland Yards investigates..
X		if [ "`GetDir $from`" = "" ]; then 
X			test $DEBUG && echo "Nonexistent library: \"$from\""
X			echo "NOLIBRARY $from" >>$LOGFILE
X			NoLibrary_Msg >>$OUTFILE 
X		elif [ "`GetFile $argument $from`" = "" ]; then
X			test $DEBUG && echo "Nonexistent file: \"$argument\" inside library \"$from\""
X			echo "NOFILE $argument" >>$LOGFILE
X			NoFile_Msg $from $argument >>$OUTFILE
X		else
X			CantAccess_Msg >>$OUTFILE
X			echo "WARNING cannot access \"$argument\" from \"$from\"" >>$LOGFILE
X			test $DEBUG && echo "WARNING: cannot open \"`GetFile $argument $from`\""
X		fi
X	fi
X	Mail_File ;; 
X		
Xlist)	Deliver_Msg >>$OUTFILE
X	Reference_Msg >>$OUTFILE
X	ListLib $argument >>$OUTFILE
X	echo "\nPLEASE use command \"index\" to get more details\n\
X	       on library: $argument">>$OUTFILE
X	echo "Command executed: list $argument : $ARPA_SENDER" >>$LOGFILE
X	Mail_File ;;
X
Xindex)	Deliver_Msg >>$OUTFILE
X	Reference_Msg >>$OUTFILE
X	GetCat $argument >>$OUTFILE
X	ListLib $argument >>$OUTFILE
X	echo "Command executed: index and list $argument : $ARPA_SENDER" >>$LOGFILE
X	Mail_File ;;
X
Xlindex)	Deliver_Msg >>$OUTFILE
X	Reference_Msg >>$OUTFILE
X	if test -n "$LSTIND" ; then
X		GetCatLst $argument >>$OUTFILE
X	else
X		NotUsingList_Msg >>$OUTFILE
X	fi
X	echo "Command executed: lindex $argument : $ARPA_SENDER" >>$LOGFILE
X	Mail_File ;;
X
Xfindme) Deliver_Msg >>$OUTFILE
X	Reference_Msg >>$OUTFILE
X	if test -n "$LSTIND" ; then
X		FindMe >>$OUTFILE
X		AskLstMan_Msg >>$OUTFILE
X	else
X		NotUsingList_Msg >>$OUTFILE
X	fi
X	echo "Command executed: findme" >>$LOGFILE
X	Mail_File ;;
X
X
Xsignon) Deliver_Msg >>$OUTFILE
X	Reference_Msg >>$OUTFILE
X	if test -n "$LSTIND" ; then
X#		Does this mailing list exist?
X		lstpth="`GetDirLst $argument`"
X		if test -n "$lstpth" ; then
X#			Yes. Let's check and eventually initialize the mailing list
X			CreaLst $lstpth
X#			This is already done by the parser, actually.
X			test -z "$ARPA_SENDER" && ARPA_SENDER=$UUCP_SENDER
X#			Is this an already subscribed user?
X			chkusr="`ChkUsrLst $lstpth`"
X			if test -n "$chkusr" ; then
X#				YES. Notify this situation to remote user.
X				test $DEBUG && echo "Already subscribed: matching <$chkusr>"
X				AlreadyLst_Msg $chkusr >>$OUTFILE
X			else
X#			We MIGHT subscribe this user, but first let's be sure the mailing list is not write-protected.
X				if test -r "$lstpth/status" ; then
X					test $DEBUG && echo "Status file found inside \"$lstpth/status\""
X					grep -v '#' "$lstpth/status" | grep "W-CLOSED" >/dev/null  && {
X#						That's it, this is a write-protected list.
X						SigClosed_Msg  >>$OUTFILE
X						test $DEBUG && echo "Signon for \"$argument\" is protected"
X						echo "Signon for \"$argument\" is protected." >>$LOGFILE
X				 		lstpth="CLOSED"
X						}
X					fi
X				test "$lstpth" != "CLOSED" && {
X#					Subscribe the user and acknowledge his message.
X#					We use ARPA_SENDER if available; otherwise UUCP_SENDER.
X#					Currently the parser copies uucp_sender inside arpa_sender if the latter is not
X#					found inside mail's headers. This might be changed later on.
X					InLst_Msg $ARPA_SENDER >>$OUTFILE
X					AddUsrLst $ARPA_SENDER $lstpth
X					}
X			fi
X		else
X#			This mailing list does not exist at all!
X			test $DEBUG && echo "Mailing list \"$argument\" does not exist!"
X			NoList_Msg >>$OUTFILE
X			NoHuman_Msg >>$OUTFILE
X		fi
X	else
X#		We are not using mailing lists here; are you crazy?
X		NotUsingList_Msg >>$OUTFILE
X	fi
X	echo "Command executed: signon $argument : $ARPA_SENDER" >>$LOGFILE
X	Mail_File ;;
X
Xsignoff) Deliver_Msg >>$OUTFILE
X	Reference_Msg >>$OUTFILE
X	if test -n "$LSTIND" ; then
X#		Does this mailing list exist?
X		lstpth="`GetDirLst $argument`"
X		if test -n "$lstpth" ; then
X#			Yes. Let's check and eventually initialize the mailing list
X			CreaLst $lstpth
X			test -z "$ARPA_SENDER" && ARPA_SENDER=$UUCP_SENDER
X#			Is this user really subscribed ?
X			chkusr="`ChkUsrLst $lstpth`"
X			if test -z "$chkusr" ; then
X#				NO. Notify this situation to remote user.
X				test $DEBUG && echo "This user is NOT subscribed, signoff useless"
X				NotLst_Msg >>$OUTFILE
X				NoHuman_Msg >>$OUTFILE
X			else
X#				Unsubscribe the user and acknowledge his message.
X				RmvUsrLst "$chkusr" $lstpth
X				OutLst_Msg "$chkusr" >>$OUTFILE
X			fi
X		else
X#			This mailing list does not exist at all!
X			test $DEBUG && echo "Mailing list \"$argument\" does not exist!"
X			NoList_Msg >>$OUTFILE
X		fi
X	else
X#		We are not using mailing lists here; helloooo macfly?!?
X		NotUsingList_Msg >>$OUTFILE
X	fi
X	echo "Command executed: signon $argument : $ARPA_SENDER" >>$LOGFILE
X	Mail_File ;;
X
Xreview) Deliver_Msg >>$OUTFILE
X	Reference_Msg >>$OUTFILE
X	if test -n "$LSTIND" ; then
X#		Does this mailing list exist?
X		lstpth="`GetDirLst $argument`"
X		if test -n "$lstpth" ; then
X			if test -r "$lstpth/users" ; then
X				if test -s "$lstpth/users" ; then
X					if test -r "$lstpth/status" ; then
X						test $DEBUG && echo "Status file found inside \"$lstpth/status\""
X						grep -v '#' "$lstpth/status" | grep "R-CLOSED" >/dev/null  && {
X							RevClosed_Msg  >>$OUTFILE
X							test $DEBUG && echo "Userlist for \"$argument\" is protected"
X							echo "Userlist for \"$argument\" is protected." >>$LOGFILE
X							lstpth="CLOSED"
X							}
X					fi
X					test "$lstpth" != "CLOSED" && {
X						Review_Msg "$lstpth/users" >>$OUTFILE
X						test $DEBUG && echo "Userslist for \"$argument\" sent"
X						echo "Userlist for \"$argument\" is available" >>$LOGFILE
X						}
X				else
X					RevEmpty_Msg >>$OUTFILE
X					test $DEBUG && echo "Userslist for \"$argument\" is empty!"
X					echo "Userlist for \"$argument\" is empty!" >>$LOGFILE
X				fi
X			else
X				RevNotAv_Msg >>$OUTFILE
X				test $DEBUG && echo "Userslist for \"$argument\" is not readable!"
X				echo "Userlist for \"$argument\" is not readable!" >>$LOGFILE
X			fi
X		else
X			test $DEBUG && echo "Mailing list \"$argument\" does not exist at all!"
X			NoList_Msg >>$OUTFILE
X			NoHuman_Msg >>$OUTFILE
X		fi
X	else
X#		We are not using mailing lists here; are you crazy?
X		NotUsingList_Msg >>$OUTFILE
X	fi
X	echo "Command executed: review $argument : $ARPA_SENDER" >>$LOGFILE
X	Mail_File ;;
X
Xcredits) Deliver_Msg >>$OUTFILE
X	Reference_Msg >>$OUTFILE
X	if test -n "$PATHSIZE" ; then
X		credit="`Check_PathSize $UUCP_SENDER`"
X		if [ "$credit" = "" ]; then
X			if [ "$CREDIT" = "" ];   then
X				echo "\nBy default, users have NO limitations here." >>$OUTFILE
X				echo "This might changed for your path later on.\n" >>$OUTFILE
X			elif [ "$CREDIT" != "0" ]; then 
X				echo "\nYou are a new user; credits: $CREDIT (bytes)\n" >>$OUTFILE
X				echo "(This request will be billed as well, normally less than 1000 bytes)\n" >>$OUTFILE
X			fi
X		else
X				if [ "$credit" = "UNLIMITED" ]; then
X				echo "\nYour path is privileged and has no limitations.\n" >>$OUTFILE
X				else
X				echo "\nCredits remaining: $credit out of $CREDIT (bytes)\n" >>$OUTFILE
X				echo "(This request will be billed as well, normally less than 1000 bytes)\n" >>$OUTFILE
X				fi
X		fi
X	else
X		echo "\nPathsizing not running here. No limits!\n" >>$OUTFILE
X	fi
Xecho "Command executed: credits for $UUCP_SENDER" >> $LOGFILE
X	Mail_File ;;
X
X
Xfind)	Deliver_Msg >>$OUTFILE
X	Reference_Msg >>$OUTFILE
X	if [ "$argument" = "DEFAULT" ]; then
X		test $DEBUG && echo "Missing argument for \"find\""
X		echo "\nERROR: command \"find\" needs a valid argument!\n" >>$OUTFILE
X		NeedHelp_Msg >>$OUTFILE
X		NoHuman_Msg >>$OUTFILE
X	else
X		echo "Command executed: find $argument : $ARPA_SENDER" >>$LOGFILE
X		FindFile $argument >>$OUTFILE
X	fi
X	Mail_File ;;	
X
Xhelp)	Deliver_Msg >>$OUTFILE
X	Reference_Msg >>$OUTFILE
X	if [ "$argument" != "DEFAULT" ]; then
X		if test -n "$HELPDIR" ; then
X			if test -r $HELPDIR/$argument ; then
X				test $DEBUG && echo "Help \"$argument\" ok"
X				cat $HELPDIR/$argument >>$OUTFILE
X			else
X				test $DEBUG && echo "Help not available for \"$argument\""
X				echo "NOHELP $argument" >>$LOGFILE
X				NoHelpFor_Msg >>$OUTFILE
X				NoHuman_Msg >>$OUTFILE
X			fi
X		else
X			test $DEBUG && echo "HELPDIR not available"
X			echo "Helpdir not available" >>$LOGFILE
X			NoHelpDir_Msg >>$OUTFILE
X			NoHuman_Msg >>$OUTFILE
X		fi
X		
X	else
X		argument="HELP"; from="DEFAULT";
X		hname=""; hname="`GetFile $argument $from`" 
X		if [ "$hname" != "" ]; then
X			cat $hname >>$OUTFILE
X			echo "Command executed: help : $ARPA_SENDER" >>$LOGFILE
X		else
X			echo "NOHELP DEFAULT" >>$LOGFILE
X			echo "WARNING: no default help for $ARPA_SENDER" >>$LOGFILE
X			echo "\n\
XCannot open HELP file inside RNA system directory - sorry" >>$OUTFILE
X		fi
X		
X	fi 
X	Topics >>$OUTFILE
X	Mail_File ;;
X
Xrelease) Deliver_Msg >>$OUTFILE
X         Reference_Msg >>$OUTFILE
X	Release_Msg >>$OUTFILE
X	echo "Command executed: release" >>$LOGFILE
X	Mail_File ;;
X
X# RRJP - RNA REMOTE JOBS PROCESSOR release 1.0
X# Access to the RRJP should only be given to trusted people. Brothers, 
X# sisters, mom and dad  for instance ;-)
X# See the RRJP chapter inside OPER.GUIDE for details.
Xexec)	Deliver_Msg >>$OUTFILE
X	Reference_Msg >>$OUTFILE
X#	As you can see, if "execfile" does not exist there's no way of running 'exec'. 
X#	No need to worry about rrjp so; by default it does not run. Trust me, this is
X#	not a trojan horse :-)
X	if test -r execfile ; then
X#		Ok, execfile exists. Let's see if  the incoming path is authorized. If UUCP_SENDER is not found
X#		inside execfile, request is refused.
X		grep $UUCP_SENDER $RNADIR/execfile >/dev/null && {
X#			Well well, the path seems ok. Let's see if the PASSWORD (which is coming as a $from argument)
X#			is ok as well..otherwise request is refused.
X			grep $from $RNADIR/execfile >/dev/null && {
X#				YEP. Have a nice time on rrjp...
X				echo "RRJP REQUEST AUTHORIZED" >>$LOGFILE
X				test $DEBUG && echo "RRJP: work authorized"
X				grep "^~ " $MBOX_CUT | tr -d "~" >/tmp/$argument
X				chmod 777 /tmp/$argument
X				echo "\n\fRRJP-1A READY\nHELLO $ARPA_SENDER" >>$OUTFILE
X				echo "REMOTE JOB: \"$argument\"\nSIZE: \c" >>$OUTFILE
X				wc -l /tmp/$argument | cut -d"/" -f1 | tr -d " " >>$OUTFILE
X				echo "LANGUAGE  :  $with" >>$OUTFILE
X				echo "EXECUTION STARTS  `date`\nOUTPUT FOLLOWS:" >>$OUTFILE
X				echo "RRJP EXEC START `date`" >>$LOGFILE
X				test $DEBUG && echo "RRJP: executing \"$argument\""
X#				Have a copy of the job...
X				touch $RNADIR/jobs; echo "RRJP $argument [$ARPA_SENDER `date`]" >>$RNADIR/jobs
X				cat /tmp/$argument >>$RNADIR/jobs
X#				Which interpreter should we use?
X#				It's pretty easy to configure RRJP to act as a full C compiler from remote..
X				case $with in
X					DEFAULT) /tmp/$argument $OUTFILE 1>>$OUTFILE 2>&1 
X						;;
X					*)	
X						test $DEBUG && echo "Attempting to execute through \"$with\""
X						$with /tmp/$argument $OUTFILE 1>>$OUTFILE 2>&1 
X						;;
X					esac
X				test $DEBUG && echo "RRJP: end of execution"
X				echo "RRJP EXEC STOP `date`" >>$LOGFILE
X				echo "EXECUTION STOPS  `date`" >>$OUTFILE
X	  			echo "CPU CONSUMED (user system): \c" >>$OUTFILE
X	  			echo "RRJP CPU: \c" >>$LOGFILE
X#				We cant use `times` in the previous echo, since it would be calculated on a new
X#				subshell executing just nothing, thus giving always 0m00s as a result.
X				times >>$OUTFILE ; times >>$LOGFILE
X				echo "GOODBYE $ARPA_SENDER - RRJP END" >>$OUTFILE
X				from="ok"
X				}
X			}
X		if [ "$from" != "ok" ] ; then
X			echo "You are NOT AUTHORIZED to use this command!\n" >>$OUTFILE
X			test $DEBUG && echo "NOT AUTHORIZED TO USE EXEC COMMAND"
X			echo "RRJP NOT AUTHORIZED" >>$LOGFILE
X			fi
X	else
X		echo "System authorization failure\n" >>$OUTFILE
X		test $DEBUG && echo "Authorization failure: execfile missing"
X		echo "RRJP IS DISABLED (no execfile)" >>$LOGFILE
X		fi
X
X	echo "Command executed: exec $argument [pw]=$from" >>$LOGFILE
X	Mail_File ;;
X
X
X	 *)	
X		test $DEBUG && echo "WARNING: INTERPRETER ERROR WITH TOKEN \"$action\""
X		test $DEBUG && echo "(act=$action - arg=$argument - dest=$destination - via=$via - with=$with - tok=$tok )"
X		test $DEBUG && echo "Apparently, parser knows of \"$action\" but interpreter doesn't !"
X		echo "WARNING: INTERNAL INTERPRETER ERROR with token $action" >>$LOGFILE
X#		Inside rnalib 2.0 we were using TWO shift; this was giving (sometimes) 'cannot shift' errors.
X#		Now this was fixed, however we'll leave it commented for a while..
X#		shift; shift;;
X		shift;;
X
Xesac
X# the following bracket closes the restricted environment of the interpreter
X)
X# recycle next command line (if any)
Xshift
X# end while, recycle
Xdone
Xelse
X#	CMDLOG empty: no commands found inside current message
X	test $DEBUG && echo "no commands found, notify origin."
X	echo "EMPTY $ARPA_SENDER" >>$LOGFILE
X	Headers_Msg >>$OUTFILE
X	Deliver_Msg >>$OUTFILE
X	echo "" >>$OUTFILE
X	NoCommands_Msg >>$OUTFILE
X	Mail_File
Xfi
X}
X# End Of Interpreter (phew!)
X
X# ===========================================================================================
X#            MAIN PROGRAM (main)
X# ===========================================================================================
X
X# First of all, if "stop" is found, RNA quits immediatly; NO OUTPUT!
X# This is different from going 'on hold': used for emergencies only.
Xtest $DEBUG && test -r $RNADIR/stop && echo "$RNAVERS FORCED EXIT (found \"$RNADIR/stop\")"
Xtest -r $RNADIR/stop && exit
X
Xtest $DEBUG && echo "$RNAVERS DEBUG STARTUP on `date`\nSystem-id: `uname -a`"
X
X# Now we look for arguments.
Xcase "$#" in
X	0)	;;
X	*)	
X		test $DEBUG && echo "EXECUTING \"$@\""
X		Export 
X#		should you need to "source" rnalib's environment inside
X#		another program, you can uncomment the following line.
X#		set >$RNADIR/Environment
X#
X#		We clear the status file for each external execution.
X		>$TMPDIR/status
X#		Now we execute the whole command (with any parameter).
X#		This is searched inside PATH, which has BINDIR ahead.
X#		External programs - like shell scripts for rnalib -
X#		normally resides inside BINDIR. We don't redirect i/o
X#		since we let the external program take care of it.
X		$*
X#		only if we find a tmpdir/status file containing a 'RRUN' we
X#		will keep on executing rnalib; otherwise we simply drop the
X#		whole session (mail untouched).
X		test "`cat $TMPDIR/status`" != "RRUN" && {
X			test $DEBUG && echo "EXEC TERMINATED - QUIT RNALIB"
X			exit
X		}
X		test $DEBUG && echo "EXEC TERMINATED- CONTINUE RNALIB"
X		;;
Xesac
X
X# Are we out of service?
Xtest -r $RNADIR/hold || {
X#	No. Check if we just came out of 'holding' state: in this case we
X#	might have a 'pending' file with old jobs to process.
X	test -r $RNADIR/pending && {
X#		That's it: old requests.. We append them to our current
X#		mailbox. New ones are stored before these, i know. 
X#		It makes little sense to spend time reordering...
X		test $DEBUG && echo "Out of hold-state, there are pending requests.."
X		cat $RNADIR/pending >>$MAILBOX
X# %%FIX%%  
X# check out that every mail is separated by a null line, in the previous
X# cat. Normally, it should. Well, if not, add it. 
X		rm $RNADIR/pending
X	}
X}
X
Xtest -s $MAILBOX && { 
X	Startup
X	GetMail 
X	CutMail
X	set `wc -l $POINTERS`
X	test $DEBUG && echo "New mail found: $1 message(s)"
X	echo "\nMAILFOUND $1 `date '+%d/%m/%y'`" >>$LOGFILE
X	until [ "$message" -gt "$1" ]
X		do
X		test $DEBUG && echo "Now working on message n.$message"
X		( 
X			ClrTmpFiles
X			GetMessage $message
X			Parse 
X			Interp
X		)
X		test $DEBUG && echo "message n.$message is over"
X		message=`expr $message + 1`
X		done
X	test $DEBUG && echo "RNA SESSION COMPLETED"
X	} || {
X# %%FIX%%
X#	We need the following dummy command, otherwise MAKE with no DEBUG
X#	mode would produce a } || {\n} sequence, which causes shell to
X#	say "unexpected symbol". Use 'true', or anything which has NO
X#	output- (beware...)
X	true
X	test $DEBUG && echo "RNA SESSION COMPLETED (NO WORK)"
X	}
X
X
X# End of RNA
X# %%FIX%%
X# As in the ads, rnalib makes the coffee. If you want, uncomment
X# the next line and choose the kind of coffee you like ;-))
X# echo "Black & Strong" >$RNADIR/coffee 
X#
X# Congratulations, you got to the end of RNAlib configuration. If you
X# followed indications now you have a working copy of RNALIB.
X# Before attempting to execute, however, remember you need to create at
X# least an index file  (libindex) for libraries.
X# In order to make RNA run faster and better, we need to cut off all
X# comments from the original configured version. So i strongly recommend
X# you make your configuration and modifications on a COMPLETE version of
X# RNA, but RUN ALWAYS an extracted rna called 'XRNA'. How do you get
X# XRNA out of your RNA? Easy: run 'MAKE_RNA'.
X# Every time you need to change something inside RNA, edit RNA and then 
X# re-run MAKE_RNA.  -- Paolo 
X# 
X# RNALIB SERVER - END OF CONFIGURATION
zXqzXqzXq
echo "File RNA is complete" &&
$TOUCH -am 0210184091 RNA &&
chmod 0777 RNA ||
echo "restore of RNA failed"
set `wc -c RNA`;Wc_c=$1
if test "$Wc_c" != "91110"; then
	echo original size 91110, current size $Wc_c
fi
rm -f shar3_seq_.tmp
echo "You have unpacked the last part"
exit 0
-- 
Paolo Ventafridda     -*-     INTERNET: venta at otello.sublink.org
TELEMATIX MILANO - Via C.Gomes 10, 20124 Milano -  +39-2-6706012



More information about the Alt.sources mailing list