MFTP - a mail ftp client written in Perl
Clay Luther
cluther at supernet.dallas.haus.com
Fri Mar 15 14:12:01 AEST 1991
Here is MFTP, a simple program written in Perl that provides a nice interface
to the bitftp server (or any mail server with a little modification) to sites
that do not have full-ip access.
Enjoy.
#! /bin/sh
# This is a shell archive, meaning:
# 1. Remove everything above the #! /bin/sh line.
# 2. Save the resulting text in a file.
# 3. Execute the file with /bin/sh (not csh) to create the files:
# README
# mftp
# This archive created: Thu Mar 14 22:08:37 1991
export PATH; PATH=/bin:$PATH
if test -f 'README'
then
echo shar: will not over-write existing file "'README'"
else
cat << \SHAR_EOF > 'README'
MFTP - Mail FTP Client
by Clay Luther
Copyright 1991, Clay Luther
This is Freeware.
Send comments to cluther at supernet.haus.com.
After unsharing the file, edit it and change the values indicated by the
keywords NOTE and EDIT.
Have fun.
SHAR_EOF
chmod +x 'README'
fi # end of overwriting check
if test -f 'mftp'
then
echo shar: will not over-write existing file "'mftp'"
else
cat << \SHAR_EOF > 'mftp'
#! /usr/local/bin/perl
eval '(exit $?0)' && eval 'exec /usr/local/bin/perl -S $0 ${1+"$@"}' & eval 'exec /usr/local/bin/perl -S $0 $argv:q'
if 0;
#end of perlstart
# NOTE ON PERLSTART: ENSURE YOUR PERLPATH (/usr/.../perl) IS CORRECT FOR YOUR
# SYSTEM.
# SEE "EDIT THESE VALUES" BELOW.
# Perl Program mftp Clay Luther January 1991
# Send comments to cluther at supernet.haus.com
# ABSTRACT:
# Provide a simple interface to the mail ftp servers.
#
# DESCRIPTION:
# mftp is a user interface to internet mail ftp services. Mail ftp services
# work by having the user submit a file containing standard FTP commands to
# a mail ftp server. The mail server performs the inet ftp connection to
# the machine the user wants to ftp to and mails ftp output back to the
# user.
#
# Mftp provides the user with a simple interface to a mail ftp server. From
# unix, the user enters the command "mftp [site] [user] [passwd]". If he
# does not enter "site", the mftp prompts him for one. "User" and "passwd"
# default to "anonymous".
#
# Mftp then presents the user with a simple menu of commands. The user
# enters a command by typing a letter followed by a carriage return. If
# the command takes a parameter, the user may enter it on the same line as
# the command letter; otherwise, mftp will prompt the user for the parameter.
#
# Mftp builds a file containing the user's ftp requests. Once the user is
# finished entering commands, mftp mails the request file to the defined
# mftp server (see variable $bitftp).
#
# If mftp encounters and error during execution, it dies with an appropriate
# message.
# mftp: a batched ftp program
# USAGE: mftp [site] [user] [passwd]
#####################
# EDIT THESE VALUES #
$tmp = "/tmp/mftp$$";
$version = "mftp version 1.0";
$mail = "/usr/lib/sendmail";
$edit = "/usr/bin/vi";
$more = "/usr/local/bin/less";
$bitftp = "bitftp at pucc.princeton.edu";
######################################
($site,$user,$passwd) = @ARGV;
if (!$site) {
print "open: ";
chop($site=<STDIN>);
}
$user = "anonymous" unless $user;
$passwd = "anonymous" unless $passwd;
print "\n\nWelcome to $version.\nConnect to ftp server $site.\nUser $user, password $passwd.\n";
print "Batching commands to $tmp...\n";
open(F,">$tmp") || die "Cannot open $tmp: $!\n";
print F "FTP $site UUENCODE\n";
print F "USER $user $passwd\n";
close(F);
$dir = "";
$mode = "ASCII";
$atleastone = 0;
$help = 0;
while (&quest) {
if ($atleastone >= 5) { # Time to ship this baby...too many
# output commands
local($a);
print "You have entered $atleastone output requests.\n";
$atleastone = 0;
print "Send the current requests and continue [y]? ";
chop($a=<STDIN>);
$a = "y" unless $a;
if ($a =~ /y.*/i) {
# append QUIT
&frint("QUIT\n");
# send request
print "Mailing requests...\n";
system("$mail $bitftp < $tmp");
# reopen request batch
system("rm -f $tmp");
&frint("FTP $site UUENCODE\n");
&frint("USER $user $passwd\n");
}
else {
print "Quit mftp? ";
chop($a=<STDIN>);
if ($a =~ /y.*/i) {
goto quitmftp;
}
}
}
} ;
quitmftp:
if ($atleastone) {
local($req);
if ($atleastone>1) { $req="s"; } else { $req=""; }
print "$atleastone output request$req.\n";
print "Sending the request to $bitftp...";
system("$mail $bitftp < $tmp");
print "\nYou should get a reply back within a day.\n";
} else {
print "Hmm...no commands entered. Not sending the request.\n";
}
system("rm -f $tmp");
exit 0;
############## END OF MAIN ###############
sub quest
{
local($c,$d);
print "\nMode: $mode";
if (length($dir)>0) {
print "\tLast Chdir: $dir";
}
print "\n";
if ($help) {
print "A)scii B)inary C)hdir D)ir E)dit F)orget G)et H)elp Q)uit V)iew Z)ap\n";
$help=0;
}
print "[abcdeghqvz?]: ";
chop($c = <STDIN>);
if ($c =~ /^ *a.*/i) {
$mode = "ASCII";
&frint("$mode\n");
return 1;
}
elsif ($c =~ /^ *b.*/i) {
$mode = "BINARY";
&frint("$mode\n");
return 1;
}
elsif ($c =~ /^ *c.*/i) {
local(@P) = split(' ',$c);
shift(@P);
$c = join(' ', at P);
if ($c) {
$d = $c;
} else {
print "Chdir to: ";
chop($d = <STDIN>);
}
$dir = $d;
&frint("CD $d\n");
return 1;
}
elsif ($c =~ /^ *d.*/i) {
local(@P) = split(' ',$c);
shift(@P);
$c = join(' ', at P);
if ($c) {
$d = $c;
} else {
print "Dir of: ";
chop($d = <STDIN>);
}
&frint("DIR $d\n");
$atleastone++;
return 1;
}
elsif ($c =~ /^ *e.*/i) {
system("$edit $tmp");
return 1;
}
elsif ($c =~ /^ *f.*/i) {
$atleastone = 0;
return 0;
}
elsif ($c =~ /^ *g.*/i) {
local(@P) = split(' ',$c);
shift(@P);
$c = join(' ', at P);
if ($c) {
$d = $c;
} else {
print "Get file: ";
chop($d = <STDIN>);
}
&frint("GET $d\n");
$atleastone++;
return 1;
}
elsif ($c =~ /^ *q.*/i) {
&frint("QUIT\n");
return 0;
}
elsif ($c =~ /^ *v.*/i) {
system("$more $tmp");
return 1;
}
elsif ($c =~ /^ *z.*/i) {
system("rm -f $tmp");
&frint("FTP $site UUENCODE\n");
&frint("USER $user $passwd\n");
$atleastone = 0;
$mode = "ASCII";
$dir = "";
return 1;
}
elsif ($c =~ /^ *\?.*/) {
$help = 1;
return 1;
}
elsif ($c =~ /^ *h.*/i) { # print some screen help
print "\n";
print "A)scii Switch to ASCII file transfer mode.\n";
print "B)inary Switch to BINARY file transfer mode.\n";
print "C)hdir Change current directory.\n";
print "D)ir List specified directory.\n";
print "E)dit Edit current batch with $edit.\n";
print "F)orget Abort this session.\n";
print "G)et Get the specified file.\n";
print "H)elp Show this.\n";
print "Q)uit Stop batching and send the requests.\n";
print "V)iew Show current batch with $more.\n";
print "Z)ap Erase and restart current batch.\n";
print "? Quick help.\n\n";
return 1;
}
else {
print "Unknown command: $c\n";
return 1;
}
}
sub frint
{
local($s) = @_;
open(F,">>$tmp") || die "Cannot open $tmp: $!\n";
print F $s;
print " > " . $s;
close(F);
}
SHAR_EOF
chmod +x 'mftp'
fi # end of overwriting check
# End of shell archive
exit 0
--
Clay Luther, Postmaster cluther at supernet.dallas.haus.com
Harris Adacom Corporation cluther at enigma.dallas.haus.com
Voice: 214/386-2356 MS 23, PO Box 809022, Dallas, Tx 75380-9022
Fax: 214/386-2159 Your mileage may vary. Void where prohibited.
More information about the Alt.sources
mailing list