src/Pure/General/secure.ML
author wenzelm
Wed, 11 Oct 2006 22:55:14 +0200
changeset 20977 dbf1eca9b34e
parent 20925 2d19e511fe2c
child 20992 05c3703cc6c5
permissions -rw-r--r--
tuned signature;
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
20925
2d19e511fe2c Secure critical operations.
wenzelm
parents:
diff changeset
     1
(*  Title:      Pure/General/secure.ML
2d19e511fe2c Secure critical operations.
wenzelm
parents:
diff changeset
     2
    ID:         $Id$
2d19e511fe2c Secure critical operations.
wenzelm
parents:
diff changeset
     3
    Author:     Makarius
2d19e511fe2c Secure critical operations.
wenzelm
parents:
diff changeset
     4
2d19e511fe2c Secure critical operations.
wenzelm
parents:
diff changeset
     5
Secure critical operations.
2d19e511fe2c Secure critical operations.
wenzelm
parents:
diff changeset
     6
*)
2d19e511fe2c Secure critical operations.
wenzelm
parents:
diff changeset
     7
2d19e511fe2c Secure critical operations.
wenzelm
parents:
diff changeset
     8
signature SECURE =
2d19e511fe2c Secure critical operations.
wenzelm
parents:
diff changeset
     9
sig
20977
dbf1eca9b34e tuned signature;
wenzelm
parents: 20925
diff changeset
    10
  val set_secure: unit -> unit
20925
2d19e511fe2c Secure critical operations.
wenzelm
parents:
diff changeset
    11
  val is_secure: unit -> bool
2d19e511fe2c Secure critical operations.
wenzelm
parents:
diff changeset
    12
  val deny_secure: string -> unit
2d19e511fe2c Secure critical operations.
wenzelm
parents:
diff changeset
    13
  val use: string -> unit
2d19e511fe2c Secure critical operations.
wenzelm
parents:
diff changeset
    14
  val use_text: (string -> unit) * (string -> 'a) -> bool -> string -> unit
2d19e511fe2c Secure critical operations.
wenzelm
parents:
diff changeset
    15
  val commit: unit -> unit
2d19e511fe2c Secure critical operations.
wenzelm
parents:
diff changeset
    16
end;
2d19e511fe2c Secure critical operations.
wenzelm
parents:
diff changeset
    17
2d19e511fe2c Secure critical operations.
wenzelm
parents:
diff changeset
    18
structure Secure: SECURE =
2d19e511fe2c Secure critical operations.
wenzelm
parents:
diff changeset
    19
struct
2d19e511fe2c Secure critical operations.
wenzelm
parents:
diff changeset
    20
2d19e511fe2c Secure critical operations.
wenzelm
parents:
diff changeset
    21
(* secure flag *)
2d19e511fe2c Secure critical operations.
wenzelm
parents:
diff changeset
    22
2d19e511fe2c Secure critical operations.
wenzelm
parents:
diff changeset
    23
val secure = ref false;
2d19e511fe2c Secure critical operations.
wenzelm
parents:
diff changeset
    24
20977
dbf1eca9b34e tuned signature;
wenzelm
parents: 20925
diff changeset
    25
fun set_secure () = secure := true;
20925
2d19e511fe2c Secure critical operations.
wenzelm
parents:
diff changeset
    26
fun is_secure () = ! secure;
2d19e511fe2c Secure critical operations.
wenzelm
parents:
diff changeset
    27
2d19e511fe2c Secure critical operations.
wenzelm
parents:
diff changeset
    28
fun deny_secure msg = deny (is_secure ()) msg;
2d19e511fe2c Secure critical operations.
wenzelm
parents:
diff changeset
    29
2d19e511fe2c Secure critical operations.
wenzelm
parents:
diff changeset
    30
2d19e511fe2c Secure critical operations.
wenzelm
parents:
diff changeset
    31
(* critical operations *)
2d19e511fe2c Secure critical operations.
wenzelm
parents:
diff changeset
    32
2d19e511fe2c Secure critical operations.
wenzelm
parents:
diff changeset
    33
fun secure_mltext () = deny_secure "Cannot evaluate ML source in secure mode";
2d19e511fe2c Secure critical operations.
wenzelm
parents:
diff changeset
    34
2d19e511fe2c Secure critical operations.
wenzelm
parents:
diff changeset
    35
val orig_use = use;
2d19e511fe2c Secure critical operations.
wenzelm
parents:
diff changeset
    36
val orig_use_text = use_text;
2d19e511fe2c Secure critical operations.
wenzelm
parents:
diff changeset
    37
2d19e511fe2c Secure critical operations.
wenzelm
parents:
diff changeset
    38
fun use file = (secure_mltext (); orig_use file);
2d19e511fe2c Secure critical operations.
wenzelm
parents:
diff changeset
    39
fun use_text pr verbose txt = (secure_mltext (); orig_use_text pr verbose txt);
2d19e511fe2c Secure critical operations.
wenzelm
parents:
diff changeset
    40
2d19e511fe2c Secure critical operations.
wenzelm
parents:
diff changeset
    41
(*commit is dynamically bound!*)
2d19e511fe2c Secure critical operations.
wenzelm
parents:
diff changeset
    42
fun commit () = orig_use_text Output.ml_output false "commit();";
2d19e511fe2c Secure critical operations.
wenzelm
parents:
diff changeset
    43
2d19e511fe2c Secure critical operations.
wenzelm
parents:
diff changeset
    44
end;
2d19e511fe2c Secure critical operations.
wenzelm
parents:
diff changeset
    45
2d19e511fe2c Secure critical operations.
wenzelm
parents:
diff changeset
    46
val use = Secure.use;
2d19e511fe2c Secure critical operations.
wenzelm
parents:
diff changeset
    47
val use_text = Secure.use_text;