Rev 11104 | Rev 12047 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed
Rev | Author | Line No. | Line |
---|---|---|---|
10 | reyssat | 1 | /* Copyright (C) 1998-2003 XIAO, Gang of Universite de Nice - Sophia Antipolis |
2 | * |
||
3 | * This program is free software; you can redistribute it and/or modify |
||
4 | * it under the terms of the GNU General Public License as published by |
||
5 | * the Free Software Foundation; either version 2 of the License, or |
||
6 | * (at your option) any later version. |
||
7 | * |
||
8 | * This program is distributed in the hope that it will be useful, |
||
9 | * but WITHOUT ANY WARRANTY; without even the implied warranty of |
||
10 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
||
11 | * GNU General Public License for more details. |
||
12 | * |
||
13 | * You should have received a copy of the GNU General Public License |
||
14 | * along with this program; if not, write to the Free Software |
||
15 | * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. |
||
16 | */ |
||
17 | |||
18 | /* WWW multipurpose server, header definitions */ |
||
19 | |||
8185 | bpr | 20 | #include "Lib/libwims.h" |
10 | reyssat | 21 | #include "config.h" |
22 | #include "includes.h" |
||
23 | #include "wimsdef.h" |
||
24 | |||
8185 | bpr | 25 | #define evalue strevalue |
26 | |||
27 | /* limit of query_string. */ |
||
10 | reyssat | 28 | #define QUERY_STRING_LIMIT 204799 |
8185 | bpr | 29 | /* maximal length of deposited file */ |
10 | reyssat | 30 | #define MAX_DEPOSITLEN (8*1024*1024) |
8185 | bpr | 31 | /* maximal number of registered variables */ |
10 | reyssat | 32 | #define MAX_VAR_NUM 512 |
8185 | bpr | 33 | /* length limit for public_html/bin executable names */ |
10 | reyssat | 34 | #define MAX_EXEC_NAME 31 |
8185 | bpr | 35 | /* max level of nested fors */ |
8303 | bpr | 36 | #define MAX_FOR_LEVEL 12 |
8185 | bpr | 37 | /* max nested read; to avoid infinite loop */ |
10 | reyssat | 38 | #define MAX_READNEST 20 |
8185 | bpr | 39 | /* number of cached working files */ |
10 | reyssat | 40 | #define MAX_MCACHE 32 |
8185 | bpr | 41 | /* max sort items. */ |
10 | reyssat | 42 | #define MAX_SORT_ITEM 5000 |
8185 | bpr | 43 | /* max randperm() items. Should be compatible to MAX_LINELEN. */ |
10 | reyssat | 44 | #define MAX_RANDPERM 2000 |
8185 | bpr | 45 | /* Number of session random numbers */ |
10 | reyssat | 46 | #define MAX_SESRANDOM 64 |
8286 | bpr | 47 | /* Limit of output length. This can be configured. */ |
2710 | guerimand | 48 | #define OUTPUT_LENGTH_LIMIT (1024*1024) |
8286 | bpr | 49 | /* limit of items in value lists */ |
10 | reyssat | 50 | #define MAX_VALUE_LIST 2048 |
8284 | bpr | 51 | /* We fix a limit for the number of goto's (or for jumps) executed, |
52 | * in order to avoid infinite loop or DOS attack. |
||
53 | */ |
||
54 | #define GOTO_LIMIT 500000 |
||
55 | /* maximal nesting level of substitutions. */ |
||
56 | #define SUBST_LIMIT 16 |
||
57 | /* Limit for instex, insplot, insPLOT. */ |
||
58 | #define INS_LIMIT 500 |
||
8185 | bpr | 59 | /* file to hold last output */ |
60 | #define lastout "last.html" |
||
61 | /* Access policy configuration file */ |
||
10 | reyssat | 62 | #define ACCESS_CONF "../log/wims.conf.access" |
8185 | bpr | 63 | /* Should not be changed */ |
10 | reyssat | 64 | #define SESSION_BASE "sessions" |
65 | #define S2_BASE "s2" |
||
66 | |||
8185 | bpr | 67 | /* Prefix char for exec functions */ |
10 | reyssat | 68 | #define exec_prefix_char '!' |
8185 | bpr | 69 | /* Prefix char for calc functions */ |
10 | reyssat | 70 | #define calc_prefix_char '!' |
8185 | bpr | 71 | /* Prefix char for goto labels */ |
10 | reyssat | 72 | #define label_prefix_char ':' |
8185 | bpr | 73 | /* Prefix for tags in data files */ |
10 | reyssat | 74 | #define tag_prefix_char ':' |
8185 | bpr | 75 | /* Prefix char for comment lines */ |
10 | reyssat | 76 | #define comment_prefix_char '#' |
8185 | bpr | 77 | /* prefix to user variable names */ |
78 | #define var_prefix "w_" |
||
79 | /* (user) prefix for mathematical fonts */ |
||
80 | #define mathfont_prefix "m_" |
||
81 | /* prefix for internal variables */ |
||
10 | reyssat | 82 | #define wims_prefix "wims_" |
83 | #define wpflen strlen(wims_prefix) |
||
8185 | bpr | 84 | /* name of variable definition file */ |
10 | reyssat | 85 | #define default_var_def "var.def" |
8185 | bpr | 86 | /* Not configured */ |
10 | reyssat | 87 | #define error_data_string "wims_error_data" |
8185 | bpr | 88 | /* Name of files containing error messages. */ |
10 | reyssat | 89 | #define user_error_msg_file "msg/user_error.phtml" |
90 | #define module_error_msg_file "msg/module_error.msg" |
||
8185 | bpr | 91 | /* directory containing log files */ |
10 | reyssat | 92 | #define log_dir "../log" |
93 | #define class_base "../log/classes" |
||
8185 | bpr | 94 | /* What should indicate that a file name given by the user |
95 | * would allow him to go upstairs in the directory tree? |
||
96 | * We shouldn't use "../", otherwise the user may just specify |
||
97 | * ".." as name and go upstairs one step. |
||
98 | */ |
||
10 | reyssat | 99 | #define parent_dir_string ".." |
8185 | bpr | 100 | /* This one is stronger. */ |
10 | reyssat | 101 | #define PARENT_DIR_STRING "/../" |
8185 | bpr | 102 | /* kernel daemon socket file. Should match that of wimslogd. */ |
10 | reyssat | 103 | #define ksockfile "../tmp/log/.wimslogd" |
8185 | bpr | 104 | /* this directory should not exist. Do not change the definition! */ |
10 | reyssat | 105 | #define sysmask_trigger_dir "sysmask/stat/trigger" |
106 | |||
107 | typedef struct { |
||
108 | int lineno; /* line number */ |
||
8185 | bpr | 109 | /* long fpt; */ /* position in the file */ |
10 | reyssat | 110 | char varname[MAX_NAMELEN+1]; |
8185 | bpr | 111 | double varval, varend, step; |
10 | reyssat | 112 | char *list_pt, *bufpt; |
8185 | bpr | 113 | int from; /* from ... to ... if 0, list if 1 */ |
10 | reyssat | 114 | } FOR_STACK; |
115 | |||
116 | typedef struct { |
||
117 | char *address; |
||
118 | short int execcode, varcode; |
||
119 | int isstart; /* bit 0: start line; bit 1: exec; bit 2: label. bit 3: hard comment. bit 4: soft comment */ |
||
120 | unsigned int llen; |
||
121 | } LINE_STRUCT; |
||
122 | |||
123 | typedef struct { |
||
124 | char name[MAX_FNAME+1]; |
||
125 | int l; |
||
126 | int linepointer; |
||
10051 | bpr | 127 | char filepath[MAX_FNAME+1]; |
8185 | bpr | 128 | /* nocache bits: 0. !nocache; 1. hard nocache; 2. isfromcache; 3. isbase; */ |
10 | reyssat | 129 | short int for_idx, nocache; |
130 | int linecnt; |
||
131 | char *textbuf; |
||
132 | LINE_STRUCT *lines; |
||
133 | FOR_STACK *for_stack; |
||
134 | } WORKING_FILE; |
||
135 | |||
8185 | bpr | 136 | /* from auth.c */ |
137 | extern char loadavg[64]; |
||
138 | void check_load(int th); |
||
139 | void auth(void); |
||
140 | void checkrafale(void); |
||
141 | void access_check(int isclass); |
||
10 | reyssat | 142 | |
8185 | bpr | 143 | /* from calc.c */ |
144 | void calc_tolower(char *p); |
||
145 | void calc_toupper(char *p); |
||
146 | void calc_lookup(char *p); |
||
147 | void calc_randitem(char *p); |
||
148 | void calc_mexec(char *p); |
||
149 | void _calc_exec(char *p, char *arg0, char *arg1, int n); |
||
150 | void calc_detag(char *p); |
||
151 | typedef struct MYFUNCTION { |
||
152 | char *name; |
||
153 | int tag; |
||
154 | void (*routine) (char *p); |
||
155 | } MYFUNCTION; |
||
156 | |||
157 | extern MYFUNCTION calc_routine[]; |
||
158 | extern int CALC_FN_NO; |
||
159 | |||
160 | void calc_append(char *p); |
||
161 | void calc_charof(char *p); |
||
162 | void calc_checkhost(char *p); |
||
163 | void calc_columnof(char *p); |
||
164 | void calc_daemon(char *p); |
||
165 | void calc_date(char *p); |
||
166 | void calc_debug(char *p); |
||
167 | void calc_declosing(char *p); |
||
168 | void calc_defof(char *p); |
||
169 | void calc_embraced(char *p); |
||
170 | void calc_evalsubst(char *p); |
||
171 | void calc_exec(char *p); |
||
172 | void calc_hex(char *p); |
||
173 | void calc_imgrename(char *p); |
||
174 | void calc_itemof(char *p); |
||
175 | void calc_leveldata(char *p); |
||
176 | void calc_lineof(char *p); |
||
177 | void calc_listfile(char *p); |
||
178 | void calc_listintersect(char *p); |
||
179 | void calc_listunion(char *p); |
||
180 | void calc_listuniq(char *p); |
||
181 | void calc_mailurl(char *p); |
||
182 | void calc_makelist(char *p); |
||
183 | void calc_mathsubst(char *p); |
||
184 | void calc_module(char *p); |
||
185 | void calc_nonempty(char *p); |
||
186 | void calc_pos(char *p); |
||
187 | void calc_product(char *p); |
||
188 | void calc_recordof(char *p); |
||
189 | void calc_recursion(char *p); |
||
190 | void calc_reinput(char *p); |
||
191 | void calc_replace(char *p); |
||
192 | void calc_rowof(char *p); |
||
193 | void calc_rows2lines(char *p); |
||
194 | void calc_select(char *p); |
||
195 | void calc_solve(char *p); |
||
196 | void calc_sort(char *p); |
||
197 | void calc_sum(char *p); |
||
198 | void calc_translate(char *p); |
||
199 | void calc_trim(char *p); |
||
200 | void calc_wordof(char *p); |
||
201 | void calc_values(char *p); |
||
202 | |||
203 | /* from config.c */ |
||
10 | reyssat | 204 | void setsesdir(char *p); |
8185 | bpr | 205 | extern int threshold2, threshold1, rafalvl, modlog; |
206 | extern char session_dir[MAX_FNAME+1], s2_dir[MAX_FNAME+1]; |
||
207 | extern char temp_log[MAX_FNAME+1]; /* temp log file name */ |
||
208 | extern char *cgi_name; |
||
209 | extern int idle_time, idle_time2, idle_time3, OLD_LOG_FILES, GEN_LOG_LIMIT, MODULE_LOG_LIMIT; |
||
210 | extern int backup_hour, site_accounting, examlog_limit; |
||
8284 | bpr | 211 | extern int ANIM_LIMIT; |
8185 | bpr | 212 | extern char *header_menu, *insplot_processor; |
213 | extern char *home_referer, *home_referer_user, *header_menu_supervisor, |
||
214 | *header_menu_user, *home_referer_supervisor, *title_page, *html_file; |
||
215 | extern char *aliased_cgi, *insdraw_processor, *mail_opt; |
||
8490 | bpr | 216 | extern int mathalign_base; |
8185 | bpr | 217 | unsigned long create_job_ident(void); |
218 | void module_index(void); |
||
219 | extern char *module_about_file, *main_var_proc_file, *var_init_file, *special_font; |
||
220 | extern char var_def_file[256], *var_def_buf; |
||
221 | void define_html_header(void); |
||
222 | extern char *usecookie, *bgcolor; |
||
223 | extern int spec_font; |
||
224 | extern char *config_file; /* Main configure file, this name cannot be configured! */ |
||
225 | extern char *intro_file; /* Introduction page name */ |
||
226 | extern char *ref_file; /* Reference page */ |
||
227 | typedef struct CONFIG_DATA { char *name; int is_integer; void *address; } CONFIG_DATA; |
||
228 | extern CONFIG_DATA main_config[]; |
||
229 | extern int MAIN_CONFIG_NO; |
||
230 | extern char *modindex[]; |
||
231 | extern int MODINDEX_NO; |
||
232 | void main_configure(void); |
||
233 | void set_rlimits(void); |
||
234 | void module_configure(void); |
||
235 | void set_job_ident(void); |
||
10 | reyssat | 236 | |
8185 | bpr | 237 | /* from compare.c */ |
238 | int compare(char *p, int numeric, int lvl); |
||
8880 | bpr | 239 | char *bufprep(char *p); |
10 | reyssat | 240 | |
8185 | bpr | 241 | /* from evalue.c */ |
10 | reyssat | 242 | double evalue(char *p); |
243 | char *substit(char *p); |
||
8185 | bpr | 244 | enum {for_in, for_from}; |
245 | struct forstruct { |
||
246 | char var[MAX_NAMELEN+1]; |
||
247 | int type; |
||
248 | double list[MAX_VALUE_LIST]; |
||
249 | char *pos[MAX_VALUE_LIST]; |
||
250 | double from, to, step; |
||
251 | } forstruct; |
||
252 | int cutfor(char *p, char *bufp); |
||
253 | void float2str(double d, char *p); |
||
10 | reyssat | 254 | |
8185 | bpr | 255 | /* from exam.c */ |
256 | void calc_examdep(char *p); |
||
257 | double currexamscore(int sh); |
||
258 | void check_exam(void); |
||
10 | reyssat | 259 | |
8185 | bpr | 260 | /* from exec.c */ |
261 | void exec_main(char *p); |
||
262 | void exec_set(char *name); |
||
12011 | bpr | 263 | void exec_setseed(char *p); |
8185 | bpr | 264 | extern MYFUNCTION exec_routine[]; |
265 | extern int EXEC_FN_NO; |
||
266 | extern struct distr_cmd { char *name; int (*routine) (char *p, char *list[], int max); |
||
267 | } distr_cmd[]; |
||
268 | extern int distr_cmd_no; |
||
269 | void exec_tail(char *p); |
||
8216 | bpr | 270 | void exec_read(char *p); |
8185 | bpr | 271 | |
272 | /* from files.c */ |
||
273 | void secure_exec(void); |
||
274 | void fileappend(char *p); |
||
275 | void filewrite(char *p); |
||
276 | |||
277 | /* from html.c */ |
||
278 | void exec_formbar(char *p); |
||
279 | void exec_formbar(char *p); |
||
280 | void exec_formcheckbox(char *p); |
||
281 | void exec_formradio(char *p); |
||
282 | void exec_formselect(char *p); |
||
283 | |||
284 | /* from insmmath.c */ |
||
285 | void insmath(char *p); |
||
286 | int instex_ready(char *p, char *n); |
||
287 | char *instex_check_static(char *p); |
||
288 | void calc_instexst(char *p); |
||
289 | |||
290 | /* from lines.c */ |
||
291 | void accessfile(char *content, char *type, char *s,...); |
||
292 | int checkhostt(char bf2[]); |
||
293 | extern int untrust; |
||
294 | void module_error(char msg[]); |
||
295 | int trusted_module(void); |
||
296 | int checkhost(char *hlist); |
||
297 | void _getdef(char buf[], char *name, char value[]); |
||
298 | void getdef(char *fname, char *name, char value[]); |
||
299 | void _daemoncmd(char *p); |
||
300 | int datafile_check(char *name); |
||
301 | extern int is_class_module; |
||
302 | int find_module_file(char *fname, char buf[], int mode); |
||
303 | int call_ssh(char *s,...); |
||
304 | int _http2env(char outs[], char ins[]); |
||
305 | void slashsubst(char *p); |
||
306 | void internal_error(char msg[]); |
||
307 | char *readfile(char *fname, char buf[], long int buflen); /* mathfonts.c */ |
||
308 | int call_sh(char *s,...); |
||
309 | unsigned int datafile_recordnum(char *p); |
||
310 | char *datafile_fnd_record(char *p, int n, char bf[]); |
||
311 | int execredirected(char *cmdf, char *inf, char *outf, char *errf, char *arg[]); |
||
312 | char *mkfname(char buf[], char *s,...); |
||
313 | extern char *trusted_modules; |
||
314 | enum{is_file, is_dir, is_exec, is_fifo, is_socket, is_unknown}; |
||
315 | extern struct mxtab { |
||
316 | char cmd[MAX_EXEC_NAME+1]; |
||
317 | unsigned int fd1, fd2; |
||
318 | int pipe_stdin[2], pipe_stdout[2], pipe_stderr[2]; |
||
319 | } mxtab[MAX_MULTIEXEC]; |
||
320 | int ftest(char *fname); |
||
321 | int multiexec(char *cmd, char **abuf); |
||
322 | int wgetline(char buf[], size_t buflen, WORKING_FILE *f); |
||
323 | int open_working_file(WORKING_FILE *f, char *fname); |
||
324 | void close_working_file(WORKING_FILE *f, int cache); |
||
325 | void read_tmp_file(char *p, const char *fname); |
||
326 | void initalarm(void); |
||
327 | extern int var_noexport; /* do not export variable */ |
||
328 | enum {mode_default, mode_popup, mode_raw} NAME_MODES; |
||
329 | extern char *manager_site; |
||
330 | void flushoutput(void); |
||
331 | extern char pidbuf[32]; |
||
332 | extern char lastdatafile[MAX_FNAME+1]; |
||
333 | extern char lastftest[MAX_FNAME+1]; |
||
334 | int kerneld(char *p, int bufsize); |
||
335 | void _setdef(char buf[], char *name, char *value); |
||
336 | void output0(char buf[]); |
||
337 | void nph_header(int code); |
||
338 | void delete_pid(void); |
||
339 | void setdef(char *fname, char *name); |
||
340 | void instex_flush(void); |
||
341 | char *DEFAULT_INS_FORMAT; |
||
342 | void tex_nospace(char *p); |
||
343 | int get_cached_file(char *name); |
||
344 | extern off_t ftest_size; |
||
345 | void putlastout(void); |
||
346 | void bad_ident(void); |
||
347 | void create_pid(void); |
||
348 | extern struct sockaddr_un sun; |
||
349 | extern char *lastdata; |
||
350 | extern char *outptr; |
||
351 | extern char outbuf[8192]; |
||
352 | extern int http2env(char outs[], char ins[]); |
||
353 | |||
354 | /* from log.c */ |
||
10 | reyssat | 355 | void user_log(char *p); |
356 | void write_logs(void); |
||
357 | void mail_log(char *p); |
||
358 | void flushlog(void); |
||
8185 | bpr | 359 | void post_log(void); |
360 | void checklogd(void); |
||
10 | reyssat | 361 | |
8185 | bpr | 362 | /* from mathfonts.c */ |
10 | reyssat | 363 | void fix_tex_size(void); |
8185 | bpr | 364 | extern int current_tex_size, texbasesize; |
365 | void _output_(char *s); |
||
366 | void output(char *s,...); |
||
367 | char *mathfont(char *fontname); |
||
368 | extern int usertexsize; |
||
10 | reyssat | 369 | |
8185 | bpr | 370 | /* from mathml.c */ |
371 | int mathml(char *p, int option); |
||
10 | reyssat | 372 | |
8185 | bpr | 373 | /* from matrix.c */ |
374 | void rawmatrix(char *p); |
||
375 | |||
376 | /* from pedia.c */ |
||
377 | void pedia(char *p); |
||
378 | |||
379 | /* from rawmath.c */ |
||
380 | void htmlmath(char *p); |
||
381 | void mathmlmath(char *p); |
||
382 | void tohttpquery(char *p); |
||
383 | void rawmath(char *p); |
||
384 | void texmath(char *p); |
||
385 | extern int rawmath_easy; |
||
386 | extern struct mathname { char *name; int style; char *replace; } mathname[]; |
||
387 | extern int mathname_no; |
||
388 | |||
389 | /* from hmname.c */ |
||
390 | extern struct hmname { char *name; char *replace; char *replacem;} hmname[]; |
||
391 | extern int hmname_no; |
||
392 | |||
393 | /* from score.c */ |
||
394 | void calc_getscorelast(char *p); |
||
395 | void calc_getscore(char *p); |
||
396 | void calc_getscoremean(char *p); |
||
397 | void calc_getscoreremain(char *p); |
||
398 | void calc_getscorerequire(char *p); |
||
399 | void calc_getscoreweight(char *p); |
||
400 | void calc_getscorelast(char *p); |
||
401 | void calc_getscoretry(char *p); |
||
402 | void calc_getscorebest(char *p); |
||
403 | void calc_getscorelevel(char *p); |
||
404 | void calc_getscorepercent(char *p); |
||
405 | void calc_getscorestatus(char *p); |
||
406 | void calc_examscore(char *p); |
||
407 | void exam_currscore(int esh); |
||
408 | extern double exam_scoredata[MAX_EXOS]; |
||
409 | int exam_depcheck(char *deps, int exam); |
||
410 | int getscorestatus(char *classe, int sheet); |
||
411 | int depcheck(char *sh, int exo, char *deps); |
||
412 | extern char rscore_class[MAX_CLASSLEN+1]; |
||
413 | extern char rscore_user[MAX_NAMELEN+1]; |
||
414 | |||
415 | /* from test.c */ |
||
10 | reyssat | 416 | void exec_test(char *p); |
417 | |||
8185 | bpr | 418 | /* from texmath.c */ |
419 | void _replace_matrix ( char *p , char *s_mat1, char *s_mat2); |
||
420 | extern struct tmathfn { |
||
421 | char *name; int expind; char *left, *right; void (*routine) (char *p); |
||
422 | } tmathfn[]; |
||
423 | extern int tmathfn_no; |
||
424 | extern struct tmathvar { char *name, *tex; } tmathvar[]; |
||
425 | extern int tmathvar_no; |
||
426 | |||
427 | /* from var.c */ |
||
10 | reyssat | 428 | int force_setvar(char *vname,char *vvalue); |
8185 | bpr | 429 | char *getvar(char *name); |
430 | int setvar(char *vname, char *vval); |
||
431 | void debug_output(void); |
||
432 | void exportall(void); |
||
433 | void unsetvar(char *vname); |
||
434 | void get_var_privileges(void); |
||
435 | char *_getvar(char *vname); |
||
436 | int varsuite(char *stem, int beg, int end, char *pbuf[], int pbuflen); |
||
437 | void lessrafale(void); |
||
438 | extern char *exportvars[]; /* wims_ variables that should be exported */ |
||
439 | extern int exportvarcnt; |
||
10 | reyssat | 440 | |
8185 | bpr | 441 | /* from variables.c */ |
10 | reyssat | 442 | int var_def_check(char *name); |
8185 | bpr | 443 | void var_proc(char *fname,int cache); |
444 | void phtml_put(char *fname,int cache); |
||
445 | void phtml_put_base(char *fname,int cache); |
||
446 | void set_module_prefix(void); |
||
447 | extern int ispriority; |
||
448 | extern char *sed_prog, *tr_prog, *tex2gif; |
||
449 | void get_static_session_var(void); |
||
450 | void parse_ro_names(void); |
||
451 | int var_def_name(char *n, int v); |
||
452 | void set_init_parm(void); |
||
453 | int session_exists(char *s); |
||
454 | int set_session_prefix(void); |
||
455 | int check_session(void); |
||
456 | void trap_check(char *s); |
||
457 | void set_protocol(void); |
||
458 | void main_phtml_put(char *mname); |
||
459 | void var_init(void); /* initialisation */ |
||
460 | void set_variables(void); |
||
461 | void save_session_vars(void); |
||
12011 | bpr | 462 | void seed_time(void); |
10 | reyssat | 463 | |
8185 | bpr | 464 | /* from wims.c */ |
465 | void user_error(char msg[]); |
||
466 | extern int robot_access, wrapexec, good_httpd, multiexec_index, outputing; |
||
467 | extern int rlimit_cpu, new_session, hostcquota, manageable, cmd_type, exec_is_module; |
||
468 | extern int available_lang_no, WORKFILE_LIMIT, isclassmodule, mode, module_defined; |
||
469 | extern char session_prefix[], s2_prefix[]; |
||
470 | extern char lang[16]; |
||
471 | extern char *remote_addr; |
||
472 | extern time_t nowtime, limtime, limtimex; |
||
473 | extern char *ro_name[]; |
||
474 | extern char *mathalign_sup1, *mathalign_sup2; /* see mathalign_base */ |
||
475 | extern char *module_dir; |
||
476 | extern char tmplbuf[MAX_LINELEN+1]; /* for temporary uses not thru subroutines. */ |
||
477 | extern char cwdbuf[MAX_FNAME+1]; /* store current working directory */ |
||
478 | extern char ins_alt[MAX_LINELEN+1]; /* dynamic insertion alternative text */ |
||
479 | extern char *bin_dir; /* directory containing executable scripts and programs. */ |
||
11104 | bpr | 480 | extern char *tmp_debug, *tmp_debug_var; |
8185 | bpr | 481 | extern char *instex_style; |
482 | extern char session_prefix[MAX_FNAME+1], s2_prefix[MAX_FNAME+1], module_prefix[MAX_FNAME+1]; |
||
483 | extern char multiexec_random[64]; |
||
484 | extern char class_dir[MAX_FNAME+1]; /* directory name of this class */ |
||
485 | extern char *devel_modules, *robot_session; |
||
486 | extern int manager_https, confset, rlimit_fsize, rlimit_as, rlimit_data, rlimit_stack, rlimit_core; |
||
487 | extern int rlimit_rss, rlimit_nproc, rlimit_nofile, rlimit_memlock; |
||
488 | extern int sesrandomtab[MAX_SESRANDOM]; /* session random values */ |
||
489 | extern char job_identifier[32]; |
||
490 | extern int print_precision, substnest, getvar_len; |
||
491 | extern char pre_language[4]; |
||
10051 | bpr | 492 | extern FILE * trace_file; |
11104 | bpr | 493 | extern int trace_indent; |
12011 | bpr | 494 | /* the following list must be in the same order as *ro_name in wims.c */ |
8185 | bpr | 495 | enum { |
496 | ro_cmd, ro_empty, ro_lang, ro_module, ro_session, ro_special_parm, |
||
497 | ro_special_parm2, ro_special_parm3, ro_special_parm4, ro_useropts, ro_wsession, ro_subsession, ro_win, ro_worksheet |
||
498 | } RO_NAMES; |
||
499 | extern char *home_module; |
||
500 | extern char class_dir[MAX_FNAME+1]; /* directory name of this class */ |
||
501 | char available_lang[MAX_LANGUAGES][4]; |
||
502 | |||
503 | enum { |
||
504 | cmd_intro, cmd_new, cmd_renew, cmd_reply, cmd_config, cmd_hint, cmd_help, |
||
505 | cmd_resume, cmd_next, cmd_getins, cmd_getframe, cmd_getfile, cmd_close, |
||
506 | cmd_ref |
||
507 | } COMMANDS; |
||
508 | extern char tmp_dir[MAX_FNAME+1]; /* temporary directory */ |
||
509 | |||
510 | extern char ref_name[2048], ref_base[2048]; |
||
511 | |||
512 | struct user_variable { |
||
513 | char *name; |
||
514 | char *value; |
||
515 | } user_variable[MAX_VAR_NUM]; |
||
516 | |||
517 | extern int user_var_no; |
||
518 | /* Destinated to module error messages */ |
||
519 | WORKING_FILE m_file,svar_file,mcache[MAX_MCACHE]; |
||
520 | |||
521 | extern int isexam, direct_datafile; |
||
522 | extern char *unsetvars[], *commands[]; |
||
523 | extern char exam_sheetexo[32]; /* sheet data of an exam */ |
||
524 | extern char nowstr[32]; |
||
525 | extern int CMD_NO; |
||
526 | extern int simuxam, parm_restore, exodepOK, user_error_nolog; |
||
527 | extern char examlogd[MAX_FNAME+1]; /* examlog file name */ |
||
528 | char examlogf[MAX_FNAME+1]; /* examlog file name */ |
||
529 | char mpboundary[1024]; |
||
530 | char *stdinbuf; |
||
531 | extern char **environ; /* table of environment variables */ |
||
532 | extern char cookiegot[256], cookieheader[64]; |
||
533 | extern int executed_gotos; /* number of goto's executed. to check with GOTO_LIMIT. */ |
||
534 | extern int noout, execnt, direct_exec, ismhelp; |
||
535 | extern int readnest; /* nested read count */; |
||
536 | extern char *default_form_method; |
||
537 | extern int insert_no, lastout_file, instex_cnt; |
||
538 | extern char instex_src[MAX_LINELEN+1], instex_fname[MAX_LINELEN+1]; |
||
539 | extern char *instex_processor; |
||
540 | extern int instex_usedynamic, httpd_type, mcachecnt, mfilecnt; |
||
541 | extern char *mathalign_sup1, *mathalign_sup2; /* see mathalign_base */ |
||
542 | enum {httpd_apache, httpd_wims}; |
||
543 | extern int output_length; /* length of the output. */ |
||
544 | extern int backslash_insmath, killpid, is_multiexec, exec_wait, getwimstexsize; |
||
545 | extern char *remote_host; |
||
546 | extern char *var_readable, *var_writable, *var_nr, *var_nw, *var_pfx; |
||
547 | extern int RO_NAME_NO, INTERNAL_NAME_NO; |
||
548 | extern struct internal_name { |
||
549 | char *name; int stat; |
||
550 | } internal_name[]; |
||
551 | extern char var_hacking; |
||
552 | extern long int startmtime2; |
||
553 | extern int setcookie, forceresume, user_lang, form_access, session_serial; |
||
554 | extern char *protocol; |
||
555 | void useropts(void); |
||
556 | extern char cookiegot[256], cookieset[256]; |
||
9286 | bpr | 557 | extern struct tm *now; /* time of request */ |
8185 | bpr | 558 | extern int isdevelmodule, defined_var_total, deplen, wims_sheet, wims_exo; |
559 | struct VAR_DEF { |
||
560 | char *name; short int beg,end; |
||
561 | char allow, log_num, defined_in_parm, unused_padding; |
||
562 | } var_def[MAX_VAR_NUM]; |
||
563 | |||
564 | |||
10 | reyssat | 565 | #if !HAVE_SETENV |
566 | int setenv(const char *name, const char *value, int overwrite); |
||
567 | void unsetenv(const char *name); |
||
568 | #endif |