head	1.9;
access;
symbols;
locks; strict;
comment	@# @;


1.9
date	97.03.18.03.32.05;	author david;	state Exp;
branches;
next	1.8;

1.8
date	96.12.16.18.48.27;	author david;	state Exp;
branches;
next	1.7;

1.7
date	96.12.11.03.03.52;	author david;	state Exp;
branches;
next	1.6;

1.6
date	96.12.09.04.35.03;	author david;	state Exp;
branches;
next	1.5;

1.5
date	96.11.25.16.38.17;	author david;	state Exp;
branches;
next	1.4;

1.4
date	96.11.25.16.37.21;	author david;	state Exp;
branches;
next	1.3;

1.3
date	96.09.01.10.51.16;	author root;	state Exp;
branches;
next	1.2;

1.2
date	96.08.07.23.44.54;	author david;	state Exp;
branches;
next	1.1;

1.1
date	96.08.07.23.43.06;	author david;	state Exp;
branches;
next	;


desc
@Initial Version.
@


1.9
log
@Extended the password file format to include the Maildir being delivered
out of.
@
text
@#!/usr/bin/perl
# $Id: smtpcall,v 1.8 1996/12/16 18:48:27 david Exp david $
#
# Usage: host port user.
#
# $Log: smtpcall,v $
# Revision 1.8  1996/12/16 18:48:27  david
# Automatically detect Linux vs. Solaris.
# Now waits until other side stops transmitting mail.
# Also prints status of each e-mail transferred when debug set.
#
# Revision 1.7  1996/12/11 03:03:52  david
# Fix timeout to wait forever after the initial handshake.
#
# Revision 1.6  1996/12/09 04:35:03  david
# Completely re-wrote in PERL.  Doesn't require EXPECT any more.
#
# Revision 1.5  1996/11/25 16:38:17  david
# Forgot to connect to port via telnet.
#
# Revision 1.4  1996/11/25 16:37:21  david
# Added port parameter.
#

use Socket;

$debug = 0;
$PASSWORDS='/var/qmail/control/passwords';

$mach = `uname -s`; chop $mach;
if ( $mach eq "Linux" )
   { # Linux
   $ECHO='/bin/echo -n';
   $MD5SUM_PATH='/usr/bin/md5sum';
   }
 else
   { # Solaris
   #$ECHO='/usr/ucb/echo -n";
   #$MD5SUM_PATH="/usr/local/bin/md5sum";
   }

$remote  = shift || 'localhost';
$port    = shift || 1234;  # random port
$user    = shift || die "No user specified.\n";

if ($port =~ /\D/)
   {
   $port = getservbyname($port, 'tcp');
   }

die "No port" unless $port;

open( PASS, "<$PASSWORDS" ) || die "Can't open $PASSWORDS.";
while ( ($_ = <PASS>) && ($lhost ne $remote) && ($luser ne $user) )
   {
   chop;
   ($lhost, $luser, $lpass, $ldir) = split ":";  
   }

close( PASS );

die "Can't find $remote in $PASSWORDS.\n"
   unless ($lhost eq $remote) && ($luser eq $user);

printf "Lhost = $lhost, Luser = $luser, Lpass = $lpass\n" if $debug;

$iaddr   = inet_aton($remote)               || die "no host: $remote\n";
$paddr   = sockaddr_in($port, $iaddr);
$proto   = getprotobyname('tcp');

socket(SOCK, PF_INET, SOCK_STREAM, $proto)  || die "socket: $!\n";
connect(SOCK, $paddr)    || die "connect: $!\n";

select( SOCK ); $| = 1; select( STDOUT ); # Unbuffered I/O

alarm( 180 ); # Die after 180 seconds if nothing happens.

$_ = <SOCK>; chop; chop;
printf "$_\n" if $debug;

($ok, $mid, $j1, $j2) = split( ' ' );

$md5clear = $mid . $lpass;

$md5pass = &md5sum( $md5clear );

printf "Md5clear = $md5clear\n" if $debug;
printf "Md5pass = $md5pass\n" if $debug;

printf "$user $md5pass\n" if $debug;
printf SOCK "$user $md5pass\r\n";

alarm( 0 ); # Now wait forever.

# Wait for OK or -ERR from remote side.
while ( <SOCK> )
   {
   printf $_ if $debug;
   }

close (SOCK)            || die "close: $!";
exit;

sub md5sum
{
$_ = `$ECHO "$_[0]" | $MD5SUM_PATH`;
chop;
($_, $junk) = split ' ';
return $_;
}
@


1.8
log
@Automatically detect Linux vs. Solaris.
Now waits until other side stops transmitting mail.
Also prints status of each e-mail transferred when debug set.
@
text
@d2 1
a2 1
# $Id: smtpcall,v 1.7 1996/12/11 03:03:52 david Exp david $
d7 5
d57 1
a57 1
   ($lhost, $luser, $lpass) = split ":";  
@


1.7
log
@Fix timeout to wait forever after the initial handshake.
@
text
@d2 1
a2 1
# $Id: smtpcall,v 1.6 1996/12/09 04:35:03 david Exp david $
d7 3
a21 7
# Linux
$ECHO='/bin/echo -n';
$MD5SUM_PATH='/usr/bin/md5sum';
# Solaris
#$ECHO='/usr/ucb/echo -n";
#$MD5SUM_PATH="/usr/local/bin/md5sum";

d25 12
d91 4
a94 2
$line = <SOCK>;
printf $line if $debug;
@


1.6
log
@Completely re-wrote in PERL.  Doesn't require EXPECT any more.
@
text
@d1 2
a2 2
#!/usr/local/bin/perl
# $Id: smtpcall,v 1.5 1996/11/25 16:38:17 david Exp david $
d7 3
d80 3
@


1.5
log
@Forgot to connect to port via telnet.
@
text
@d1 4
a4 2
#!/usr/bin/expect --
# $Id: smtpcall,v 1.4 1996/11/25 16:37:21 david Exp david $
d7 3
a11 1
# Usage: host port user.
a12 3
#
set timeout 180
log_user 1
d14 11
a24 1
set env(TERM) vt100
d26 3
a28 4
set host [lindex $argv 0]
set port [lindex $argv 1]
set user [lindex $argv 2]
set pass [exec /usr/local/bin/smtppass $host $user]
d30 4
a33 1
spawn telnet $host $port
d35 1
a35 1
match_max 100000
d37 5
a41 3
expect {
   timeout  exit
   "ogin:"  
d43 47
a89 9
#send_user "Got Login\n"
send "$user\r"
expect "word:"
#send_user "Got Password\n"
send "$pass\r"
set timeout -1
expect "finished"
#send_user "Finished\n"
expect eof
@


1.4
log
@Added port parameter.
Usage: host port user.
@
text
@d2 6
a7 1
# $Id: smtpcall,v 1.3 1996/09/01 10:51:16 root Exp david $
a8 1
# $Log$
d20 1
a20 1
spawn telnet $host
@


1.3
log
@Took out password by creating new smtppass script.
@
text
@d2 4
a5 1
# $Id: smtpcall,v 1.2 1996/08/07 23:44:54 david Exp root $
d12 2
a13 1
set user [lindex $argv 1]
@


1.2
log
@Fixed timeout to infinte so long file transfers don't get terminated.
@
text
@d2 1
a2 1
# $Id: smtpcall,v 1.1 1996/08/07 23:43:06 david Exp david $
d10 1
a10 1
set pass "XXXXXXXXXX"
@


1.1
log
@Initial revision
@
text
@d2 1
a2 1
# $Id$
d25 1
@
