]> mj.ucw.cz Git - moe.git/commitdiff
Submitd: each access rule can contain multiple addrmasks.
authorMartin Mares <mj@ucw.cz>
Thu, 28 Jun 2007 19:06:34 +0000 (21:06 +0200)
committerMartin Mares <mj@ucw.cz>
Thu, 28 Jun 2007 19:06:34 +0000 (21:06 +0200)
TODO
submit/config
submit/submitd.c
submit/submitd.h

diff --git a/TODO b/TODO
index cf1a8609a6eb04f3d06223f20885f76ef5f5f6a3..2977d02081867d519871d9a3ad4250bf6e4d7bce 100644 (file)
--- a/TODO
+++ b/TODO
@@ -20,7 +20,6 @@ New submitter:
 - Checking of contest time (and per-contestant exceptions)
 - Keeping history and pruning status files
 - Remember hashes
-- multiple IP ranges per Access rule
 - contest: override failed check
 - contest: local history
 - contest: task status cache
index 02dcc543317fc3fdc8a923896d437963f4c2cc7c..9cf54f204c9cee25ac7717e8ec2c9681d96e1b87 100644 (file)
@@ -33,7 +33,7 @@ ServerKey             certs/server-key.pem
 
 # Rules for accepting connections (first matching rule is used)
 Access {
-       # IP address range matched by this rule
+       # IP address ranges matched by this rule
        IP              127.0.0.1
 
        # Administrator access allowed (does not do anything yet)
@@ -48,12 +48,6 @@ Access {
 
 Access {
        IP              195.113.18.125
-       Admin           0
-       PlainText       0
-       MaxConn         2
-}
-
-Access {
        IP              10.10.8.0/24
        Admin           0
        PlainText       0
index e8578f601437ee06ca87ddea4506b77c56d6be00..4c1415b48d08d44aa31bdebbee9116a26d3c9d97 100644 (file)
@@ -39,10 +39,18 @@ uns max_request_size;
 uns max_attachment_size;
 uns trace_commands;
 
+static struct cf_section ip_node_conf = {
+  CF_TYPE(struct ip_node),
+  CF_ITEMS {
+    CF_USER("IP", PTR_TO(struct ip_node, addrmask), &ip_addrmask_type),
+    CF_END
+  }
+};
+
 static struct cf_section access_conf = {
   CF_TYPE(struct access_rule),
   CF_ITEMS {
-    CF_USER("IP", PTR_TO(struct access_rule, addrmask), &ip_addrmask_type),
+    CF_LIST("IP", PTR_TO(struct access_rule, ip_list), &ip_node_conf),
     CF_UNS("Admin", PTR_TO(struct access_rule, allow_admin)),
     CF_UNS("PlainText", PTR_TO(struct access_rule, plain_text)),
     CF_UNS("MaxConn", PTR_TO(struct access_rule, max_conn)),
@@ -105,8 +113,9 @@ static struct access_rule *
 lookup_rule(u32 ip)
 {
   CLIST_FOR_EACH(struct access_rule *, r, access_rules)
-    if (ip_addrmask_match(&r->addrmask, ip))
-      return r;
+    CLIST_FOR_EACH(struct ip_node *, n, r->ip_list)
+      if (ip_addrmask_match(&n->addrmask, ip))
+       return r;
   return NULL;
 }
 
index e3ae41ed5dee0942f3a98a5a0e71c7c6d1c43ca6..5d5eea276a4b08b9818dd4149ecd1d87ff59086e 100644 (file)
 #include <gnutls/gnutls.h>
 #include <gnutls/x509.h>
 
-struct access_rule {
+struct ip_node {
   cnode n;
   struct ip_addrmask addrmask;
+};
+
+struct access_rule {
+  cnode n;
+  clist ip_list;
   uns allow_admin;
   uns plain_text;
   uns max_conn;