rosial

lost memory
数据加载中……

《爪哇夜未眠》- REBOL篇 - REBOL的设置

    

      一般来说,REBOL不需要什么特别的设置(configuration),就可以执行。但是在某些环境下(特别是Unix),你可能需要设置REBOL_HOME环境变量。另外,在某些窗口环境中,可以将扩展名为“.r”的文件,设置为REBOL解释器的关联文件,以方便执行。

真正重要的是网络的设置与安全的设置,分成两小节来说明。

网络设置

      某些REBOL函数需要知道网络相关的设置,否则无法运作。例如send函数可以用来发送电子邮件。如果使用send,就必须先设置好外寄电子邮件服务器(SMTP Server)。如果没设置电子邮件服务器,就试图送出email,会得到下面的结果:

>> send jerrytsai@shinewave.com.tw "Hello"

** User Error: No network server for smtp is specified

** Near: smtp-port: open [scheme: 'smtp]

either only

      我们可以先设置网络,再执行send,就不会有问题了:

>> set-net [jerrytsai@shinewave.com.tw
      smtp.shinewave.com.tw]

>> send jerrytsai@shinewave.com.tw "Hello"

connecting to: smtp.shinewave.com.tw

     set-net是一个函数,后面需要一个区块(block)参数(所谓的区块,指的是:用中括号[ ]包围的一群值),区块内放置“至少”两个值,第一个值是寄件者的电子邮件信箱,第二个值是外寄电子邮件服务器(SMTP Server)。如果你不知道你的SMTP Server为何,可以从你的收信软件(例如:Microsoft Outlook)中找到这样的信息。

      如果每次使用send前都要先利用set-net来设置网络,也实在是太麻烦了。你可以将这道set-net描述写在user.r中。前一节提到,REBOL解释器启动时,会自动读进user.r文件内的REBOL script,并执行之。

Set-net的参数区块内,最少要指定两个值,最多可以有六个值,这六个值的意义依序分别为:

1.         电子邮件帐号

2.         电子邮件发送服务器

3.         电子邮件接收服务器

4.         proxy服务器

5.         proxy port(默认值是1080

6.         proxy type(默认值是“socks”)

      任何值如果不存在,可以利用none来表示。例如:

set-net [luke@rebol.com mail none our-proxy 1080 socks]

      这六个值中,第四到第六的值是和proxy有关。如果你是直接利用调制解调器(modem)或以太网(ethernet)联机到互联网(Internet),你不需要设置这三个值。如果你不确定这三个值应该么设置,你可以从你的网页浏览器(Web browser)中找到这些设置。以微软的Internet Explorer浏览器来说,在菜单中选择【工具】àInternet选项】à【连接】à【局域网设置】,即可找到Proxy的相关设置值。

      对于REBOL来说,proxy类型可以是sockssocks5socks4generic。其中genericgeneric CERN proxy的意思。

      其实,set-net这个函数会将这六个设置值依序放到下面的六个系统变量中:

SYSTEM/USER/EMAIL

SYSTEM/SCHEMES/DEFAULT/HOST

SYSTEM/SCHEMES/POP/HOST

SYSTEM/SCHEMES/DEFAULT/PROXY/HOST

SYSTEM/SCHEMES/DEFAULT/PROXY/PORT-ID

SYSTEM/SCHEMES/DEFAULT/PROXY/TYPE

      因此,我们也可以不使用set-net函数,而直接设置变量,例如:

>> SYSTEM/USER/EMAIL: jerrytsai@shinewave.com.tw

>> SYSTEM/SCHEMES/DEFAULT/HOST: smtp.shinewave.com.tw

     请注意,利用这种方法来设置变量时,冒号“:”必须紧接在变量后面,而冒号后面必须要有空格。

     你可以利用print来查看这些变量的值,例如:

>> print SYSTEM/SCHEMES/DEFAULT/HOST

msa.hinet.net

安全设置

          REBOL script执行时必须通过REBOL解释器,而REBOL解释器可以进行安全把关,如果解释器发现script试图进行一些“有安全疑虑”的动作时,就会显示出类似图1的对话框(dialog),警告用户。用户可以选择因应的方式:

l         Yes:允许script进行此次动作,继续执行

l         Allow all:允许script进行所有此类动作(以后不用再问了),继续执行

l         No:不允许script进行此动作,继续执行。这会产生Security Violation(违反安全)的Access Error存取错误)。

l         Quit:将此script终止执行

1  REBOL解释器询问我们,如何处置有安全疑虑的动作

      何谓“有安全疑虑”的动作?对于REBOL/CoreREBOL/ViewREBOL/View/ProREBOL/CommandREBOL/Command/View这五个标准的REBOL解释器来说,如果没有特别设置安全,在解释器预定的情况下,如果script试图修改磁盘内容或试图执行磁盘内的文件,就会出现上述的对话框(dialog),来让用户自行决定。藉此保护用户的文件系统,免于受到破坏。

      但是上述的安全设置,只有针对这五个标准的REBOL解释器。对于REBOL/BaseREBOL/Pro、与REBOL/Face来说,完全没有安全的限制。因为这三个精简核心版(kernel)的解释器是给软件开发人员用的,而不是给一般的软件用户用的。软件开发人员只会使用REBOL/BaseREBOL/Pro、与REBOL/Face来测试自己开发出来的REBOL script,而不会用它们来执行其它的REBOL script

      如果精简核心版的解释器想要和标准版的解释器一样,藉此保护用户的文件系统,免于受到破坏,可以利用下面的叙述:

secure [file [allow read  ask write  ask execute]]【注】

【注】secure后面中括号内的文字,就是一种很简单的方言,由security函数制订,专门用来描述对于网络和磁盘存取动作的限制。方言中出现的字,即使某些和REBOL语言的函数一样(例如此处的readaskwrite),但意义上完全是两回事。这就是方言!用来表达特殊领域,且不受到原本REBOL语法的规范。

      这里的意思是:对于文件的安全控管方式,允许文件被读(allow read)、写入的时候需要询问用户(ask write)、执行文件的时候需要询问用户(ask execute)。

      我们可以利用security函数来针对网络、整个文件系统、特定文件或目录,进行安全上的限制。为了方便起见,我们通常将安全设置的叙述,放在rebol.r中。

Security函数后面可以跟着一个字或一个区块。如果是一个字,则表示网络和文件系统都采用此种安全处理方式。如果是一个区块,可以做比较细微的更动。例如:

Security ask

      上面表示,不管对于网络或磁盘系统的存取,都必须先询问用户,取得同意。

Security [ net quit file ask %./ allow ]

      上面表示,对于网络的存取一概拒绝,且自动结束程序的执行。对于文件系统,必须先询问用户,取得同意。对于目前目录下(“%.”表示目前的目录)的所有文件,一律允许存取。

关于security函数的详细用法,你可以利用help函数(或?)来取得说明文件:

>> ? security

      如果你想执行某个可信任的REBOL脚本,想破除安全限制,你可以利用REBOL解释器的命令行选项“-s”【注】,如下所示。除了“-s”,还有一个“+s”的选项,其作用刚好和“-s”相反。

REBOL -s TrustWorthy.r

【注】这年头,凡事还是小心一点好,建议你不要轻易使用“-s”。

发表日期: Feb. 29, 2004

posted on 2006-07-10 13:26 rosial 阅读(775) 评论(1)  编辑  收藏 所属分类: 蔡学镛

评论

# re: 《爪哇夜未眠》- REBOL篇 - REBOL的设置  回复  更多评论   

dsklasmilksanujauksa
2006-08-09 14:41 | 王鹏

只有注册用户登录后才能发表评论。


网站导航: