|
|
1.1 root 1: /* sbbs_ini.c */
2:
3: /* Synchronet initialization (.ini) file routines */
4:
5: /* $Id: sbbs_ini.c,v 1.122 2006/12/31 11:16:40 rswindell Exp $ */
6:
7: /****************************************************************************
8: * @format.tab-size 4 (Plain Text/Source Code File Header) *
9: * @format.use-tabs true (see http://www.synchro.net/ptsc_hdr.html) *
10: * *
11: * Copyright 2006 Rob Swindell - http://www.synchro.net/copyright.html *
12: * *
13: * This program is free software; you can redistribute it and/or *
14: * modify it under the terms of the GNU General Public License *
15: * as published by the Free Software Foundation; either version 2 *
16: * of the License, or (at your option) any later version. *
17: * See the GNU General Public License for more details: gpl.txt or *
18: * http://www.fsf.org/copyleft/gpl.html *
19: * *
20: * Anonymous FTP access to the most recent released source is available at *
21: * ftp://vert.synchro.net, ftp://cvs.synchro.net and ftp://ftp.synchro.net *
22: * *
23: * Anonymous CVS access to the development source and modification history *
24: * is available at cvs.synchro.net:/cvsroot/sbbs, example: *
25: * cvs -d :pserver:[email protected]:/cvsroot/sbbs login *
26: * (just hit return, no password is necessary) *
27: * cvs -d :pserver:[email protected]:/cvsroot/sbbs checkout src *
28: * *
29: * For Synchronet coding style and modification guidelines, see *
30: * http://www.synchro.net/source.html *
31: * *
32: * You are encouraged to submit any modifications (preferably in Unix diff *
33: * format) via e-mail to [email protected] *
34: * *
35: * Note: If this box doesn't appear square, then you need to fix your tabs. *
36: ****************************************************************************/
37:
38: #define STARTUP_INI_BITDESC_TABLES
39:
40: #include <string.h> /* strchr, memset */
41:
42: #include "dirwrap.h" /* backslash */
43: #include "sbbs_ini.h"
44: #include "sbbsdefs.h" /* JAVASCRIPT_* macros */
45:
46: static const char* nulstr="";
47: static const char* strAutoStart="AutoStart";
48: static const char* strCtrlDirectory="CtrlDirectory";
49: static const char* strTempDirectory="TempDirectory";
50: static const char* strOptions="Options";
51: static const char* strInterface="Interface";
52: static const char* strPort="Port";
53: static const char* strMaxClients="MaxClients";
54: static const char* strMaxInactivity="MaxInactivity";
55: static const char* strHostName="HostName";
56: static const char* strLogLevel="LogLevel";
57: static const char* strBindRetryCount="BindRetryCount";
58: static const char* strBindRetryDelay="BindRetryDelay";
59: static const char* strAnswerSound="AnswerSound";
60: static const char* strHangupSound="HangupSound";
61: static const char* strHackAttemptSound="HackAttemptSound";
62: static const char* strJavaScriptMaxBytes ="JavaScriptMaxBytes";
63: static const char* strJavaScriptContextStack ="JavaScriptContextStack";
64: static const char* strJavaScriptThreadStack ="JavaScriptThreadStack";
65: static const char* strJavaScriptBranchLimit ="JavaScriptBranchLimit";
66: static const char* strJavaScriptGcInterval ="JavaScriptGcInterval";
67: static const char* strJavaScriptYieldInterval ="JavaScriptYieldInterval";
68: static const char* strSemFileCheckFrequency ="SemFileCheckFrequency";
69:
70: #define DEFAULT_LOG_LEVEL LOG_DEBUG
71: #define DEFAULT_MAX_MSG_SIZE (10*1024*1024) /* 10MB */
72: #define DEFAULT_BIND_RETRY_COUNT 2
73: #define DEFAULT_BIND_RETRY_DELAY 15
74:
75: void sbbs_get_ini_fname(char* ini_file, char* ctrl_dir, char* pHostName)
76: {
77: char host_name[128];
78: char path[MAX_PATH+1];
79: char* p;
80:
81: if(pHostName!=NULL)
82: SAFECOPY(host_name,pHostName);
83: else {
84: #if defined(_WINSOCKAPI_)
85: WSADATA WSAData;
86: WSAStartup(MAKEWORD(1,1), &WSAData); /* req'd for gethostname */
87: #endif
88: gethostname(host_name,sizeof(host_name)-1);
89: #if defined(_WINSOCKAPI_)
90: WSACleanup();
91: #endif
92: }
93: SAFECOPY(path,ctrl_dir);
94: backslash(path);
95: sprintf(ini_file,"%s%s.ini",path,host_name);
96: if(fexistcase(ini_file))
97: return;
98: if((p=strchr(host_name,'.'))!=NULL) {
99: *p=0;
100: sprintf(ini_file,"%s%s.ini",path,host_name);
101: if(fexistcase(ini_file))
102: return;
103: }
104: #if defined(__unix__) && defined(PREFIX)
105: sprintf(ini_file,PREFIX"/etc/sbbs.ini");
106: if(fexistcase(ini_file))
107: return;
108: #endif
109: iniFileName(ini_file,MAX_PATH,ctrl_dir,"sbbs.ini");
110: if(fexistcase(ini_file))
111: return;
112: iniFileName(ini_file,MAX_PATH,ctrl_dir,"startup.ini");
113: }
114:
115: static void sbbs_fix_js_settings(js_startup_t* js)
116: {
117: /* Some sanity checking here */
118: if(js->max_bytes==0) js->max_bytes=JAVASCRIPT_MAX_BYTES;
119: if(js->cx_stack==0) js->cx_stack=JAVASCRIPT_CONTEXT_STACK;
120: }
121:
122: void sbbs_get_js_settings(
123: str_list_t list
124: ,const char* section
125: ,js_startup_t* js
126: ,js_startup_t* defaults)
127: {
128: js->max_bytes = iniGetInteger(list,section,strJavaScriptMaxBytes ,defaults->max_bytes);
129: js->cx_stack = iniGetInteger(list,section,strJavaScriptContextStack ,defaults->cx_stack);
130: js->thread_stack = iniGetInteger(list,section,strJavaScriptThreadStack ,defaults->thread_stack);
131: js->branch_limit = iniGetInteger(list,section,strJavaScriptBranchLimit ,defaults->branch_limit);
132: js->gc_interval = iniGetInteger(list,section,strJavaScriptGcInterval ,defaults->gc_interval);
133: js->yield_interval = iniGetInteger(list,section,strJavaScriptYieldInterval ,defaults->yield_interval);
134:
135: sbbs_fix_js_settings(js);
136: }
137:
138: BOOL sbbs_set_js_settings(
139: str_list_t* lp
140: ,const char* section
141: ,js_startup_t* js
142: ,js_startup_t* defaults
143: ,ini_style_t* style)
144: {
145: BOOL failure=FALSE;
146: js_startup_t global_defaults = {
147: JAVASCRIPT_MAX_BYTES
148: ,JAVASCRIPT_CONTEXT_STACK
149: ,JAVASCRIPT_THREAD_STACK
150: ,JAVASCRIPT_BRANCH_LIMIT
151: ,JAVASCRIPT_GC_INTERVAL
152: ,JAVASCRIPT_YIELD_INTERVAL
153: };
154:
155: if(defaults==NULL)
156: defaults=&global_defaults;
157:
158: sbbs_fix_js_settings(js);
159:
160: if(js->max_bytes==defaults->max_bytes)
161: iniRemoveValue(lp,section,strJavaScriptMaxBytes);
162: else
163: failure|=iniSetInteger(lp,section,strJavaScriptMaxBytes,js->max_bytes,style)==NULL;
164:
165: if(js->cx_stack==defaults->cx_stack)
166: iniRemoveValue(lp,section,strJavaScriptContextStack);
167: else
168: failure|=iniSetInteger(lp,section,strJavaScriptContextStack,js->cx_stack,style)==NULL;
169:
170: if(js->thread_stack==defaults->thread_stack)
171: iniRemoveValue(lp,section,strJavaScriptThreadStack);
172: else
173: failure|=iniSetInteger(lp,section,strJavaScriptThreadStack,js->thread_stack,style)==NULL;
174:
175: if(js->branch_limit==defaults->branch_limit)
176: iniRemoveValue(lp,section,strJavaScriptBranchLimit);
177: else
178: failure|=iniSetInteger(lp,section,strJavaScriptBranchLimit,js->branch_limit,style)==NULL;
179:
180: if(js->gc_interval==defaults->gc_interval)
181: iniRemoveValue(lp,section,strJavaScriptGcInterval);
182: else
183: failure|=iniSetInteger(lp,section,strJavaScriptGcInterval,js->gc_interval,style)==NULL;
184:
185: if(js->yield_interval==defaults->yield_interval)
186: iniRemoveValue(lp,section,strJavaScriptYieldInterval);
187: else
188: failure|=iniSetInteger(lp,section,strJavaScriptYieldInterval,js->yield_interval,style)==NULL;
189:
190: return(!failure);
191: }
192:
193: static void get_ini_globals(str_list_t list, global_startup_t* global)
194: {
195: const char* section = "Global";
196: char value[INI_MAX_VALUE_LEN];
197: char* p;
198:
199: p=iniGetString(list,section,strCtrlDirectory,nulstr,value);
200: if(*p) {
201: SAFECOPY(global->ctrl_dir,value);
202: backslash(global->ctrl_dir);
203: }
204:
205: p=iniGetString(list,section,strTempDirectory,nulstr,value);
206: #if defined(__unix__)
207: if(*p==0)
208: p=_PATH_TMP; /* Good idea to use "/tmp" on Unix */
209: #endif
210: if(*p) {
211: SAFECOPY(global->temp_dir,value);
212: backslash(global->temp_dir);
213: }
214:
215: p=iniGetString(list,section,strHostName,nulstr,value);
216: if(*p)
217: SAFECOPY(global->host_name,value);
218:
219: global->sem_chk_freq=iniGetShortInt(list,section,strSemFileCheckFrequency,0);
220: global->interface_addr=iniGetIpAddress(list,section,strInterface,INADDR_ANY);
221: global->log_level=iniGetLogLevel(list,section,strLogLevel,DEFAULT_LOG_LEVEL);
222: global->bind_retry_count=iniGetInteger(list,section,strBindRetryCount,DEFAULT_BIND_RETRY_COUNT);
223: global->bind_retry_delay=iniGetInteger(list,section,strBindRetryDelay,DEFAULT_BIND_RETRY_DELAY);
224:
225: /* Setup default values here */
226: global->js.max_bytes = JAVASCRIPT_MAX_BYTES;
227: global->js.cx_stack = JAVASCRIPT_CONTEXT_STACK;
228: global->js.thread_stack = JAVASCRIPT_THREAD_STACK;
229: global->js.branch_limit = JAVASCRIPT_BRANCH_LIMIT;
230: global->js.gc_interval = JAVASCRIPT_GC_INTERVAL;
231: global->js.yield_interval = JAVASCRIPT_YIELD_INTERVAL;
232:
233: /* Read .ini values here */
234: sbbs_get_js_settings(list, section, &global->js, &global->js);
235: }
236:
237:
238: void sbbs_read_ini(
239: FILE* fp
240: ,global_startup_t* global
241: ,BOOL* run_bbs
242: ,bbs_startup_t* bbs
243: ,BOOL* run_ftp
244: ,ftp_startup_t* ftp
245: ,BOOL* run_web
246: ,web_startup_t* web
247: ,BOOL* run_mail
248: ,mail_startup_t* mail
249: ,BOOL* run_services
250: ,services_startup_t* services
251: )
252: {
253: const char* section;
254: const char* default_term_ansi;
255: const char* default_dosemu_path;
256: char value[INI_MAX_VALUE_LEN];
257: str_list_t list;
258: global_startup_t global_buf;
259:
260: if(global==NULL) {
261: memset(&global_buf,0,sizeof(global_buf));
262: global=&global_buf;
263: }
264:
265: list=iniReadFile(fp);
266:
267: get_ini_globals(list, global);
268:
269: if(global->ctrl_dir[0]) {
270: if(bbs!=NULL) SAFECOPY(bbs->ctrl_dir,global->ctrl_dir);
271: if(ftp!=NULL) SAFECOPY(ftp->ctrl_dir,global->ctrl_dir);
272: if(web!=NULL) SAFECOPY(web->ctrl_dir,global->ctrl_dir);
273: if(mail!=NULL) SAFECOPY(mail->ctrl_dir,global->ctrl_dir);
274: if(services!=NULL) SAFECOPY(services->ctrl_dir,global->ctrl_dir);
275: }
276:
277: /***********************************************************************/
278: section = "BBS";
279:
280: if(run_bbs!=NULL)
281: *run_bbs=iniGetBool(list,section,strAutoStart,TRUE);
282:
283: if(bbs!=NULL) {
284:
285: bbs->telnet_interface
286: =iniGetIpAddress(list,section,"TelnetInterface",global->interface_addr);
287: bbs->telnet_port
288: =iniGetShortInt(list,section,"TelnetPort",IPPORT_TELNET);
289:
290: bbs->rlogin_interface
291: =iniGetIpAddress(list,section,"RLoginInterface",global->interface_addr);
292: bbs->rlogin_port
293: =iniGetShortInt(list,section,"RLoginPort",513);
294:
295: bbs->ssh_interface
296: =iniGetIpAddress(list,section,"SSHInterface",global->interface_addr);
297: bbs->ssh_port
298: =iniGetShortInt(list,section,"SSHPort",22);
299:
300: bbs->first_node
301: =iniGetShortInt(list,section,"FirstNode",1);
302: bbs->last_node
303: =iniGetShortInt(list,section,"LastNode",4);
304:
305: bbs->outbuf_highwater_mark
306: =iniGetShortInt(list,section,"OutbufHighwaterMark"
307: #ifdef TCP_MAXSEG /* Auto-tune if possible. Would this be defined here? */
308: ,0
309: #else
310: ,1024
311: #endif
312: );
313: bbs->outbuf_drain_timeout
314: =iniGetShortInt(list,section,"OutbufDrainTimeout",10);
315:
316: bbs->sem_chk_freq
317: =iniGetShortInt(list,section,strSemFileCheckFrequency,global->sem_chk_freq);
318:
319: /* JavaScript operating parameters */
320: sbbs_get_js_settings(list, section, &bbs->js, &global->js);
321:
322: SAFECOPY(bbs->host_name
323: ,iniGetString(list,section,strHostName,global->host_name,value));
324:
325: SAFECOPY(bbs->temp_dir
326: ,iniGetString(list,section,strTempDirectory,global->temp_dir,value));
327:
328: /* Set default terminal type to "stock" termcap closest to "ansi-bbs" */
329: #if defined(__FreeBSD__)
330: default_term_ansi="cons25";
331: #else
332: default_term_ansi="pc3";
333: #endif
334:
335: SAFECOPY(bbs->xtrn_term_ansi
336: ,iniGetString(list,section,"ExternalTermANSI",default_term_ansi,value));
337: SAFECOPY(bbs->xtrn_term_dumb
338: ,iniGetString(list,section,"ExternalTermDumb","dumb",value));
339:
340: #if defined(__FreeBSD__)
341: default_dosemu_path="/usr/bin/doscmd";
342: #else
343: default_dosemu_path="/usr/bin/dosemu.bin";
344: #endif
345:
346: SAFECOPY(bbs->dosemu_path
347: ,iniGetString(list,section,"DOSemuPath",default_dosemu_path,value));
348:
349: SAFECOPY(bbs->answer_sound
350: ,iniGetString(list,section,strAnswerSound,nulstr,value));
351: SAFECOPY(bbs->hangup_sound
352: ,iniGetString(list,section,strHangupSound,nulstr,value));
353:
354: bbs->log_level
355: =iniGetLogLevel(list,section,strLogLevel,global->log_level);
356: bbs->options
357: =iniGetBitField(list,section,strOptions,bbs_options
358: ,BBS_OPT_XTRN_MINIMIZED|BBS_OPT_SYSOP_AVAILABLE);
359:
360: bbs->bind_retry_count=iniGetInteger(list,section,strBindRetryCount,global->bind_retry_count);
361: bbs->bind_retry_delay=iniGetInteger(list,section,strBindRetryDelay,global->bind_retry_delay);
362: }
363:
364: /***********************************************************************/
365: section = "FTP";
366:
367: if(run_ftp!=NULL)
368: *run_ftp=iniGetBool(list,section,strAutoStart,TRUE);
369:
370: if(ftp!=NULL) {
371:
372: ftp->interface_addr
373: =iniGetIpAddress(list,section,strInterface,global->interface_addr);
374: ftp->port
375: =iniGetShortInt(list,section,strPort,IPPORT_FTP);
376: ftp->max_clients
377: =iniGetShortInt(list,section,strMaxClients,10);
378: ftp->max_inactivity
379: =iniGetShortInt(list,section,strMaxInactivity,300); /* seconds */
380: ftp->qwk_timeout
381: =iniGetShortInt(list,section,"QwkTimeout",600); /* seconds */
382: ftp->sem_chk_freq
383: =iniGetShortInt(list,section,strSemFileCheckFrequency,global->sem_chk_freq);
384:
385: /* Passive transfer settings (for stupid firewalls/NATs) */
386: ftp->pasv_ip_addr
387: =iniGetIpAddress(list,section,"PasvIpAddress",0);
388: ftp->pasv_port_low
389: =iniGetShortInt(list,section,"PasvPortLow",IPPORT_RESERVED);
390: ftp->pasv_port_high
391: =iniGetShortInt(list,section,"PasvPortHigh",0xffff);
392:
393:
394: /* JavaScript Operating Parameters */
395: sbbs_get_js_settings(list, section, &ftp->js, &global->js);
396:
397: SAFECOPY(ftp->host_name
398: ,iniGetString(list,section,strHostName,global->host_name,value));
399:
400: SAFECOPY(ftp->index_file_name
401: ,iniGetString(list,section,"IndexFileName","00index",value));
402: SAFECOPY(ftp->html_index_file
403: ,iniGetString(list,section,"HtmlIndexFile","00index.html",value));
404: SAFECOPY(ftp->html_index_script
405: ,iniGetString(list,section,"HtmlIndexScript","ftp-html.js",value));
406:
407: SAFECOPY(ftp->answer_sound
408: ,iniGetString(list,section,strAnswerSound,nulstr,value));
409: SAFECOPY(ftp->hangup_sound
410: ,iniGetString(list,section,strHangupSound,nulstr,value));
411: SAFECOPY(ftp->hack_sound
412: ,iniGetString(list,section,strHackAttemptSound,nulstr,value));
413:
414: SAFECOPY(ftp->temp_dir
415: ,iniGetString(list,section,strTempDirectory,global->temp_dir,value));
416:
417: ftp->log_level
418: =iniGetLogLevel(list,section,strLogLevel,global->log_level);
419: ftp->options
420: =iniGetBitField(list,section,strOptions,ftp_options
421: ,FTP_OPT_INDEX_FILE|FTP_OPT_HTML_INDEX_FILE|FTP_OPT_ALLOW_QWK);
422:
423: ftp->bind_retry_count=iniGetInteger(list,section,strBindRetryCount,global->bind_retry_count);
424: ftp->bind_retry_delay=iniGetInteger(list,section,strBindRetryDelay,global->bind_retry_delay);
425: }
426:
427: /***********************************************************************/
428: section = "Mail";
429:
430: if(run_mail!=NULL)
431: *run_mail=iniGetBool(list,section,strAutoStart,TRUE);
432:
433: if(mail!=NULL) {
434:
435: mail->interface_addr
436: =iniGetIpAddress(list,section,strInterface,global->interface_addr);
437: mail->smtp_port
438: =iniGetShortInt(list,section,"SMTPPort",IPPORT_SMTP);
439: mail->pop3_port
440: =iniGetShortInt(list,section,"POP3Port",IPPORT_POP3);
441: mail->relay_port
442: =iniGetShortInt(list,section,"RelayPort",IPPORT_SMTP);
443: mail->max_clients
444: =iniGetShortInt(list,section,strMaxClients,10);
445: mail->max_inactivity
446: =iniGetShortInt(list,section,strMaxInactivity,120); /* seconds */
447: mail->max_delivery_attempts
448: =iniGetShortInt(list,section,"MaxDeliveryAttempts",50);
449: mail->rescan_frequency
450: =iniGetShortInt(list,section,"RescanFrequency",3600); /* 60 minutes */
451: mail->sem_chk_freq
452: =iniGetShortInt(list,section,strSemFileCheckFrequency,global->sem_chk_freq);
453: mail->lines_per_yield
454: =iniGetShortInt(list,section,"LinesPerYield",10);
455: mail->max_recipients
456: =iniGetShortInt(list,section,"MaxRecipients",100);
457: mail->max_msg_size
458: =iniGetInteger(list,section,"MaxMsgSize",DEFAULT_MAX_MSG_SIZE);
459:
460: SAFECOPY(mail->host_name
461: ,iniGetString(list,section,strHostName,global->host_name,value));
462:
463: SAFECOPY(mail->temp_dir
464: ,iniGetString(list,section,strTempDirectory,global->temp_dir,value));
465:
466: SAFECOPY(mail->relay_server
467: ,iniGetString(list,section,"RelayServer",nulstr,value));
468: SAFECOPY(mail->relay_user
469: ,iniGetString(list,section,"RelayUsername",nulstr,value));
470: SAFECOPY(mail->relay_pass
471: ,iniGetString(list,section,"RelayPassword",nulstr,value));
472:
473: SAFECOPY(mail->dns_server
474: ,iniGetString(list,section,"DNSServer",nulstr,value));
475:
476: SAFECOPY(mail->default_user
477: ,iniGetString(list,section,"DefaultUser",nulstr,value));
478:
479: SAFECOPY(mail->default_charset
480: ,iniGetString(list,section,"DefaultCharset",nulstr,value));
481:
482: SAFECOPY(mail->dnsbl_hdr
483: ,iniGetString(list,section,"DNSBlacklistHeader","X-DNSBL",value));
484: SAFECOPY(mail->dnsbl_tag
485: ,iniGetString(list,section,"DNSBlacklistSubject","SPAM",value));
486:
487: SAFECOPY(mail->pop3_sound
488: ,iniGetString(list,section,"POP3Sound",nulstr,value));
489: SAFECOPY(mail->inbound_sound
490: ,iniGetString(list,section,"InboundSound",nulstr,value));
491: SAFECOPY(mail->outbound_sound
492: ,iniGetString(list,section,"OutboundSound",nulstr,value));
493:
494: /* JavaScript Operating Parameters */
495: sbbs_get_js_settings(list, section, &mail->js, &global->js);
496:
497: mail->log_level
498: =iniGetLogLevel(list,section,strLogLevel,global->log_level);
499: mail->options
500: =iniGetBitField(list,section,strOptions,mail_options
501: ,MAIL_OPT_ALLOW_POP3);
502:
503: mail->bind_retry_count=iniGetInteger(list,section,strBindRetryCount,global->bind_retry_count);
504: mail->bind_retry_delay=iniGetInteger(list,section,strBindRetryDelay,global->bind_retry_delay);
505: }
506:
507: /***********************************************************************/
508: section = "Services";
509:
510: if(run_services!=NULL)
511: *run_services=iniGetBool(list,section,strAutoStart,TRUE);
512:
513: if(services!=NULL) {
514:
515: services->interface_addr
516: =iniGetIpAddress(list,section,strInterface,global->interface_addr);
517:
518: services->sem_chk_freq
519: =iniGetShortInt(list,section,strSemFileCheckFrequency,global->sem_chk_freq);
520:
521: /* JavaScript operating parameters */
522: sbbs_get_js_settings(list, section, &services->js, &global->js);
523:
524: SAFECOPY(services->host_name
525: ,iniGetString(list,section,strHostName,global->host_name,value));
526:
527: SAFECOPY(services->temp_dir
528: ,iniGetString(list,section,strTempDirectory,global->temp_dir,value));
529:
530: SAFECOPY(services->answer_sound
531: ,iniGetString(list,section,strAnswerSound,nulstr,value));
532: SAFECOPY(services->hangup_sound
533: ,iniGetString(list,section,strHangupSound,nulstr,value));
534:
535: services->log_level
536: =iniGetLogLevel(list,section,strLogLevel,global->log_level);
537: services->options
538: =iniGetBitField(list,section,strOptions,service_options
539: ,BBS_OPT_NO_HOST_LOOKUP);
540:
541: services->bind_retry_count=iniGetInteger(list,section,strBindRetryCount,global->bind_retry_count);
542: services->bind_retry_delay=iniGetInteger(list,section,strBindRetryDelay,global->bind_retry_delay);
543: }
544:
545: /***********************************************************************/
546: section = "Web";
547:
548: if(run_web!=NULL)
549: *run_web=iniGetBool(list,section,strAutoStart,FALSE);
550:
551: if(web!=NULL) {
552:
553: web->interface_addr
554: =iniGetIpAddress(list,section,strInterface,global->interface_addr);
555: web->port
556: =iniGetShortInt(list,section,strPort,IPPORT_HTTP);
557: web->max_clients
558: =iniGetShortInt(list,section,strMaxClients,10);
559: web->max_inactivity
560: =iniGetShortInt(list,section,strMaxInactivity,120); /* seconds */
561: web->sem_chk_freq
562: =iniGetShortInt(list,section,strSemFileCheckFrequency,global->sem_chk_freq);
563:
564: /* JavaScript operating parameters */
565: sbbs_get_js_settings(list, section, &web->js, &global->js);
566:
567: SAFECOPY(web->host_name
568: ,iniGetString(list,section,strHostName,global->host_name,value));
569:
570: SAFECOPY(web->temp_dir
571: ,iniGetString(list,section,strTempDirectory,global->temp_dir,value));
572:
573: SAFECOPY(web->root_dir
574: ,iniGetString(list,section,"RootDirectory",WEB_DEFAULT_ROOT_DIR,value));
575: SAFECOPY(web->error_dir
576: ,iniGetString(list,section,"ErrorDirectory",WEB_DEFAULT_ERROR_DIR,value));
577: SAFECOPY(web->cgi_dir
578: ,iniGetString(list,section,"CGIDirectory",WEB_DEFAULT_CGI_DIR,value));
579: SAFECOPY(web->logfile_base
580: ,iniGetString(list,section,"HttpLogFile",nulstr,value));
581:
582: SAFECOPY(web->default_cgi_content
583: ,iniGetString(list,section,"DefaultCGIContent",WEB_DEFAULT_CGI_CONTENT,value));
584:
585: iniFreeStringList(web->index_file_name);
586: web->index_file_name
587: =iniGetStringList(list,section,"IndexFileNames", "," ,"index.html,index.ssjs");
588: iniFreeStringList(web->cgi_ext);
589: web->cgi_ext
590: =iniGetStringList(list,section,"CGIExtensions", "," ,".cgi");
591: SAFECOPY(web->ssjs_ext
592: ,iniGetString(list,section,"JavaScriptExtension",".ssjs",value));
593: SAFECOPY(web->js_ext
594: ,iniGetString(list,section,"EmbJavaScriptExtension",".bbs",value));
595:
596: web->max_inactivity
597: =iniGetShortInt(list,section,strMaxInactivity,120); /* seconds */
598: web->max_cgi_inactivity
599: =iniGetShortInt(list,section,"MaxCgiInactivity",120); /* seconds */
600:
601: SAFECOPY(web->answer_sound
602: ,iniGetString(list,section,strAnswerSound,nulstr,value));
603: SAFECOPY(web->hangup_sound
604: ,iniGetString(list,section,strHangupSound,nulstr,value));
605: SAFECOPY(web->hack_sound
606: ,iniGetString(list,section,strHackAttemptSound,nulstr,value));
607:
608: web->log_level
609: =iniGetLogLevel(list,section,strLogLevel,global->log_level);
610: web->options
611: =iniGetBitField(list,section,strOptions,web_options
612: ,BBS_OPT_NO_HOST_LOOKUP | WEB_OPT_HTTP_LOGGING);
613: web->outbuf_highwater_mark
614: =iniGetShortInt(list,section,"OutbufHighwaterMark"
615: #ifdef TCP_MAXSEG /* Auto-tune if possible. Would this be defined here? */
616: ,0
617: #else
618: ,1024
619: #endif
620: );
621: web->outbuf_drain_timeout
622: =iniGetShortInt(list,section,"OutbufDrainTimeout",10);
623:
624: web->bind_retry_count=iniGetInteger(list,section,strBindRetryCount,global->bind_retry_count);
625: web->bind_retry_delay=iniGetInteger(list,section,strBindRetryDelay,global->bind_retry_delay);
626: }
627:
628: iniFreeStringList(list);
629: }
630:
631: BOOL sbbs_write_ini(
632: FILE* fp
633: ,scfg_t* cfg
634: ,global_startup_t* global
635: ,BOOL run_bbs
636: ,bbs_startup_t* bbs
637: ,BOOL run_ftp
638: ,ftp_startup_t* ftp
639: ,BOOL run_web
640: ,web_startup_t* web
641: ,BOOL run_mail
642: ,mail_startup_t* mail
643: ,BOOL run_services
644: ,services_startup_t* services
645: )
646: {
647: const char* section;
648: BOOL result=FALSE;
649: str_list_t list;
650: str_list_t* lp;
651: ini_style_t style;
652: global_startup_t global_buf;
653:
654: memset(&style, 0, sizeof(style));
655: style.key_prefix = "\t";
656: style.bit_separator = " | ";
657:
658: if((list=iniReadFile(fp))==NULL)
659: return(FALSE);
660:
661: if(global==NULL) {
662: get_ini_globals(list, &global_buf);
663: global = &global_buf;
664: }
665:
666: lp=&list;
667:
668: do { /* try */
669:
670: /***********************************************************************/
671: if(global!=&global_buf) {
672: section = "Global";
673:
674: if(global->ctrl_dir[0]==0)
675: iniRemoveKey(lp,section,strCtrlDirectory);
676: else
677: iniSetString(lp,section,strCtrlDirectory,global->ctrl_dir,&style);
678:
679: if(global->temp_dir[0]==0)
680: iniRemoveKey(lp,section,strTempDirectory);
681: else
682: iniSetString(lp,section,strTempDirectory,global->temp_dir,&style);
683:
684: if(global->host_name[0]==0)
685: iniRemoveKey(lp,section,strHostName);
686: else
687: iniSetString(lp,section,strHostName,global->host_name,&style);
688:
689: if(global->sem_chk_freq==0)
690: iniRemoveKey(lp,section,strSemFileCheckFrequency);
691: else
692: iniSetShortInt(lp,section,strSemFileCheckFrequency,global->sem_chk_freq,&style);
693: if(global->interface_addr==INADDR_ANY)
694: iniRemoveKey(lp,section,strInterface);
695: else
696: iniSetIpAddress(lp,section,strInterface,global->interface_addr,&style);
697: if(global->log_level==DEFAULT_LOG_LEVEL)
698: iniRemoveKey(lp,section,strLogLevel);
699: else
700: iniSetLogLevel(lp,section,strLogLevel,global->log_level,&style);
701:
702: if(global->bind_retry_count==DEFAULT_BIND_RETRY_COUNT)
703: iniRemoveKey(lp,section,strBindRetryCount);
704: else
705: iniSetInteger(lp,section,strBindRetryCount,global->bind_retry_count,&style);
706: if(global->bind_retry_delay==DEFAULT_BIND_RETRY_DELAY)
707: iniRemoveKey(lp,section,strBindRetryDelay);
708: else
709: iniSetInteger(lp,section,strBindRetryDelay,global->bind_retry_delay,&style);
710:
711: /* JavaScript operating parameters */
712: if(!sbbs_set_js_settings(lp,section,&global->js,NULL,&style))
713: break;
714: }
715:
716: /***********************************************************************/
717: if(bbs!=NULL) {
718:
719: section = "BBS";
720:
721: if(!iniSetBool(lp,section,strAutoStart,run_bbs,&style))
722: break;
723:
724: if(bbs->telnet_interface==global->interface_addr)
725: iniRemoveValue(lp,section,"TelnetInterface");
726: else if(!iniSetIpAddress(lp,section,"TelnetInterface",bbs->telnet_interface,&style))
727: break;
728:
729: if(!iniSetShortInt(lp,section,"TelnetPort",bbs->telnet_port,&style))
730: break;
731:
732: if(bbs->rlogin_interface==global->interface_addr)
733: iniRemoveValue(lp,section,"RLoginInterface");
734: else if(!iniSetIpAddress(lp,section,"RLoginInterface",bbs->rlogin_interface,&style))
735: break;
736: if(!iniSetShortInt(lp,section,"RLoginPort",bbs->rlogin_port,&style))
737: break;
738:
739: if(bbs->ssh_interface==global->interface_addr)
740: iniRemoveValue(lp,section,"SSHInterface");
741: else if(!iniSetIpAddress(lp,section,"SSHInterface",bbs->ssh_interface,&style))
742: break;
743: if(!iniSetShortInt(lp,section,"SSHPort",bbs->ssh_port,&style))
744: break;
745:
746: if(!iniSetShortInt(lp,section,"FirstNode",bbs->first_node,&style))
747: break;
748: if(!iniSetShortInt(lp,section,"LastNode",bbs->last_node,&style))
749: break;
750: if(!iniSetShortInt(lp,section,"OutbufHighwaterMark",bbs->outbuf_highwater_mark,&style))
751: break;
752: if(!iniSetShortInt(lp,section,"OutbufDrainTimeout",bbs->outbuf_drain_timeout,&style))
753: break;
754:
755: if(bbs->sem_chk_freq==global->sem_chk_freq)
756: iniRemoveValue(lp,section,strSemFileCheckFrequency);
757: else if(!iniSetShortInt(lp,section,strSemFileCheckFrequency,bbs->sem_chk_freq,&style))
758: break;
759:
760: if(bbs->log_level==global->log_level)
761: iniRemoveValue(lp,section,strLogLevel);
762: else if(!iniSetLogLevel(lp,section,strLogLevel,bbs->log_level,&style))
763: break;
764:
765: /* JavaScript operating parameters */
766: if(!sbbs_set_js_settings(lp,section,&bbs->js,&global->js,&style))
767: break;
768:
769: if(strcmp(bbs->host_name,global->host_name)==0
770: || strcmp(bbs->host_name,cfg->sys_inetaddr)==0)
771: iniRemoveKey(lp,section,strHostName);
772: else if(!iniSetString(lp,section,strHostName,bbs->host_name,&style))
773: break;
774:
775: if(stricmp(bbs->temp_dir,global->temp_dir)==0)
776: iniRemoveKey(lp,section,strTempDirectory);
777: else if(!iniSetString(lp,section,strTempDirectory,bbs->temp_dir,&style))
778: break;
779:
780: if(!iniSetString(lp,section,"ExternalTermANSI",bbs->xtrn_term_ansi,&style))
781: break;
782: if(!iniSetString(lp,section,"ExternalTermDumb",bbs->xtrn_term_dumb,&style))
783: break;
784: if(!iniSetString(lp,section,"DOSemuPath",bbs->dosemu_path,&style))
785: break;
786:
787: if(!iniSetString(lp,section,strAnswerSound,bbs->answer_sound,&style))
788: break;
789: if(!iniSetString(lp,section,strHangupSound,bbs->hangup_sound,&style))
790: break;
791:
792: if(!iniSetBitField(lp,section,strOptions,bbs_options,bbs->options,&style))
793: break;
794:
795: if(bbs->bind_retry_count==global->bind_retry_count)
796: iniRemoveValue(lp,section,strBindRetryCount);
797: else if(!iniSetInteger(lp,section,strBindRetryCount,bbs->bind_retry_count,&style))
798: break;
799: if(bbs->bind_retry_delay==global->bind_retry_delay)
800: iniRemoveValue(lp,section,strBindRetryDelay);
801: else if(!iniSetInteger(lp,section,strBindRetryDelay,bbs->bind_retry_delay,&style))
802: break;
803: }
804: /***********************************************************************/
805: if(ftp!=NULL) {
806:
807: section = "FTP";
808:
809: if(!iniSetBool(lp,section,strAutoStart,run_ftp,&style))
810: break;
811:
812: if(ftp->interface_addr==global->interface_addr)
813: iniRemoveValue(lp,section,strInterface);
814: else if(!iniSetIpAddress(lp,section,strInterface,ftp->interface_addr,&style))
815: break;
816:
817: if(!iniSetShortInt(lp,section,strPort,ftp->port,&style))
818: break;
819: if(!iniSetShortInt(lp,section,strMaxClients,ftp->max_clients,&style))
820: break;
821: if(!iniSetShortInt(lp,section,strMaxInactivity,ftp->max_inactivity,&style))
822: break;
823: if(!iniSetShortInt(lp,section,"QwkTimeout",ftp->qwk_timeout,&style))
824: break;
825:
826: /* Passive transfer settings */
827: if(!iniSetIpAddress(lp,section,"PasvIpAddress",ftp->pasv_ip_addr,&style))
828: break;
829: if(!iniSetShortInt(lp,section,"PasvPortLow",ftp->pasv_port_low,&style))
830: break;
831: if(!iniSetShortInt(lp,section,"PasvPortHigh",ftp->pasv_port_high,&style))
832: break;
833:
834: if(ftp->sem_chk_freq==global->sem_chk_freq)
835: iniRemoveValue(lp,section,strSemFileCheckFrequency);
836: else if(!iniSetShortInt(lp,section,strSemFileCheckFrequency,ftp->sem_chk_freq,&style))
837: break;
838:
839: if(ftp->log_level==global->log_level)
840: iniRemoveValue(lp,section,strLogLevel);
841: else if(!iniSetLogLevel(lp,section,strLogLevel,ftp->log_level,&style))
842: break;
843:
844: /* JavaScript Operating Parameters */
845: if(!sbbs_set_js_settings(lp,section,&ftp->js,&global->js,&style))
846: break;
847:
848: if(strcmp(ftp->host_name,global->host_name)==0
849: || strcmp(bbs->host_name,cfg->sys_inetaddr)==0)
850: iniRemoveKey(lp,section,strHostName);
851: else if(!iniSetString(lp,section,strHostName,ftp->host_name,&style))
852: break;
853:
854: if(stricmp(ftp->temp_dir,global->temp_dir)==0)
855: iniRemoveKey(lp,section,strTempDirectory);
856: else if(!iniSetString(lp,section,strTempDirectory,ftp->temp_dir,&style))
857: break;
858:
859: if(!iniSetString(lp,section,"IndexFileName",ftp->index_file_name,&style))
860: break;
861: if(!iniSetString(lp,section,"HtmlIndexFile",ftp->html_index_file,&style))
862: break;
863: if(!iniSetString(lp,section,"HtmlIndexScript",ftp->html_index_script,&style))
864: break;
865:
866: if(!iniSetString(lp,section,strAnswerSound,ftp->answer_sound,&style))
867: break;
868: if(!iniSetString(lp,section,strHangupSound,ftp->hangup_sound,&style))
869: break;
870: if(!iniSetString(lp,section,strHackAttemptSound,ftp->hack_sound,&style))
871: break;
872:
873: if(!iniSetBitField(lp,section,strOptions,ftp_options,ftp->options,&style))
874: break;
875:
876: if(ftp->bind_retry_count==global->bind_retry_count)
877: iniRemoveValue(lp,section,strBindRetryCount);
878: else if(!iniSetInteger(lp,section,strBindRetryCount,ftp->bind_retry_count,&style))
879: break;
880: if(ftp->bind_retry_delay==global->bind_retry_delay)
881: iniRemoveValue(lp,section,strBindRetryDelay);
882: else if(!iniSetInteger(lp,section,strBindRetryDelay,ftp->bind_retry_delay,&style))
883: break;
884: }
885:
886: /***********************************************************************/
887: if(mail!=NULL) {
888:
889: section = "Mail";
890:
891: if(!iniSetBool(lp,section,strAutoStart,run_mail,&style))
892: break;
893:
894: if(mail->interface_addr==global->interface_addr)
895: iniRemoveValue(lp,section,strInterface);
896: else if(!iniSetIpAddress(lp,section,strInterface,mail->interface_addr,&style))
897: break;
898:
899: if(mail->sem_chk_freq==global->sem_chk_freq)
900: iniRemoveValue(lp,section,strSemFileCheckFrequency);
901: else if(!iniSetShortInt(lp,section,strSemFileCheckFrequency,mail->sem_chk_freq,&style))
902: break;
903:
904: if(mail->log_level==global->log_level)
905: iniRemoveValue(lp,section,strLogLevel);
906: else if(!iniSetLogLevel(lp,section,strLogLevel,mail->log_level,&style))
907: break;
908:
909: if(!iniSetShortInt(lp,section,"SMTPPort",mail->smtp_port,&style))
910: break;
911: if(!iniSetShortInt(lp,section,"POP3Port",mail->pop3_port,&style))
912: break;
913: if(!iniSetShortInt(lp,section,"RelayPort",mail->relay_port,&style))
914: break;
915: if(!iniSetShortInt(lp,section,strMaxClients,mail->max_clients,&style))
916: break;
917: if(!iniSetShortInt(lp,section,strMaxInactivity,mail->max_inactivity,&style))
918: break;
919: if(!iniSetShortInt(lp,section,"MaxDeliveryAttempts",mail->max_delivery_attempts,&style))
920: break;
921: if(!iniSetShortInt(lp,section,"RescanFrequency",mail->rescan_frequency,&style))
922: break;
923: if(!iniSetShortInt(lp,section,"LinesPerYield",mail->lines_per_yield,&style))
924: break;
925: if(!iniSetShortInt(lp,section,"MaxRecipients",mail->max_recipients,&style))
926: break;
927: if(!iniSetInteger(lp,section,"MaxMsgSize",mail->max_msg_size,&style))
928: break;
929:
930: if(strcmp(mail->host_name,global->host_name)==0
931: || strcmp(bbs->host_name,cfg->sys_inetaddr)==0)
932: iniRemoveKey(lp,section,strHostName);
933: else if(!iniSetString(lp,section,strHostName,mail->host_name,&style))
934: break;
935:
936: if(stricmp(mail->temp_dir,global->temp_dir)==0)
937: iniRemoveKey(lp,section,strTempDirectory);
938: else if(!iniSetString(lp,section,strTempDirectory,mail->temp_dir,&style))
939: break;
940:
941: if(!iniSetString(lp,section,"RelayServer",mail->relay_server,&style))
942: break;
943: if(!iniSetString(lp,section,"RelayUsername",mail->relay_user,&style))
944: break;
945: if(!iniSetString(lp,section,"RelayPassword",mail->relay_pass,&style))
946: break;
947:
948: if(!iniSetString(lp,section,"DNSServer",mail->dns_server,&style))
949: break;
950:
951: if(!iniSetString(lp,section,"DefaultCharset",mail->default_charset,&style))
952: break;
953:
954: if(!iniSetString(lp,section,"DefaultUser",mail->default_user,&style))
955: break;
956:
957: if(!iniSetString(lp,section,"DNSBlacklistHeader",mail->dnsbl_hdr,&style))
958: break;
959: if(!iniSetString(lp,section,"DNSBlacklistSubject",mail->dnsbl_tag,&style))
960: break;
961:
962: if(!iniSetString(lp,section,"POP3Sound",mail->pop3_sound,&style))
963: break;
964: if(!iniSetString(lp,section,"InboundSound",mail->inbound_sound,&style))
965: break;
966: if(!iniSetString(lp,section,"OutboundSound",mail->outbound_sound,&style))
967: break;
968:
969: /* JavaScript Operating Parameters */
970: if(!sbbs_set_js_settings(lp,section,&mail->js,&global->js,&style))
971: break;
972:
973: if(!iniSetBitField(lp,section,strOptions,mail_options,mail->options,&style))
974: break;
975:
976: if(mail->bind_retry_count==global->bind_retry_count)
977: iniRemoveValue(lp,section,strBindRetryCount);
978: else if(!iniSetInteger(lp,section,strBindRetryCount,mail->bind_retry_count,&style))
979: break;
980: if(mail->bind_retry_delay==global->bind_retry_delay)
981: iniRemoveValue(lp,section,strBindRetryDelay);
982: else if(!iniSetInteger(lp,section,strBindRetryDelay,mail->bind_retry_delay,&style))
983: break;
984: }
985:
986: /***********************************************************************/
987: if(services!=NULL) {
988:
989: section = "Services";
990:
991: if(!iniSetBool(lp,section,strAutoStart,run_services,&style))
992: break;
993:
994: if(services->interface_addr==global->interface_addr)
995: iniRemoveValue(lp,section,strInterface);
996: else if(!iniSetIpAddress(lp,section,strInterface,services->interface_addr,&style))
997: break;
998:
999: if(services->sem_chk_freq==global->sem_chk_freq)
1000: iniRemoveValue(lp,section,strSemFileCheckFrequency);
1001: else if(!iniSetShortInt(lp,section,strSemFileCheckFrequency,services->sem_chk_freq,&style))
1002: break;
1003:
1004: if(services->log_level==global->log_level)
1005: iniRemoveValue(lp,section,strLogLevel);
1006: else if(!iniSetLogLevel(lp,section,strLogLevel,services->log_level,&style))
1007: break;
1008:
1009: /* Configurable JavaScript default parameters */
1010: if(!sbbs_set_js_settings(lp,section,&services->js,&global->js,&style))
1011: break;
1012:
1013: if(strcmp(services->host_name,global->host_name)==0
1014: || strcmp(bbs->host_name,cfg->sys_inetaddr)==0)
1015: iniRemoveKey(lp,section,strHostName);
1016: else if(!iniSetString(lp,section,strHostName,services->host_name,&style))
1017: break;
1018:
1019: if(stricmp(services->temp_dir,global->temp_dir)==0)
1020: iniRemoveKey(lp,section,strTempDirectory);
1021: else if(!iniSetString(lp,section,strTempDirectory,services->temp_dir,&style))
1022: break;
1023:
1024: if(!iniSetString(lp,section,strAnswerSound,services->answer_sound,&style))
1025: break;
1026: if(!iniSetString(lp,section,strHangupSound,services->hangup_sound,&style))
1027: break;
1028:
1029: if(!iniSetBitField(lp,section,strOptions,service_options,services->options,&style))
1030: break;
1031:
1032: if(services->bind_retry_count==global->bind_retry_count)
1033: iniRemoveValue(lp,section,strBindRetryCount);
1034: else if(!iniSetInteger(lp,section,strBindRetryCount,services->bind_retry_count,&style))
1035: break;
1036: if(services->bind_retry_delay==global->bind_retry_delay)
1037: iniRemoveValue(lp,section,strBindRetryDelay);
1038: else if(!iniSetInteger(lp,section,strBindRetryDelay,services->bind_retry_delay,&style))
1039: break;
1040: }
1041:
1042: /***********************************************************************/
1043: if(web!=NULL) {
1044:
1045: section = "Web";
1046:
1047: if(!iniSetBool(lp,section,strAutoStart,run_web,&style))
1048: break;
1049:
1050: if(web->interface_addr==global->interface_addr)
1051: iniRemoveValue(lp,section,strInterface);
1052: else if(!iniSetIpAddress(lp,section,strInterface,web->interface_addr,&style))
1053: break;
1054:
1055: if(!iniSetShortInt(lp,section,strPort,web->port,&style))
1056: break;
1057: if(!iniSetShortInt(lp,section,strMaxClients,web->max_clients,&style))
1058: break;
1059: if(!iniSetShortInt(lp,section,strMaxInactivity,web->max_inactivity,&style))
1060: break;
1061:
1062: if(web->sem_chk_freq==global->sem_chk_freq)
1063: iniRemoveValue(lp,section,strSemFileCheckFrequency);
1064: else if(!iniSetShortInt(lp,section,strSemFileCheckFrequency,web->sem_chk_freq,&style))
1065: break;
1066:
1067: if(web->log_level==global->log_level)
1068: iniRemoveValue(lp,section,strLogLevel);
1069: else if(!iniSetLogLevel(lp,section,strLogLevel,web->log_level,&style))
1070: break;
1071:
1072: /* JavaScript Operating Parameters */
1073: if(!sbbs_set_js_settings(lp,section,&web->js,&global->js,&style))
1074: break;
1075:
1076: if(strcmp(web->host_name,global->host_name)==0
1077: || strcmp(bbs->host_name,cfg->sys_inetaddr)==0)
1078: iniRemoveKey(lp,section,strHostName);
1079: else if(!iniSetString(lp,section,strHostName,web->host_name,&style))
1080: break;
1081:
1082: if(stricmp(web->temp_dir,global->temp_dir)==0)
1083: iniRemoveKey(lp,section,strTempDirectory);
1084: else if(!iniSetString(lp,section,strTempDirectory,web->temp_dir,&style))
1085: break;
1086:
1087: if(!iniSetString(lp,section,"RootDirectory",web->root_dir,&style))
1088: break;
1089: if(!iniSetString(lp,section,"ErrorDirectory",web->error_dir,&style))
1090: break;
1091: if(!iniSetString(lp,section,"CGIDirectory",web->cgi_dir,&style))
1092: break;
1093: if(!iniSetString(lp,section,"HttpLogFile",web->logfile_base,&style))
1094: break;
1095:
1096: if(!iniSetString(lp,section,"DefaultCGIContent",web->default_cgi_content,&style))
1097: break;
1098:
1099: if(!iniSetStringList(lp,section,"IndexFileNames", "," ,web->index_file_name,&style))
1100: break;
1101: if(!iniSetStringList(lp,section,"CGIExtensions", "," ,web->cgi_ext,&style))
1102: break;
1103:
1104: if(!iniSetString(lp,section,"JavaScriptExtension",web->ssjs_ext,&style))
1105: break;
1106:
1107: if(!iniSetShortInt(lp,section,strMaxInactivity,web->max_inactivity,&style))
1108: break;
1109: if(!iniSetShortInt(lp,section,"MaxCgiInactivity",web->max_cgi_inactivity,&style))
1110: break;
1111:
1112: if(!iniSetString(lp,section,strAnswerSound,web->answer_sound,&style))
1113: break;
1114: if(!iniSetString(lp,section,strHangupSound,web->hangup_sound,&style))
1115: break;
1116: if(!iniSetString(lp,section,strHackAttemptSound,web->hack_sound,&style))
1117: break;
1118:
1119: if(!iniSetBitField(lp,section,strOptions,web_options,web->options,&style))
1120: break;
1121:
1122: if(web->bind_retry_count==global->bind_retry_count)
1123: iniRemoveValue(lp,section,strBindRetryCount);
1124: else if(!iniSetInteger(lp,section,strBindRetryCount,web->bind_retry_count,&style))
1125: break;
1126: if(web->bind_retry_delay==global->bind_retry_delay)
1127: iniRemoveValue(lp,section,strBindRetryDelay);
1128: else if(!iniSetInteger(lp,section,strBindRetryDelay,web->bind_retry_delay,&style))
1129: break;
1130: if(!iniSetShortInt(lp,section,"OutbufHighwaterMark",web->outbuf_highwater_mark,&style))
1131: break;
1132: if(!iniSetShortInt(lp,section,"OutbufDrainTimeout",web->outbuf_drain_timeout,&style))
1133: break;
1134: }
1135:
1136: /***********************************************************************/
1137: result=iniWriteFile(fp,list);
1138:
1139: } while(0); /* finally */
1140:
1141: iniFreeStringList(list);
1142:
1143: return(result);
1144: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.