Support getting infiles/okfiles from the filesystem
authorMarius Gavrilescu <marius@ieval.ro>
Mon, 10 Feb 2014 09:23:17 +0000 (11:23 +0200)
committerMarius Gavrilescu <marius@ieval.ro>
Mon, 10 Feb 2014 09:23:17 +0000 (11:23 +0200)
lib/Gruntmaster/Daemon.pm
lib/Gruntmaster/Daemon/Generator/File.pm
lib/Gruntmaster/Daemon/Runner/File.pm
selinux/gruntmasterd.fc
selinux/gruntmasterd.te

index 7166a4238a5d4809ed0b2cf49d1584af48242fae..9a02adb4ca6ecc77ce843c63384082535284ec70 100644 (file)
@@ -63,6 +63,7 @@ sub process{
          my %files = exists $meta->{files} ? %{$meta->{files}} : ();
          $meta = {
                  %$meta,
+                 problem => $_,
                  (defined problem_generator() ? (generator => problem_generator) : ()),
                  (defined problem_runner()    ? (runner    => problem_runner)    : ()),
                  (defined problem_judge()     ? (judge     => problem_judge)     : ()),
index 601ea9968b6cb2ab70b2635016d17e33fde6b7da..fb1dc5e8d900ac2b32550a81abd7768b61aa0185 100644 (file)
@@ -4,6 +4,7 @@ use 5.014000;
 use strict;
 use warnings;
 
+use File::Copy qw/copy/;
 use File::Slurp qw/write_file/;
 use Log::Log4perl qw/get_logger/;
 
@@ -14,7 +15,11 @@ our $VERSION = "5999.000_001";
 sub generate{
   my ($test, $meta) = @_;
   get_logger->trace("Generating test $test ...");
-  write_file 'input', $meta->{infile}[$test - 1]
+  if (exists $meta->{infile}) {
+         write_file 'input', $meta->{infile}[$test - 1]
+  } else {
+         copy "/var/lib/gruntmasterd/pb/$meta->{problem}/$test.in", 'input'
+  }
 }
 
 1;
index 6fc66c2b00631dc6b6207bbd22b9042f90f4d50a..34ea04d80558fb13b7d7d13f41a401c2a0c14d0d 100644 (file)
@@ -17,7 +17,12 @@ sub run{
   get_logger->trace("Running on test $test...");
   $meta->{files}{prog}{run}->($meta->{files}{prog}{name}, fds => [qw/0 input 1 >output/], map {defined $meta->{$_} ? ($_ => $meta->{$_}) : () } qw/timeout olimit mlimit/);
   my $out = slurp 'output';
-  my $ok = $meta->{okfile}[$test - 1];
+  my $ok;
+  if (exists $meta->{okfile}) {
+         $ok = $meta->{okfile}[$test - 1]
+  } else {
+         $ok = slurp "/var/lib/gruntmasterd/pb/$meta->{problem}/$test.ok"
+  }
 
   $out =~ s/^\s+//;
   $ok  =~ s/^\s+//;
index f011981f7486e815024e4daa6d1d6ff68e811f39..f867ea4595935294ce031f96cf2b28c40496c371 100644 (file)
@@ -3,4 +3,5 @@
 /usr/(local/)?bin/gruntmaster-exec    gen_context(system_u:object_r:gruntmaster_job_exec_t, s0)
 /usr/(local/)?bin/gruntmaster-paged   gen_context(system_u:object_r:gruntmaster_paged_exec_t, s0)
 /etc/gruntmasterd(/.*)?               gen_context(system_u:object_r:gruntmasterd_etc_t, s0)
+/var/lib/gruntmasterd(/.*)?           gen_context(system_u:object_r:gruntmasterd_var_lib_t, s0)
 /var/log/gruntmasterd                 gen_context(system_u:object_r:gruntmasterd_log_t, s0)
index ed878dae812ee0a9dc8016f435be89d130a320bb..9bcba33fd3c9a8b48c72bfea46ede7af3c9bcf21 100644 (file)
@@ -26,6 +26,7 @@ type gruntmasterd_etc_t;
 type gruntmasterd_exec_t;
 type gruntmasterd_log_t;
 type gruntmasterd_tmp_t;
+type gruntmasterd_var_lib_t;
 type gruntmaster_job_t;
 type gruntmaster_job_exec_t;
 type gruntmaster_compile_t;
@@ -54,6 +55,7 @@ type_transition gruntmasterd_t gruntmaster_job_exec_t : process gruntmaster_job_
 type_transition gruntmasterd_t tmp_t : dir gruntmasterd_tmp_t;
 files_type(gruntmasterd_tmp_t)
 files_type(gruntmasterd_etc_t)
+files_type(gruntmasterd_var_lib_t)
 
 # Daemon permissions
 allow gruntmasterd_t { gruntmaster_compile_t gruntmaster_job_t } : process { sigkill siginh rlimitinh transition };
@@ -71,6 +73,7 @@ allow gruntmasterd_t tmp_t : dir { getattr write search add_name };
 gruntmaster_read(bin_t)
 gruntmaster_read(gruntmaster_compile_exec_t)
 gruntmaster_read(gruntmasterd_etc_t)
+gruntmaster_read(gruntmasterd_var_lib_t)
 gruntmaster_read(gruntmaster_job_exec_t)
 gruntmaster_read(httpd_sys_content_t)
 gruntmaster_read(lib_t)
This page took 0.01448 seconds and 4 git commands to generate.