From: TJ S. <cas...@us...> - 2009-09-23 16:00:28
|
Update of /cvsroot/proftp/proftpd/tests/t/lib/ProFTPD/Tests/Config In directory ddv4jf1.ch3.sourceforge.com:/tmp/cvs-serv12577/tests/t/lib/ProFTPD/Tests/Config Modified Files: HiddenStores.pm Log Message: Bug#3294 - Support configurable HiddenStores prefixes. Index: HiddenStores.pm =================================================================== RCS file: /cvsroot/proftp/proftpd/tests/t/lib/ProFTPD/Tests/Config/HiddenStores.pm,v retrieving revision 1.3 retrieving revision 1.4 diff -u -r1.3 -r1.4 --- HiddenStores.pm 9 Feb 2009 23:27:33 -0000 1.3 +++ HiddenStores.pm 23 Sep 2009 16:00:17 -0000 1.4 @@ -26,6 +26,16 @@ test_class => [qw(bug forking)], }, + hiddenstores_bug3294 => { + order => ++$order, + test_class => [qw(bug forking)], + }, + + hiddenstores_bool_prefix_bug3294 => { + order => ++$order, + test_class => [qw(bug forking)], + }, + }; sub new { @@ -363,4 +373,298 @@ unlink($log_file); } +sub hiddenstores_bug3294 { + my $self = shift; + my $tmpdir = $self->{tmpdir}; + + my $config_file = "$tmpdir/config.conf"; + my $pid_file = File::Spec->rel2abs("$tmpdir/config.pid"); + my $scoreboard_file = File::Spec->rel2abs("$tmpdir/config.scoreboard"); + + my $log_file = File::Spec->rel2abs('tests.log'); + + my $auth_user_file = File::Spec->rel2abs("$tmpdir/config.passwd"); + my $auth_group_file = File::Spec->rel2abs("$tmpdir/config.group"); + + my $user = 'proftpd'; + my $passwd = 'test'; + my $home_dir = File::Spec->rel2abs($tmpdir); + my $uid = 500; + my $gid = 500; + + # Make sure that, if we're running as root, that the home directory has + # permissions/privs set for the account we create + if ($< == 0) { + unless (chmod(0755, $home_dir)) { + die("Can't set perms on $home_dir to 0755: $!"); + } + + unless (chown($uid, $gid, $home_dir)) { + die("Can't set owner of $home_dir to $uid/$gid: $!"); + } + } + + auth_user_write($auth_user_file, $user, $passwd, $uid, $gid, $home_dir, + '/bin/bash'); + auth_group_write($auth_group_file, 'ftpd', $gid, $user); + + my $hiddenstore_prefix = "foobar"; + + my $hidden_file = File::Spec->rel2abs("$tmpdir/." . $hiddenstore_prefix . ".test.txt."); + my $test_file = File::Spec->rel2abs("$tmpdir/test.txt"); + + my $config = { + PidFile => $pid_file, + ScoreboardFile => $scoreboard_file, + SystemLog => $log_file, + + AuthUserFile => $auth_user_file, + AuthGroupFile => $auth_group_file, + DefaultChdir => '~', + + HiddenStores => $hiddenstore_prefix, + + IfModules => { + 'mod_delay.c' => { + DelayEngine => 'off', + }, + }, + }; + + my ($port, $config_user, $config_group) = config_write($config_file, $config); + + # Open pipes, for use between the parent and child processes. Specifically, + # the child will indicate when it's done with its test by writing a message + # to the parent. + my ($rfh, $wfh); + unless (pipe($rfh, $wfh)) { + die("Can't open pipe: $!"); + } + + my $ex; + + # Fork child + $self->handle_sigchld(); + defined(my $pid = fork()) or die("Can't fork: $!"); + if ($pid) { + eval { + my $client = ProFTPD::TestSuite::FTP->new('127.0.0.1', $port); + $client->login($user, $passwd); + + my $conn = $client->stor_raw('test.txt'); + unless ($conn) { + die("Failed to STOR test.txt: " . $client->response_code() . " " . + $client->response_msg()); + } + + my $buf = "Hello, World!\n"; + $conn->write($buf, length($buf)); + + unless (-f $hidden_file) { + die("File $hidden_file does not exist as expected"); + } + + $conn->close(); + + my $resp_code = $client->response_code(); + my $resp_msg = $client->response_msg(); + + my $expected; + + $expected = 226; + $self->assert($expected == $resp_code, + test_msg("Expected $expected, got $resp_code")); + + $expected = "Transfer complete"; + chomp($resp_msg); + $self->assert($expected eq $resp_msg, + test_msg("Expected '$expected', got '$resp_msg'")); + + $client->quit(); + + unless (-f $test_file) { + die("File $test_file does not exist as expected"); + } + + if (-f $hidden_file) { + die("File $hidden_file exists unexpectedly"); + } + }; + + if ($@) { + $ex = $@; + } + + $wfh->print("done\n"); + $wfh->flush(); + + } else { + eval { server_wait($config_file, $rfh) }; + if ($@) { + warn($@); + exit 1; + } + + exit 0; + } + + # Stop server + server_stop($pid_file); + + $self->assert_child_ok($pid); + + if ($ex) { + die($ex); + } + + unlink($log_file); +} + +sub hiddenstores_bool_prefix_bug3294 { + my $self = shift; + my $tmpdir = $self->{tmpdir}; + + my $config_file = "$tmpdir/config.conf"; + my $pid_file = File::Spec->rel2abs("$tmpdir/config.pid"); + my $scoreboard_file = File::Spec->rel2abs("$tmpdir/config.scoreboard"); + + my $log_file = File::Spec->rel2abs('tests.log'); + + my $auth_user_file = File::Spec->rel2abs("$tmpdir/config.passwd"); + my $auth_group_file = File::Spec->rel2abs("$tmpdir/config.group"); + + my $user = 'proftpd'; + my $passwd = 'test'; + my $home_dir = File::Spec->rel2abs($tmpdir); + my $uid = 500; + my $gid = 500; + + # Make sure that, if we're running as root, that the home directory has + # permissions/privs set for the account we create + if ($< == 0) { + unless (chmod(0755, $home_dir)) { + die("Can't set perms on $home_dir to 0755: $!"); + } + + unless (chown($uid, $gid, $home_dir)) { + die("Can't set owner of $home_dir to $uid/$gid: $!"); + } + } + + auth_user_write($auth_user_file, $user, $passwd, $uid, $gid, $home_dir, + '/bin/bash'); + auth_group_write($auth_group_file, 'ftpd', $gid, $user); + + my $hiddenstore_prefix = ".off."; + + my $hidden_file = File::Spec->rel2abs("$tmpdir/" . $hiddenstore_prefix . "test.txt."); + my $test_file = File::Spec->rel2abs("$tmpdir/test.txt"); + + my $config = { + PidFile => $pid_file, + ScoreboardFile => $scoreboard_file, + SystemLog => $log_file, + + AuthUserFile => $auth_user_file, + AuthGroupFile => $auth_group_file, + DefaultChdir => '~', + + HiddenStores => $hiddenstore_prefix, + + IfModules => { + 'mod_delay.c' => { + DelayEngine => 'off', + }, + }, + }; + + my ($port, $config_user, $config_group) = config_write($config_file, $config); + + # Open pipes, for use between the parent and child processes. Specifically, + # the child will indicate when it's done with its test by writing a message + # to the parent. + my ($rfh, $wfh); + unless (pipe($rfh, $wfh)) { + die("Can't open pipe: $!"); + } + + my $ex; + + # Fork child + $self->handle_sigchld(); + defined(my $pid = fork()) or die("Can't fork: $!"); + if ($pid) { + eval { + my $client = ProFTPD::TestSuite::FTP->new('127.0.0.1', $port); + $client->login($user, $passwd); + + my $conn = $client->stor_raw('test.txt'); + unless ($conn) { + die("Failed to STOR test.txt: " . $client->response_code() . " " . + $client->response_msg()); + } + + my $buf = "Hello, World!\n"; + $conn->write($buf, length($buf)); + + unless (-f $hidden_file) { + die("File $hidden_file does not exist as expected"); + } + + $conn->close(); + + my $resp_code = $client->response_code(); + my $resp_msg = $client->response_msg(); + + my $expected; + + $expected = 226; + $self->assert($expected == $resp_code, + test_msg("Expected $expected, got $resp_code")); + + $expected = "Transfer complete"; + chomp($resp_msg); + $self->assert($expected eq $resp_msg, + test_msg("Expected '$expected', got '$resp_msg'")); + + $client->quit(); + + unless (-f $test_file) { + die("File $test_file does not exist as expected"); + } + + if (-f $hidden_file) { + die("File $hidden_file exists unexpectedly"); + } + }; + + if ($@) { + $ex = $@; + } + + $wfh->print("done\n"); + $wfh->flush(); + + } else { + eval { server_wait($config_file, $rfh) }; + if ($@) { + warn($@); + exit 1; + } + + exit 0; + } + + # Stop server + server_stop($pid_file); + + $self->assert_child_ok($pid); + + if ($ex) { + die($ex); + } + + unlink($log_file); +} + 1; |