#!/usr/bin/perl --

# snarf crasher 0.1.0 - based on my own wget crasher 0.1.0
# by Ulf Harnhammar in 2004-2006
# I hereby place this program in the public domain.

use strict;
use Socket;

$main::loggedin = 0;


sub mysend($)
{
  print "$_[0]\015\012";
} # sub mysend($)


sub myreceive($)
{
  my $inp = '';

  $inp = <STDIN>; $inp =~ tr/\015\012\000//d;
  $_[0] = $inp;
} # sub myreceive($)


$|++;
mysend('220 Welcome to snarf crasher 0.1.0 !!');

while (1)
{
  my ($str, $savestr, $reststr) = ('', '', '');

  myreceive($str);
  $savestr = $str;
  $str =~ s|^([A-Z]+) *(.*)$|$1|;
  $reststr = $2;

  if ($str eq 'USER')
  {
    mysend('331 Anonymous access allowed, send identity (e-mail name) '.
           'as password.');
    $main::loggedin = 1;
    next;
  }

  if (($str eq 'PASS') && ($main::loggedin == 1))
  { mysend('230 Anonymous user logged in.'); $main::loggedin = 2; next; }

  if ($main::loggedin < 2)
  { mysend("500 '$savestr': Command not understood."); next; }

  if ($str eq 'SYST')
  { mysend('215 Windows_NT'); next; }

  if ($str eq 'PWD')
  { mysend('257 "/" is current directory.'); next; }

  if ($str eq 'CWD')
  { mysend("250 OK. Current directory is $reststr"); next; }

  if ($str eq 'TYPE')
  { mysend("200 Type set to $reststr."); next; }

  if ($str eq 'PASV')
  { mysend("227 Entering Passive Mode (1)"); next; }

  if ($str eq 'QUIT')
  {
    mysend('221  Thanks for using snarf crasher 0.1.0 !');
    exit 0;
  }

  mysend("500 '$savestr': Command not understood.");
} # while 1

__END__
