]> mj.ucw.cz Git - moe.git/commitdiff
Implemented a limit on number of submits of a single task part.
authorMartin Mares <mj@ucw.cz>
Thu, 28 Jun 2007 21:03:45 +0000 (23:03 +0200)
committerMartin Mares <mj@ucw.cz>
Thu, 28 Jun 2007 21:03:45 +0000 (23:03 +0200)
TODO
submit/commands.c
submit/config
submit/submitd.c
submit/submitd.h

diff --git a/TODO b/TODO
index 6364c45283f1a6e0e1f1fb252c2343eac86762ce..f31fbe38cd8b01f9d112898b76f99d47aa8c1fc7 100644 (file)
--- a/TODO
+++ b/TODO
@@ -18,7 +18,6 @@ Installer:
 
 New submitter:
 - Checking of contest time (and per-contestant exceptions)
-- Remember hashes
 - contest: override failed check
 - contest: local history
 - contest: task status cache
index cf4ace6dd842af8d2a2efeeb812ab3f03f37b3bd..bee9549d24f04b3c3675f0ae2aafbeca66dab851 100644 (file)
@@ -207,6 +207,13 @@ cmd_submit(struct conn *c)
   struct odes *tasko = task_status_find_task(c, task, 1);
   struct odes *parto = task_status_find_part(tasko, pname, 1);
   uns current_ver = obj_find_anum(parto, 'V', 0);
+  if (current_ver >= max_versions)
+    {
+      err(c, "Maximum number of submits of this task exceeded");
+      bclose(fb);
+      task_unlock_status(c, 0);
+      return;
+    }
   uns last_ver = 0;
   uns replaced_ver = 0;
   for (struct oattr *a = obj_find_attr(parto, 'V' + OBJ_ATTR_SON); a; a=a->same)
index 1b00f46b005afa1d932f87cb1874a49a1c2c7a2e..578c856390b6eff9910a1ecdee1788d6d73834db 100644 (file)
@@ -21,6 +21,10 @@ MaxRequestSize               4K
 # This is a default, which can be overriden in task definitions.
 MaxAttachSize          256K
 
+# Maximum number of versions of a single task part a contestant is allowed
+# to submit (0=unlimited)
+MaxVersions            50
+
 # Number of bits for the Diffie-Hellman key exchange
 DHBits                 1024
 
index 9160cf91765ae1459039b02d9fe73ab229381f2c..f373618444ea5ff8855d05ed5009d55be58c8564 100644 (file)
@@ -30,6 +30,7 @@ static uns port = 8888;
 static uns dh_bits = 1024;
 static uns max_conn = 10;
 static uns session_timeout;
+uns max_versions;
 static byte *ca_cert_name = "?";
 static byte *server_cert_name = "?";
 static byte *server_key_name = "?";
@@ -68,6 +69,7 @@ static struct cf_section submitd_conf = {
     CF_UNS("SessionTimeout", &session_timeout),
     CF_UNS("MaxRequestSize", &max_request_size),
     CF_UNS("MaxAttachSize", &max_attachment_size),
+    CF_UNS("MaxVersions", &max_versions),
     CF_STRING("CACert", &ca_cert_name),
     CF_STRING("ServerCert", &server_cert_name),
     CF_STRING("ServerKey", &server_key_name),
@@ -167,7 +169,7 @@ tls_new_session(int sk)
   int err;
 
   err = gnutls_init(&s, GNUTLS_SERVER); TLS_CHECK(gnutls_init);
-  err = gnutls_set_default_priority(s); TLS_CHECK(gnutls_set_default_priority);                        // FIXME
+  err = gnutls_set_default_priority(s); TLS_CHECK(gnutls_set_default_priority);
   gnutls_credentials_set(s, GNUTLS_CRD_CERTIFICATE, cert_cred);
   gnutls_certificate_server_set_request(s, GNUTLS_CERT_REQUEST);
   gnutls_dh_set_prime_bits(s, dh_bits);
index 42a8e539e32271404debcb2c8ec878c491839364..6078eb995d7d95bb145d30a28275ad313515a188 100644 (file)
@@ -50,6 +50,7 @@ struct conn {
 };
 
 extern uns max_request_size, max_attachment_size, trace_commands;
+extern uns max_versions;
 extern byte *history_format;
 
 /* submitd.c */