IP address ACLs
authorAdam Chlipala <adamc@hcoop.net>
Sun, 18 Nov 2007 17:41:06 +0000 (17:41 +0000)
committerAdam Chlipala <adamc@hcoop.net>
Sun, 18 Nov 2007 17:41:06 +0000 (17:41 +0000)
src/domain.sml

index 5a43f3c..6d7f2ac 100644 (file)
@@ -48,6 +48,9 @@ fun your_groups () = !your_grps
 val your_pths = ref SS.empty
 fun your_paths () = !your_pths
 
+val your_ipss = ref SS.empty
+fun your_ips () = !your_ipss
+
 val world_readable = SS.addList (SS.empty, Config.worldReadable)
 val readable_pths = ref world_readable
 fun readable_paths () = !readable_pths
@@ -66,7 +69,9 @@ fun setUser user =
        your_grps := Acl.class {user = getUser (),
                                class = "group"};
        your_pths := your_paths;
-       readable_pths := SS.union (your_paths, world_readable)
+       readable_pths := SS.union (your_paths, world_readable);
+       your_ipss := Acl.class {user = getUser (),
+                               class = "ip"}
     end
 
 fun validIp s =
@@ -97,6 +102,7 @@ fun checkPath paths path =
     andalso SS.exists (fn s' => path = s' orelse String.isPrefix (s' ^ "/") path) (paths ())
 val yourPath = checkPath your_paths
 val readablePath = checkPath readable_paths
+fun yourIp s = SS.member (your_ips (), s)
 
 fun yourDomainHost s =
     yourDomain s
@@ -177,6 +183,10 @@ val _ = Env.type_one "readable_path"
        Env.string
        readablePath
 
+val _ = Env.type_one "your_ip"
+       Env.string
+       yourIp
+
 val _ = Env.type_one "node"
        Env.string
        validNode