Commit 0cbfe5a7 authored by Steve Holme's avatar Steve Holme
Browse files

ftpserver.pl: Added support for new SMTP commands

parent eedca505
Loading
Loading
Loading
Loading
+112 −0
Original line number Diff line number Diff line
@@ -627,9 +627,14 @@ sub protocolsetup {
        %commandfunc = (
            'DATA' => \&DATA_smtp,
            'EHLO' => \&EHLO_smtp,
            'EXPN' => \&EXPN_smtp,
            'HELO' => \&HELO_smtp,
            'HELP' => \&HELP_smtp,
            'MAIL' => \&MAIL_smtp,
            'NOOP' => \&NOOP_smtp,
            'RSET' => \&RSET_smtp,
            'RCPT' => \&RCPT_smtp,
            'VRFY' => \&VRFY_smtp,
            'QUIT' => \&QUIT_smtp,
        );
        %displaytext = (
@@ -957,6 +962,113 @@ sub DATA_smtp {
    return 0;
}

sub NOOP_smtp {
    my ($args) = @_;

    if($args) {
        sendcontrol "501 Unrecognized parameter\r\n";
    }
    else {
        sendcontrol "250 OK\r\n";
    }

    return 0;
}

sub RSET_smtp {
    my ($args) = @_;

    if($args) {
        sendcontrol "501 Unrecognized parameter\r\n";
    }
    else {
        sendcontrol "250 Resetting\r\n";
    }

    return 0;
}

sub HELP_smtp {
    my ($args) = @_;

    # One argument is optional
    if($args) {
        logmsg "HELP_smtp got $args\n";
    }

    sendcontrol "214-This server supports the following commands:\r\n";

    if(@auth_mechs) {
        sendcontrol "214 HELO EHLO RCPT DATA RSET MAIL QUIT HELP AUTH\r\n";
    }
    else {
        sendcontrol "214 HELO EHLO RCPT DATA RSET MAIL QUIT HELP\r\n";
    }

    return 0;
}

sub VRFY_smtp {
    my ($args) = @_;
    my ($username, $address) = split(/ /, $args, 2);

    logmsg "VRFY_smtp got $args\n";

    if($username eq "") {
        sendcontrol "501 Unrecognized parameter\r\n";
    }
    else {
        my $testno = $smtp_client;

        $testno =~ s/^([^0-9]*)//;
        my $testpart = "";
        if ($testno > 10000) {
            $testpart = $testno % 10000;
            $testno = int($testno / 10000);
        }

        loadtest("$srcdir/data/test$testno");

        my @data = getpart("reply", "data$testpart");

        for my $d (@data) {
            sendcontrol $d;
        }
    }

    return 0;
}

sub EXPN_smtp {
    my ($list_name) = @_;

    logmsg "EXPN_smtp got $list_name\n";

    if(!$list_name) {
        sendcontrol "501 Unrecognized parameter\r\n";
    }
    else {
        my $testno = $smtp_client;

        $testno =~ s/^([^0-9]*)//;
        my $testpart = "";
        if ($testno > 10000) {
            $testpart = $testno % 10000;
            $testno = int($testno / 10000);
        }

        loadtest("$srcdir/data/test$testno");

        my @data = getpart("reply", "data$testpart");

        for my $d (@data) {
            sendcontrol $d;
        }
    }

    return 0;
}

sub QUIT_smtp {
    sendcontrol "221 cURL $smtp_type server signing off\r\n";