aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/cjr_print.sml
diff options
context:
space:
mode:
authorGravatar Adam Chlipala <adamc@hcoop.net>2009-05-02 18:20:15 -0400
committerGravatar Adam Chlipala <adamc@hcoop.net>2009-05-02 18:20:15 -0400
commit2d37bf0ef2c634819293a191eff9799934b08346 (patch)
tree0baf5761c294a6cf6f12d93b16849bec6a4eb9cd /src/cjr_print.sml
parent20d3fa9974879189544b752e43842a67c1fec0b9 (diff)
Runtime URL and MIME type filtering
Diffstat (limited to 'src/cjr_print.sml')
-rw-r--r--src/cjr_print.sml34
1 files changed, 34 insertions, 0 deletions
diff --git a/src/cjr_print.sml b/src/cjr_print.sml
index 3a124ff4..cb92588d 100644
--- a/src/cjr_print.sml
+++ b/src/cjr_print.sml
@@ -3176,6 +3176,34 @@ fun p_file env (ds, ps) =
acc,
string "))"]))
NONE cookies
+
+ fun makeChecker (name, rules : Settings.rule list) =
+ box [string "int ",
+ string name,
+ string "(const char *s) {",
+ newline,
+ box [p_list_sep (box [])
+ (fn rule =>
+ box [string "if (!str",
+ case #kind rule of
+ Settings.Exact => box [string "cmp(s, \"",
+ string (String.toString (#pattern rule)),
+ string "\"))"]
+ | Settings.Prefix => box [string "ncmp(s, \"",
+ string (String.toString (#pattern rule)),
+ string "\", ",
+ string (Int.toString (size (#pattern rule))),
+ string "))"],
+ string " return ",
+ string (case #action rule of
+ Settings.Allow => "1"
+ | Settings.Deny => "0"),
+ string ";",
+ newline]) rules,
+ string "return 0;",
+ newline],
+ string "}",
+ newline]
in
box [string "#include <stdio.h>",
newline,
@@ -3218,6 +3246,12 @@ fun p_file env (ds, ps) =
string "}",
newline,
newline,
+
+ makeChecker ("uw_check_url", Settings.getUrlRules ()),
+ newline,
+
+ makeChecker ("uw_check_mime", Settings.getMimeRules ()),
+ newline,
string "extern void uw_sign(const char *in, char *out);",
newline,