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)
# 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
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 = "?";
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),
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);