[BACK]Return to cgiasir.sm1 CVS log [TXT][DIR] Up to [local] / OpenXM / src / kan96xx / Doc

Annotation of OpenXM/src/kan96xx/Doc/cgiasir.sm1, Revision 1.5

1.4       takayama    1: %$Id: cgiasir.sm1,v 1.16 2005/02/27 07:29:49 taka Exp $
1.5     ! takayama    2: %$OpenXM: OpenXM/src/kan96xx/Doc/cgiasir.sm1,v 1.4 2005/02/27 08:22:56 takayama Exp $
1.1       takayama    3: [(parse) (ox.sm1) pushfile] extension
                      4: [(parse) (cgi.sm1) pushfile] extension
                      5:
                      6: % Default value of timer
                      7: /cgiasir.tlimit (120) def
                      8: % ------------------  set security flags of ox_asir.
                      9: [(oxasirSetDefaultSecureFlags)
                     10:  [(It sets default secure flags for oxasir.sm1)]
                     11: ] putUsages
                     12: /oxasirSetDefaultSecureFlags {
                     13:   oxasir.ccc [ ] eq { ox_asirConnectMethod } { } ifelse
                     14:   % cf. oxasir.asir
                     15:   (ox_ptod) oxasirSetSecureFlag
                     16:   (ox_dtop) oxasirSetSecureFlag
                     17:   (sm1_ptozp_subst) oxasirSetSecureFlag
                     18:   (sm1_rat2plist) oxasirSetSecureFlag
                     19: } def
                     20:
                     21: [(oxasirSetSecureMode)
                     22:  [(oxasirSetSecureMode)
                     23:   (It starts the restricted asir.)
                     24:   (cf.  oxSecureFlag)
                     25: ]] putUsages
                     26: /oxasirSetSecureMode {
                     27:   oxasir.ccc [ ] eq { ox_asirConnectMethod } { } ifelse
                     28:   oxasir.ccc $ctrl("error_in_timer",1);$ oxsubmit
                     29:   oxasir.ccc $set_secure_mode(1);$ oxsubmit
                     30: } def
                     31:
                     32: [(oxasirSetSecureFlag)
                     33:  [(name oxasirSetSecureFlag)
                     34:   (It sets the export flag for the function <<name>>)
                     35:   (cf.  oxSetSecureMode)
                     36: ]] putUsages
                     37: /oxasirSetSecureFlag {
                     38:   /arg1 set
                     39:   [/fff ] pushVariables
                     40:   [
                     41:     /fff arg1 def
                     42:     oxasir.ccc [ ] eq { ox_asirConnectMethod } { } ifelse
                     43:     oxasir.ccc [$set_secure_flag("$ fff toString $",1);$] cat oxsubmit
                     44:     oxasir.ccc oxpopcmo
                     45:   ] pop
                     46:   popVariables
                     47: } def
                     48:
                     49:
                     50: /cgiAsir.test {
                     51:   oxasirSetDefaultSecureFlags
                     52:   (primadec) oxasirSetSecureFlag
                     53:   oxasirSetSecureMode
                     54: } def
                     55:
                     56:
                     57: %---------- server side ----------------------
                     58: % This is a default value. This is used when the environment variable
                     59: % CGI_ASIR_ALLOW is not used.
                     60: /cgiAsirAllow
                     61:   [
1.4       takayama   62: %% They are required by the system
                     63:      (ox103_reset)
                     64: %%%%%%%%%%%%%%%%%%%%%%%%%%
1.1       takayama   65: %    (primadec)
                     66: %    (fctr)
                     67: %    (dp_gr_main)
                     68: %    (nd_gr_main)
                     69:   ]
                     70: def
                     71: /ox_cgiAsirConnectMethod {
                     72:    oxasir.ccc [ ] eq {
                     73:      ox_asirConnectMethod
                     74:      oxasirSetDefaultSecureFlags
                     75:
                     76:      [(getenv) (CGI_ASIR_ALLOW)] extension isString {
                     77:         [(getenv) (CGI_ASIR_ALLOW)] extension  /cgiAsirAllow.s set
                     78:         [(parse) cgiAsirAllow.s] extension pop /cgiAsirAllow.p set
                     79:         cgiAsirAllow.p isArray {
                     80:            cgiAsirAllow.p /cgiAsirAllow  set
                     81:         } {  } ifelse
                     82:      } {  } ifelse
                     83:      cgiAsirAllow {oxasirSetSecureFlag} map
                     84:
                     85:      oxasirSetSecureMode
                     86:    } { } ifelse
                     87: } def
                     88:
                     89: /cgiAsir {
                     90:   {
                     91:    [(getenv) (CONTENT_LENGTH)] extension /cgi.content_length set
                     92:    cgi.content_length isString {
                     93:    } {
                     94:        cgiAsir.errorMessage message  exit
                     95:    } ifelse
                     96:    cgi.content_length .. (integer) dc /cgi.content_length set
                     97:    cgi.content_length 1 lt {
                     98:        cgiAsir.errorMessage message  exit
                     99:    } { } ifelse
                    100:    [(read) 0 cgi.content_length] extension /cgi.query_string set
                    101:    cgi.query_string isString {
                    102:      cgi.query_string length 0 eq  {
                    103:        cgiAsir.errorMessage message  exit
                    104:      } { } ifelse
                    105:    }
                    106:    {
                    107:      cgiAsir.errorMessage message  exit
                    108:    } ifelse
                    109:    cgi.body.http0 message
                    110:    cgi.query_string cgiAsir.0
                    111:    cgi.body cgiReplyInHttp0 /cgi.body.http set
                    112:    cgi.body.http message
                    113:    exit
                    114:   } loop
                    115:   [(flush)] extension
                    116: } def
                    117:
                    118: /cgiAsir.errorMessage
                    119:   [ (Content-Type: text/html) nl
                    120:     nl
                    121:     (<html><body>) nl
                    122:     (Input <br> asir-command <br>  without semicolon. <br> <br>) nl
                    123:     (<pre> Example) nl
                    124:     $primadec([x^3-1],[x])$ nl
                    125:     $  $ nl
                    126:     $Commands accepted are $ nl
                    127:     [(getenv)  (CGI_ASIR_ALLOW)] extension tag 0 eq not {
                    128:      [(getenv) (CGI_ASIR_ALLOW)] extension nl nl
                    129:     } {  } ifelse
                    130:     $Execution CPU time limit is $
                    131:     cgiasir.tlimit toString  (  seconds.) nl nl
                    132:     (</pre>) nl
1.5     ! takayama  133:     [(getenv)  (CGI_ASIR_MSG)] extension tag 0 eq not {
        !           134:      [(getenv) (CGI_ASIR_MSG)] extension nl nl
        !           135:     } {  } ifelse
1.1       takayama  136:     (<form method="POST">) nl
                    137:     (<input type=submit>) nl
                    138:     (<textarea name="oxMessageBody") nl
                    139:     ( rows=10 cols="80" wrap="soft"></textarea>) nl
                    140:     (</form>) nl
                    141:     (</body></html>) nl
                    142:   ] cat
                    143: def
                    144:
                    145: /cgiAsir.0 {
1.3       takayama  146:   cgiAsir.0a
                    147:   cgiAsir.0b
                    148: } def
                    149:
                    150: /cgiAsir.0a {
1.1       takayama  151:   /arg1 set
                    152:   [/sss /kv /comm /i /acti0 /pError] pushVariables
                    153:   [
                    154:     /sss arg1 def
                    155: % Step 1.  analyze the query string in URL encoding.
                    156:     [(cgiUrlEncodingToKeyValuePair) sss] extension /kv set
                    157:     kv (oxMessageBody) getNode /comm set
                    158: %   [nl nl] cat message sss message kv message  % for debug.
                    159:     comm /cgi.body set
                    160:
                    161: % Step 2. Enclosed cgi.body by timer(limit, expr, "interrupted.");
                    162:    [(getenv) (CGI_ASIR_TLIMIT)] extension tag 0 eq {
                    163:    } {
                    164:      [(getenv) (CGI_ASIR_TLIMIT)] extension toString /cgiasir.tlimit set
                    165:    } ifelse
                    166:    [ $timer($ cgiasir.tlimit $,$
                    167:      cgi.body
                    168:      $, "Exceeded the CPU time resource (<$
                    169:      cgiasir.tlimit
                    170:      $ seconds) or the command is not allowed or the syntax error.");$
                    171:    ] cat /cgi.body set
                    172:
                    173: % Step 3. Calling asir
                    174:     oxasir.ccc [ ] eq { ox_cgiAsirConnectMethod } { } ifelse
                    175:     oxasir.ccc cgi.body oxsubmit
1.3       takayama  176:   ] pop
                    177:   popVariables
                    178: } def
                    179:
                    180: /cgiAsir.0b {
                    181: % Step 4. Request the result
1.1       takayama  182:     oxasir.ccc oxpopstring /cgi_body set
                    183:     % set for cgiReplyInHttp0
                    184:     /@@@stdout (NONE) def  /@@@stderr (NONE) def
                    185:     /cgi.body cgi_body def
                    186: } def
                    187:
                    188: /cgi.test2 {
                    189:   [
                    190:    [(oxMessageBody)
                    191:    [$primadec([x^2-1],[x])$
                    192:    ] cat
                    193:    ]] /ff set
                    194:    [(cgiKeyValuePairToUrlEncodingString) ff] extension /ff1 set
                    195:    ff1 message
                    196:    ff1 cgiAsir.0
                    197:    cgi.body message
                    198: } def
                    199:
                    200: % test2.txt :  oxMessageBody=2-1%0A
                    201: % env=CONTENT_LENGTH=20  cgi-asir.sh <test2.txt

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>