61 lines
2.0 KiB
Racket
61 lines
2.0 KiB
Racket
#lang scribble/doc
|
|
@(require "utils.ss")
|
|
|
|
@title[#:tag "security"]{Security Guards}
|
|
|
|
Before a primitive procedure accesses the filesystem or creates a
|
|
network connection, it should first consult the current security guard
|
|
to determine whether such access is allowed for the current thread.
|
|
|
|
File access is normally preceded by a call to
|
|
@cppi{scheme_expand_filename}, which accepts flags to indicate the
|
|
kind of filesystem access needed, so that the security guard is
|
|
consulted automatically.
|
|
|
|
An explicit filesystem-access check can be made by calling
|
|
@cpp{scheme_security_check_file}. Similarly, an explicit
|
|
network-access check is performed by calling
|
|
@cpp{scheme_security_check_network}.
|
|
|
|
@; ----------------------------------------------------------------------
|
|
|
|
|
|
@function[(void scheme_security_check_file
|
|
[const-char* who]
|
|
[char* filename]
|
|
[int guards])]{
|
|
|
|
Consults the current security manager to determine whether access is
|
|
allowed to @var{filename}. The @var{guards} argument should be a
|
|
bitwise combination of the following:
|
|
|
|
@itemize{
|
|
|
|
@item{@cppi{SCHEME_GUARD_FILE_READ}}
|
|
@item{@cppi{SCHEME_GUARD_FILE_WRITE}}
|
|
@item{@cppi{SCHEME_GUARD_FILE_EXECUTE}}
|
|
@item{@cppi{SCHEME_GUARD_FILE_DELETE}}
|
|
@item{@cppi{SCHEME_GUARD_FILE_EXISTS} (do not combine with other values)}
|
|
|
|
}
|
|
|
|
The @var{filename} argument can be @cpp{NULL} (in which case
|
|
@scheme[#f] is sent to the security manager's procedure), and
|
|
@var{guards} should be @cppi{SCHEME_GUARD_FILE_EXISTS} in that case.
|
|
|
|
If access is denied, an exception is raised.}
|
|
|
|
|
|
@function[(void scheme_security_check_network
|
|
[const-char* who]
|
|
[char* host]
|
|
[int portno])]{
|
|
|
|
Consults the current security manager to determine whether access is
|
|
allowed for creating a client connection to @var{host} on port number
|
|
@var{portno}. If @var{host} is @cpp{NULL}, the security manager is
|
|
consulted for creating a server at port number @var{portno}.
|
|
|
|
If access is denied, an exception is raised.}
|
|
|