|
|
1.1 root 1: /* sbbs_ini.c */
2:
3: /* Synchronet console configuration (.ini) file routines */
4:
5: /* $Id: sbbs_ini.c,v 1.97 2005/01/01 01:11:44 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 2004 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 "dirwrap.h" /* backslash */
41: #include "sbbs_ini.h"
42: #include "sbbsdefs.h" /* JAVASCRIPT_* macros */
43:
44: static const char* nulstr="";
45: static const char* strCtrlDirectory="CtrlDirectory";
46: static const char* strTempDirectory="TempDirectory";
47: static const char* strOptions="Options";
48: static const char* strInterface="Interface";
49: static const char* strHostName="HostName";
50: static const char* strLogMask="LogMask";
51: static const char* strBindRetryCount="BindRetryCount";
52: static const char* strBindRetryDelay="BindRetryDelay";
53:
54: #if defined(SBBSNTSVCS) && 0 /* sbbs_ini.obj is shared with sbbs.exe (!) */
55: #define DEFAULT_LOG_MASK 0x3f /* EMERG|ALERT|CRIT|ERR|WARNING|NOTICE */
56: #else
57: #define DEFAULT_LOG_MASK 0xff /* EMERG|ALERT|CRIT|ERR|WARNING|NOTICE|INFO|DEBUG */
58: #endif
59: #define DEFAULT_MAX_MSG_SIZE (10*1024*1024) /* 10MB */
60: #define DEFAULT_BIND_RETRY_COUNT 2
61: #define DEFAULT_BIND_RETRY_DELAY 15
62:
63: void sbbs_get_ini_fname(char* ini_file, char* ctrl_dir, char* pHostName)
64: {
65: char host_name[128];
66: char path[MAX_PATH+1];
67: char* p;
68:
69: if(pHostName!=NULL)
70: SAFECOPY(host_name,pHostName);
71: else {
72: #if defined(_WINSOCKAPI_)
73: WSADATA WSAData;
74: WSAStartup(MAKEWORD(1,1), &WSAData); /* req'd for gethostname */
75: #endif
76: gethostname(host_name,sizeof(host_name)-1);
77: #if defined(_WINSOCKAPI_)
78: WSACleanup();
79: #endif
80: }
81: SAFECOPY(path,ctrl_dir);
82: backslash(path);
83: sprintf(ini_file,"%s%s.ini",path,host_name);
84: if(fexistcase(ini_file))
85: return;
86: if((p=strchr(host_name,'.'))!=NULL) {
87: *p=0;
88: sprintf(ini_file,"%s%s.ini",path,host_name);
89: if(fexistcase(ini_file))
90: return;
91: }
92: #if defined(__unix__) && defined(PREFIX)
93: sprintf(ini_file,PREFIX"/etc/sbbs.ini");
94: if(fexistcase(ini_file))
95: return;
96: #endif
97: sprintf(ini_file,"%ssbbs.ini",path);
98: }
99:
100: static void read_ini_globals(FILE* fp, global_startup_t* global)
101: {
102: const char* section = "Global";
103: char value[INI_MAX_VALUE_LEN];
104: char* p;
105:
106: p=iniReadString(fp,section,strCtrlDirectory,nulstr,value);
107: if(*p) {
108: SAFECOPY(global->ctrl_dir,value);
109: backslash(global->ctrl_dir);
110: }
111:
112: p=iniReadString(fp,section,strTempDirectory,nulstr,value);
113: if(*p) {
114: SAFECOPY(global->temp_dir,value);
115: backslash(global->temp_dir);
116: }
117:
118: p=iniReadString(fp,section,strHostName,nulstr,value);
119: if(*p)
120: SAFECOPY(global->host_name,value);
121:
122: global->sem_chk_freq=iniReadShortInt(fp,section,strSemFileCheckFrequency,0);
123: global->interface_addr=iniReadIpAddress(fp,section,strInterface,INADDR_ANY);
124: global->log_mask=iniReadBitField(fp,section,strLogMask,log_mask_bits,DEFAULT_LOG_MASK);
125: global->bind_retry_count=iniReadInteger(fp,section,strBindRetryCount,DEFAULT_BIND_RETRY_COUNT);
126: global->bind_retry_delay=iniReadInteger(fp,section,strBindRetryDelay,DEFAULT_BIND_RETRY_DELAY);
127:
128: global->js.max_bytes = iniReadInteger(fp,section,strJavaScriptMaxBytes ,JAVASCRIPT_MAX_BYTES);
129: global->js.cx_stack = iniReadInteger(fp,section,strJavaScriptContextStack ,JAVASCRIPT_CONTEXT_STACK);
130: global->js.branch_limit = iniReadInteger(fp,section,strJavaScriptBranchLimit ,JAVASCRIPT_BRANCH_LIMIT);
131: global->js.gc_interval = iniReadInteger(fp,section,strJavaScriptGcInterval ,JAVASCRIPT_GC_INTERVAL);
132: global->js.yield_interval = iniReadInteger(fp,section,strJavaScriptYieldInterval ,JAVASCRIPT_YIELD_INTERVAL);
133: }
134:
135:
136: void sbbs_read_ini(
137: FILE* fp
138: ,global_startup_t* global
139: ,BOOL* run_bbs
140: ,bbs_startup_t* bbs
141: ,BOOL* run_ftp
142: ,ftp_startup_t* ftp
143: ,BOOL* run_web
144: ,web_startup_t* web
145: ,BOOL* run_mail
146: ,mail_startup_t* mail
147: ,BOOL* run_services
148: ,services_startup_t* services
149: )
150: {
151: const char* section;
152: const char* default_term_ansi;
153: const char* default_cgi_temp;
154: const char* default_dosemu_path;
155: char value[INI_MAX_VALUE_LEN];
156: global_startup_t global_buf;
157:
158: if(global==NULL) {
159: memset(&global_buf,0,sizeof(global_buf));
160: global=&global_buf;
161: }
162:
163: read_ini_globals(fp, global);
164:
165: if(global->ctrl_dir[0]) {
166: if(bbs!=NULL) SAFECOPY(bbs->ctrl_dir,global->ctrl_dir);
167: if(ftp!=NULL) SAFECOPY(ftp->ctrl_dir,global->ctrl_dir);
168: if(mail!=NULL) SAFECOPY(mail->ctrl_dir,global->ctrl_dir);
169: if(services!=NULL) SAFECOPY(services->ctrl_dir,global->ctrl_dir);
170: }
171: if(global->temp_dir[0]) {
172: if(bbs!=NULL) SAFECOPY(bbs->temp_dir,global->temp_dir);
173: if(ftp!=NULL) SAFECOPY(ftp->temp_dir,global->temp_dir);
174: }
175:
176: /***********************************************************************/
177: if(bbs!=NULL) {
178:
179: section = "BBS";
180:
181: if(run_bbs!=NULL)
182: *run_bbs=iniReadBool(fp,section,"AutoStart",TRUE);
183:
184: bbs->telnet_interface
185: =iniReadIpAddress(fp,section,"TelnetInterface",global->interface_addr);
186: bbs->telnet_port
187: =iniReadShortInt(fp,section,"TelnetPort",IPPORT_TELNET);
188:
189: bbs->rlogin_interface
190: =iniReadIpAddress(fp,section,"RLoginInterface",global->interface_addr);
191: bbs->rlogin_port
192: =iniReadShortInt(fp,section,"RLoginPort",513);
193:
194: bbs->first_node
195: =iniReadShortInt(fp,section,"FirstNode",1);
196: bbs->last_node
197: =iniReadShortInt(fp,section,"LastNode",4);
198:
199: bbs->outbuf_highwater_mark
200: =iniReadShortInt(fp,section,"OutbufHighwaterMark",1024);
201: bbs->outbuf_drain_timeout
202: =iniReadShortInt(fp,section,"OutbufDrainTimeout",10);
203:
204: bbs->sem_chk_freq
205: =iniReadShortInt(fp,section,strSemFileCheckFrequency,global->sem_chk_freq);
206:
207: bbs->xtrn_polls_before_yield
208: =iniReadInteger(fp,section,"ExternalYield",10);
209:
210: /* JavaScript operating parameters */
211: bbs->js_max_bytes
212: =iniReadInteger(fp,section,strJavaScriptMaxBytes ,global->js.max_bytes);
213: bbs->js_cx_stack
214: =iniReadInteger(fp,section,strJavaScriptContextStack ,global->js.cx_stack);
215: bbs->js_branch_limit
216: =iniReadInteger(fp,section,strJavaScriptBranchLimit ,global->js.branch_limit);
217: bbs->js_gc_interval
218: =iniReadInteger(fp,section,strJavaScriptGcInterval ,global->js.gc_interval);
219: bbs->js_yield_interval
220: =iniReadInteger(fp,section,strJavaScriptYieldInterval,global->js.yield_interval);
221:
222: SAFECOPY(bbs->host_name
223: ,iniReadString(fp,section,strHostName,global->host_name,value));
224:
225: /* Set default terminal type to "stock" termcap closest to "ansi-bbs" */
226: #if defined(__FreeBSD__)
227: default_term_ansi="cons25";
228: #else
229: default_term_ansi="pc3";
230: #endif
231:
232: SAFECOPY(bbs->xtrn_term_ansi
233: ,iniReadString(fp,section,"ExternalTermANSI",default_term_ansi,value));
234: SAFECOPY(bbs->xtrn_term_dumb
235: ,iniReadString(fp,section,"ExternalTermDumb","dumb",value));
236:
237: #if defined(__FreeBSD__)
238: default_dosemu_path="/usr/bin/doscmd";
239: #else
240: default_dosemu_path="/usr/bin/dosemu.bin";
241: #endif
242:
243: SAFECOPY(bbs->dosemu_path
244: ,iniReadString(fp,section,"DOSemuPath",default_dosemu_path,value));
245:
246: SAFECOPY(bbs->answer_sound
247: ,iniReadString(fp,section,"AnswerSound",nulstr,value));
248: SAFECOPY(bbs->hangup_sound
249: ,iniReadString(fp,section,"HangupSound",nulstr,value));
250:
251: bbs->log_mask
252: =iniReadBitField(fp,section,strLogMask,log_mask_bits,global->log_mask);
253: bbs->options
254: =iniReadBitField(fp,section,strOptions,bbs_options
255: ,BBS_OPT_XTRN_MINIMIZED|BBS_OPT_SYSOP_AVAILABLE);
256:
257: bbs->bind_retry_count=iniReadInteger(fp,section,strBindRetryCount,global->bind_retry_count);
258: bbs->bind_retry_delay=iniReadInteger(fp,section,strBindRetryDelay,global->bind_retry_delay);
259: }
260:
261: /***********************************************************************/
262: if(ftp!=NULL) {
263:
264: section = "FTP";
265:
266: if(run_ftp!=NULL)
267: *run_ftp=iniReadBool(fp,section,"AutoStart",TRUE);
268:
269: ftp->interface_addr
270: =iniReadIpAddress(fp,section,strInterface,global->interface_addr);
271: ftp->port
272: =iniReadShortInt(fp,section,"Port",IPPORT_FTP);
273: ftp->max_clients
274: =iniReadShortInt(fp,section,"MaxClients",10);
275: ftp->max_inactivity
276: =iniReadShortInt(fp,section,"MaxInactivity",300); /* seconds */
277: ftp->qwk_timeout
278: =iniReadShortInt(fp,section,"QwkTimeout",600); /* seconds */
279: ftp->sem_chk_freq
280: =iniReadShortInt(fp,section,strSemFileCheckFrequency,global->sem_chk_freq);
281:
282: /* JavaScript Operating Parameters */
283: ftp->js_max_bytes
284: =iniReadInteger(fp,section,strJavaScriptMaxBytes ,global->js.max_bytes);
285: ftp->js_cx_stack
286: =iniReadInteger(fp,section,strJavaScriptContextStack ,global->js.cx_stack);
287:
288: SAFECOPY(ftp->host_name
289: ,iniReadString(fp,section,strHostName,global->host_name,value));
290:
291: SAFECOPY(ftp->index_file_name
292: ,iniReadString(fp,section,"IndexFileName","00index",value));
293: SAFECOPY(ftp->html_index_file
294: ,iniReadString(fp,section,"HtmlIndexFile","00index.html",value));
295: SAFECOPY(ftp->html_index_script
296: ,iniReadString(fp,section,"HtmlIndexScript","ftp-html.js",value));
297:
298: SAFECOPY(ftp->answer_sound
299: ,iniReadString(fp,section,"AnswerSound",nulstr,value));
300: SAFECOPY(ftp->hangup_sound
301: ,iniReadString(fp,section,"HangupSound",nulstr,value));
302: SAFECOPY(ftp->hack_sound
303: ,iniReadString(fp,section,"HackAttemptSound",nulstr,value));
304:
305: ftp->log_mask
306: =iniReadBitField(fp,section,strLogMask,log_mask_bits,global->log_mask);
307: ftp->options
308: =iniReadBitField(fp,section,strOptions,ftp_options
309: ,FTP_OPT_INDEX_FILE|FTP_OPT_HTML_INDEX_FILE|FTP_OPT_ALLOW_QWK);
310:
311: ftp->bind_retry_count=iniReadInteger(fp,section,strBindRetryCount,global->bind_retry_count);
312: ftp->bind_retry_delay=iniReadInteger(fp,section,strBindRetryDelay,global->bind_retry_delay);
313: }
314:
315: /***********************************************************************/
316: if(mail!=NULL) {
317:
318: section = "Mail";
319:
320: if(run_mail!=NULL)
321: *run_mail=iniReadBool(fp,section,"AutoStart",TRUE);
322:
323: mail->interface_addr
324: =iniReadIpAddress(fp,section,strInterface,global->interface_addr);
325: mail->smtp_port
326: =iniReadShortInt(fp,section,"SMTPPort",IPPORT_SMTP);
327: mail->pop3_port
328: =iniReadShortInt(fp,section,"POP3Port",IPPORT_POP3);
329: mail->relay_port
330: =iniReadShortInt(fp,section,"RelayPort",IPPORT_SMTP);
331: mail->max_clients
332: =iniReadShortInt(fp,section,"MaxClients",10);
333: mail->max_inactivity
334: =iniReadShortInt(fp,section,"MaxInactivity",120); /* seconds */
335: mail->max_delivery_attempts
336: =iniReadShortInt(fp,section,"MaxDeliveryAttempts",50);
337: mail->rescan_frequency
338: =iniReadShortInt(fp,section,"RescanFrequency",3600); /* 60 minutes */
339: mail->sem_chk_freq
340: =iniReadShortInt(fp,section,strSemFileCheckFrequency,global->sem_chk_freq);
341: mail->lines_per_yield
342: =iniReadShortInt(fp,section,"LinesPerYield",10);
343: mail->max_recipients
344: =iniReadShortInt(fp,section,"MaxRecipients",100);
345: mail->max_msg_size
346: =iniReadInteger(fp,section,"MaxMsgSize",DEFAULT_MAX_MSG_SIZE);
347:
348: SAFECOPY(mail->host_name
349: ,iniReadString(fp,section,strHostName,global->host_name,value));
350:
351: SAFECOPY(mail->relay_server
352: ,iniReadString(fp,section,"RelayServer",mail->relay_server,value));
353: SAFECOPY(mail->relay_user
354: ,iniReadString(fp,section,"RelayUsername",mail->relay_user,value));
355: SAFECOPY(mail->relay_pass
356: ,iniReadString(fp,section,"RelayPassword",mail->relay_pass,value));
357:
358: SAFECOPY(mail->dns_server
359: ,iniReadString(fp,section,"DNSServer",mail->dns_server,value));
360:
361: SAFECOPY(mail->default_user
362: ,iniReadString(fp,section,"DefaultUser",nulstr,value));
363:
364: SAFECOPY(mail->dnsbl_hdr
365: ,iniReadString(fp,section,"DNSBlacklistHeader","X-DNSBL",value));
366: SAFECOPY(mail->dnsbl_tag
367: ,iniReadString(fp,section,"DNSBlacklistSubject","SPAM",value));
368:
369: SAFECOPY(mail->pop3_sound
370: ,iniReadString(fp,section,"POP3Sound",nulstr,value));
371: SAFECOPY(mail->inbound_sound
372: ,iniReadString(fp,section,"InboundSound",nulstr,value));
373: SAFECOPY(mail->outbound_sound
374: ,iniReadString(fp,section,"OutboundSound",nulstr,value));
375:
376: /* JavaScript Operating Parameters */
377: mail->js_max_bytes
378: =iniReadInteger(fp,section,strJavaScriptMaxBytes ,global->js.max_bytes);
379: mail->js_cx_stack
380: =iniReadInteger(fp,section,strJavaScriptContextStack ,global->js.cx_stack);
381:
382: mail->log_mask
383: =iniReadBitField(fp,section,strLogMask,log_mask_bits,global->log_mask);
384: mail->options
385: =iniReadBitField(fp,section,strOptions,mail_options
386: ,MAIL_OPT_ALLOW_POP3);
387:
388: mail->bind_retry_count=iniReadInteger(fp,section,strBindRetryCount,global->bind_retry_count);
389: mail->bind_retry_delay=iniReadInteger(fp,section,strBindRetryDelay,global->bind_retry_delay);
390: }
391:
392: /***********************************************************************/
393: if(services!=NULL) {
394:
395: section = "Services";
396:
397: if(run_services!=NULL)
398: *run_services=iniReadBool(fp,section,"AutoStart",TRUE);
399:
400: services->interface_addr
401: =iniReadIpAddress(fp,section,strInterface,global->interface_addr);
402:
403: services->sem_chk_freq
404: =iniReadShortInt(fp,section,strSemFileCheckFrequency,global->sem_chk_freq);
405:
406: /* Configurable JavaScript default parameters */
407: services->js_max_bytes
408: =iniReadInteger(fp,section,strJavaScriptMaxBytes ,global->js.max_bytes);
409: services->js_cx_stack
410: =iniReadInteger(fp,section,strJavaScriptContextStack ,global->js.cx_stack);
411: services->js_branch_limit
412: =iniReadInteger(fp,section,strJavaScriptBranchLimit ,global->js.branch_limit);
413: services->js_gc_interval
414: =iniReadInteger(fp,section,strJavaScriptGcInterval ,global->js.gc_interval);
415: services->js_yield_interval
416: =iniReadInteger(fp,section,strJavaScriptYieldInterval,global->js.yield_interval);
417:
418: SAFECOPY(services->host_name
419: ,iniReadString(fp,section,strHostName,global->host_name,value));
420:
421: SAFECOPY(services->answer_sound
422: ,iniReadString(fp,section,"AnswerSound",nulstr,value));
423: SAFECOPY(services->hangup_sound
424: ,iniReadString(fp,section,"HangupSound",nulstr,value));
425:
426: services->log_mask
427: =iniReadBitField(fp,section,strLogMask,log_mask_bits,global->log_mask);
428: services->options
429: =iniReadBitField(fp,section,strOptions,service_options
430: ,BBS_OPT_NO_HOST_LOOKUP);
431:
432: services->bind_retry_count=iniReadInteger(fp,section,strBindRetryCount,global->bind_retry_count);
433: services->bind_retry_delay=iniReadInteger(fp,section,strBindRetryDelay,global->bind_retry_delay);
434: }
435:
436: /***********************************************************************/
437: if(web!=NULL) {
438:
439: section = "Web";
440:
441: if(run_web!=NULL)
442: *run_web=iniReadBool(fp,section,"AutoStart",FALSE);
443:
444: web->interface_addr
445: =iniReadIpAddress(fp,section,strInterface,global->interface_addr);
446: web->port
447: =iniReadShortInt(fp,section,"Port",IPPORT_HTTP);
448: web->max_clients
449: =iniReadShortInt(fp,section,"MaxClients",10);
450: web->max_inactivity
451: =iniReadShortInt(fp,section,"MaxInactivity",120); /* seconds */
452: web->sem_chk_freq
453: =iniReadShortInt(fp,section,strSemFileCheckFrequency,global->sem_chk_freq);
454:
455: /* JavaScript Operating Parameters */
456: web->js_max_bytes
457: =iniReadInteger(fp,section,strJavaScriptMaxBytes ,global->js.max_bytes);
458: web->js_cx_stack
459: =iniReadInteger(fp,section,strJavaScriptContextStack ,global->js.cx_stack);
460: web->js_branch_limit
461: =iniReadInteger(fp,section,strJavaScriptBranchLimit ,global->js.branch_limit);
462: web->js_gc_interval
463: =iniReadInteger(fp,section,strJavaScriptGcInterval ,global->js.gc_interval);
464: web->js_yield_interval
465: =iniReadInteger(fp,section,strJavaScriptYieldInterval ,global->js.yield_interval);
466:
467: SAFECOPY(web->host_name
468: ,iniReadString(fp,section,strHostName,global->host_name,value));
469:
470: SAFECOPY(web->root_dir
471: ,iniReadString(fp,section,"RootDirectory",WEB_DEFAULT_ROOT_DIR,value));
472: SAFECOPY(web->error_dir
473: ,iniReadString(fp,section,"ErrorDirectory",WEB_DEFAULT_ERROR_DIR,value));
474: SAFECOPY(web->cgi_dir
475: ,iniReadString(fp,section,"CGIDirectory",WEB_DEFAULT_CGI_DIR,value));
476: SAFECOPY(web->logfile_base
477: ,iniReadString(fp,section,"HttpLogFile",nulstr,value));
478:
479: iniFreeStringList(web->index_file_name);
480: web->index_file_name
481: =iniReadStringList(fp,section,"IndexFileNames", "," ,"index.html,index.ssjs");
482: iniFreeStringList(web->cgi_ext);
483: web->cgi_ext
484: =iniReadStringList(fp,section,"CGIExtensions", "," ,".cgi");
485: SAFECOPY(web->ssjs_ext
486: ,iniReadString(fp,section,"JavaScriptExtension",".ssjs",value));
487: SAFECOPY(web->js_ext
488: ,iniReadString(fp,section,"EmbJavaScriptExtension",".bbs",value));
489:
490: web->max_inactivity
491: =iniReadShortInt(fp,section,"MaxInactivity",120); /* seconds */
492: web->max_cgi_inactivity
493: =iniReadShortInt(fp,section,"MaxCgiInactivity",120); /* seconds */
494:
495:
496: default_cgi_temp = _PATH_TMP;
497: SAFECOPY(web->cgi_temp_dir
498: ,iniReadString(fp,section,"CGITempDirectory",default_cgi_temp,value));
499:
500: web->log_mask
501: =iniReadBitField(fp,section,strLogMask,log_mask_bits,global->log_mask);
502: web->options
503: =iniReadBitField(fp,section,strOptions,web_options
504: ,BBS_OPT_NO_HOST_LOOKUP | WEB_OPT_HTTP_LOGGING);
505:
506: web->bind_retry_count=iniReadInteger(fp,section,strBindRetryCount,global->bind_retry_count);
507: web->bind_retry_delay=iniReadInteger(fp,section,strBindRetryDelay,global->bind_retry_delay);
508: }
509: }
510:
511: BOOL sbbs_write_ini(
512: FILE* fp
513: ,scfg_t* cfg
514: ,global_startup_t* global
515: ,BOOL run_bbs
516: ,bbs_startup_t* bbs
517: ,BOOL run_ftp
518: ,ftp_startup_t* ftp
519: ,BOOL run_web
520: ,web_startup_t* web
521: ,BOOL run_mail
522: ,mail_startup_t* mail
523: ,BOOL run_services
524: ,services_startup_t* services
525: )
526: {
527: const char* section;
528: BOOL result=FALSE;
529: str_list_t list;
530: str_list_t* lp;
531: ini_style_t style;
532: global_startup_t global_buf;
533:
534: if(global==NULL) {
535: read_ini_globals(fp, &global_buf);
536: global = &global_buf;
537: }
538:
539: memset(&style, 0, sizeof(style));
540: style.key_prefix = "\t";
541: style.bit_separator = " | ";
542:
543: if((list=iniReadFile(fp))==NULL)
544: return(FALSE);
545:
546: lp=&list;
547:
548: do { /* try */
549:
550: /***********************************************************************/
551: if(global!=&global_buf) {
552: section = "Global";
553:
554: if(global->ctrl_dir[0]==0)
555: iniRemoveKey(lp,section,strCtrlDirectory);
556: else
557: iniSetString(lp,section,strCtrlDirectory,global->ctrl_dir,&style);
558:
559: if(global->temp_dir[0]==0)
560: iniRemoveKey(lp,section,strTempDirectory);
561: else
562: iniSetString(lp,section,strTempDirectory,global->temp_dir,&style);
563:
564: if(global->host_name[0]==0)
565: iniRemoveKey(lp,section,strHostName);
566: else
567: iniSetString(lp,section,strHostName,global->host_name,&style);
568:
569: if(global->sem_chk_freq==0)
570: iniRemoveKey(lp,section,strSemFileCheckFrequency);
571: else
572: iniSetShortInt(lp,section,strSemFileCheckFrequency,global->sem_chk_freq,&style);
573: if(global->interface_addr==INADDR_ANY)
574: iniRemoveKey(lp,section,strInterface);
575: else
576: iniSetIpAddress(lp,section,strInterface,global->interface_addr,&style);
577: if(global->log_mask==DEFAULT_LOG_MASK)
578: iniRemoveKey(lp,section,strLogMask);
579: else
580: iniSetBitField(lp,section,strLogMask,log_mask_bits,global->log_mask,&style);
581:
582: if(global->bind_retry_count==DEFAULT_BIND_RETRY_COUNT)
583: iniRemoveKey(lp,section,strBindRetryCount);
584: else
585: iniSetInteger(lp,section,strBindRetryCount,global->bind_retry_count,&style);
586: if(global->bind_retry_delay==DEFAULT_BIND_RETRY_DELAY)
587: iniRemoveKey(lp,section,strBindRetryDelay);
588: else
589: iniSetInteger(lp,section,strBindRetryDelay,global->bind_retry_delay,&style);
590:
591: if(global->js.max_bytes==JAVASCRIPT_MAX_BYTES)
592: iniRemoveKey(lp,section,strJavaScriptMaxBytes);
593: else
594: iniSetInteger(lp,section,strJavaScriptMaxBytes,global->js.max_bytes,&style);
595: if(global->js.cx_stack==JAVASCRIPT_CONTEXT_STACK)
596: iniRemoveKey(lp,section,strJavaScriptContextStack);
597: else
598: iniSetInteger(lp,section,strJavaScriptContextStack,global->js.cx_stack,&style);
599: if(global->js.branch_limit==JAVASCRIPT_BRANCH_LIMIT)
600: iniRemoveKey(lp,section,strJavaScriptBranchLimit);
601: else
602: iniSetInteger(lp,section,strJavaScriptBranchLimit,global->js.branch_limit,&style);
603: if(global->js.gc_interval==JAVASCRIPT_GC_INTERVAL)
604: iniRemoveKey(lp,section,strJavaScriptGcInterval);
605: else
606: iniSetInteger(lp,section,strJavaScriptGcInterval,global->js.gc_interval,&style);
607: if(global->js.yield_interval==JAVASCRIPT_YIELD_INTERVAL)
608: iniRemoveKey(lp,section,strJavaScriptYieldInterval);
609: else
610: iniSetInteger(lp,section,strJavaScriptYieldInterval,global->js.yield_interval,&style);
611: }
612:
613: /***********************************************************************/
614: if(bbs!=NULL) {
615:
616: section = "BBS";
617:
618: if(!iniSetBool(lp,section,"AutoStart",run_bbs,&style))
619: break;
620:
621: if(bbs->telnet_interface==global->interface_addr)
622: iniRemoveValue(lp,section,"TelnetInterface");
623: else if(!iniSetIpAddress(lp,section,"TelnetInterface",bbs->telnet_interface,&style))
624: break;
625:
626: if(!iniSetShortInt(lp,section,"TelnetPort",bbs->telnet_port,&style))
627: break;
628:
629: if(bbs->rlogin_interface==global->interface_addr)
630: iniRemoveValue(lp,section,"RLoginInterface");
631: else if(!iniSetIpAddress(lp,section,"RLoginInterface",bbs->rlogin_interface,&style))
632: break;
633:
634: if(!iniSetShortInt(lp,section,"RLoginPort",bbs->rlogin_port,&style))
635: break;
636: if(!iniSetShortInt(lp,section,"FirstNode",bbs->first_node,&style))
637: break;
638: if(!iniSetShortInt(lp,section,"LastNode",bbs->last_node,&style))
639: break;
640: if(!iniSetShortInt(lp,section,"OutbufHighwaterMark",bbs->outbuf_highwater_mark,&style))
641: break;
642: if(!iniSetShortInt(lp,section,"OutbufDrainTimeout",bbs->outbuf_drain_timeout,&style))
643: break;
644:
645: if(bbs->sem_chk_freq==global->sem_chk_freq)
646: iniRemoveValue(lp,section,strSemFileCheckFrequency);
647: else if(!iniSetShortInt(lp,section,strSemFileCheckFrequency,bbs->sem_chk_freq,&style))
648: break;
649:
650: if(bbs->log_mask==global->log_mask)
651: iniRemoveValue(lp,section,strLogMask);
652: else if(!iniSetBitField(lp,section,strLogMask,log_mask_bits,bbs->log_mask,&style))
653: break;
654:
655: if(!iniSetInteger(lp,section,"ExternalYield",bbs->xtrn_polls_before_yield,&style))
656: break;
657:
658: /* JavaScript operating parameters */
659:
660: if(bbs->js_max_bytes==global->js.max_bytes)
661: iniRemoveValue(lp,section,strJavaScriptMaxBytes);
662: else if(!iniSetInteger(lp,section,strJavaScriptMaxBytes ,bbs->js_max_bytes,&style))
663: break;
664:
665: if(bbs->js_cx_stack==global->js.cx_stack)
666: iniRemoveValue(lp,section,strJavaScriptContextStack);
667: else if(!iniSetInteger(lp,section,strJavaScriptContextStack ,bbs->js_cx_stack,&style))
668: break;
669:
670: if(bbs->js_branch_limit==global->js.branch_limit)
671: iniRemoveValue(lp,section,strJavaScriptBranchLimit);
672: else if(!iniSetInteger(lp,section,strJavaScriptBranchLimit ,bbs->js_branch_limit,&style))
673: break;
674:
675: if(bbs->js_gc_interval==global->js.gc_interval)
676: iniRemoveValue(lp,section,strJavaScriptGcInterval);
677: else if(!iniSetInteger(lp,section,strJavaScriptGcInterval ,bbs->js_gc_interval,&style))
678: break;
679:
680: if(bbs->js_yield_interval==global->js.yield_interval)
681: iniRemoveValue(lp,section,strJavaScriptYieldInterval);
682: else if(!iniSetInteger(lp,section,strJavaScriptYieldInterval,bbs->js_yield_interval,&style))
683: break;
684:
685: if(strcmp(bbs->host_name,global->host_name)==0
686: || strcmp(bbs->host_name,cfg->sys_inetaddr)==0)
687: iniRemoveKey(lp,section,strHostName);
688: else if(!iniSetString(lp,section,strHostName,bbs->host_name,&style))
689: break;
690:
691: if(!iniSetString(lp,section,"ExternalTermANSI",bbs->xtrn_term_ansi,&style))
692: break;
693: if(!iniSetString(lp,section,"ExternalTermDumb",bbs->xtrn_term_dumb,&style))
694: break;
695: if(!iniSetString(lp,section,"DOSemuPath",bbs->dosemu_path,&style))
696: break;
697:
698: if(!iniSetString(lp,section,"AnswerSound",bbs->answer_sound,&style))
699: break;
700: if(!iniSetString(lp,section,"HangupSound",bbs->hangup_sound,&style))
701: break;
702:
703: if(!iniSetBitField(lp,section,strOptions,bbs_options,bbs->options,&style))
704: break;
705:
706: if(bbs->bind_retry_count==global->bind_retry_count)
707: iniRemoveValue(lp,section,strBindRetryCount);
708: else if(!iniSetInteger(lp,section,strBindRetryCount,bbs->bind_retry_count,&style))
709: break;
710: if(bbs->bind_retry_delay==global->bind_retry_delay)
711: iniRemoveValue(lp,section,strBindRetryCount);
712: else if(!iniSetInteger(lp,section,strBindRetryDelay,bbs->bind_retry_delay,&style))
713: break;
714: }
715: /***********************************************************************/
716: if(ftp!=NULL) {
717:
718: section = "FTP";
719:
720: if(!iniSetBool(lp,section,"AutoStart",run_ftp,&style))
721: break;
722:
723: if(ftp->interface_addr==global->interface_addr)
724: iniRemoveValue(lp,section,strInterface);
725: else if(!iniSetIpAddress(lp,section,strInterface,ftp->interface_addr,&style))
726: break;
727:
728: if(!iniSetShortInt(lp,section,"Port",ftp->port,&style))
729: break;
730: if(!iniSetShortInt(lp,section,"MaxClients",ftp->max_clients,&style))
731: break;
732: if(!iniSetShortInt(lp,section,"MaxInactivity",ftp->max_inactivity,&style))
733: break;
734: if(!iniSetShortInt(lp,section,"QwkTimeout",ftp->qwk_timeout,&style))
735: break;
736:
737: if(ftp->sem_chk_freq==global->sem_chk_freq)
738: iniRemoveValue(lp,section,strSemFileCheckFrequency);
739: else if(!iniSetShortInt(lp,section,strSemFileCheckFrequency,ftp->sem_chk_freq,&style))
740: break;
741:
742: if(ftp->log_mask==global->log_mask)
743: iniRemoveValue(lp,section,strLogMask);
744: else if(!iniSetBitField(lp,section,strLogMask,log_mask_bits,ftp->log_mask,&style))
745: break;
746:
747: /* JavaScript Operating Parameters */
748:
749: if(ftp->js_max_bytes==global->js.max_bytes)
750: iniRemoveValue(lp,section,strJavaScriptMaxBytes);
751: else if(!iniSetInteger(lp,section,strJavaScriptMaxBytes ,ftp->js_max_bytes,&style))
752: break;
753:
754: if(ftp->js_cx_stack==global->js.cx_stack)
755: iniRemoveValue(lp,section,strJavaScriptContextStack);
756: else if(!iniSetInteger(lp,section,strJavaScriptContextStack ,ftp->js_cx_stack,&style))
757: break;
758:
759: if(strcmp(ftp->host_name,global->host_name)==0
760: || strcmp(bbs->host_name,cfg->sys_inetaddr)==0)
761: iniRemoveKey(lp,section,strHostName);
762: else if(!iniSetString(lp,section,strHostName,ftp->host_name,&style))
763: break;
764:
765: if(!iniSetString(lp,section,"IndexFileName",ftp->index_file_name,&style))
766: break;
767: if(!iniSetString(lp,section,"HtmlIndexFile",ftp->html_index_file,&style))
768: break;
769: if(!iniSetString(lp,section,"HtmlIndexScript",ftp->html_index_script,&style))
770: break;
771:
772: if(!iniSetString(lp,section,"AnswerSound",ftp->answer_sound,&style))
773: break;
774: if(!iniSetString(lp,section,"HangupSound",ftp->hangup_sound,&style))
775: break;
776: if(!iniSetString(lp,section,"HackAttemptSound",ftp->hack_sound,&style))
777: break;
778:
779: if(!iniSetBitField(lp,section,strOptions,ftp_options,ftp->options,&style))
780: break;
781:
782: if(ftp->bind_retry_count==global->bind_retry_count)
783: iniRemoveValue(lp,section,strBindRetryCount);
784: else if(!iniSetInteger(lp,section,strBindRetryCount,ftp->bind_retry_count,&style))
785: break;
786: if(ftp->bind_retry_delay==global->bind_retry_delay)
787: iniRemoveValue(lp,section,strBindRetryCount);
788: else if(!iniSetInteger(lp,section,strBindRetryDelay,ftp->bind_retry_delay,&style))
789: break;
790: }
791:
792: /***********************************************************************/
793: if(mail!=NULL) {
794:
795: section = "Mail";
796:
797: if(!iniSetBool(lp,section,"AutoStart",run_mail,&style))
798: break;
799:
800: if(mail->interface_addr==global->interface_addr)
801: iniRemoveValue(lp,section,strInterface);
802: else if(!iniSetIpAddress(lp,section,strInterface,mail->interface_addr,&style))
803: break;
804:
805: if(mail->sem_chk_freq==global->sem_chk_freq)
806: iniRemoveValue(lp,section,strSemFileCheckFrequency);
807: else if(!iniSetShortInt(lp,section,strSemFileCheckFrequency,mail->sem_chk_freq,&style))
808: break;
809:
810: if(mail->log_mask==global->log_mask)
811: iniRemoveValue(lp,section,strLogMask);
812: else if(!iniSetBitField(lp,section,strLogMask,log_mask_bits,mail->log_mask,&style))
813: break;
814:
815: if(!iniSetShortInt(lp,section,"SMTPPort",mail->smtp_port,&style))
816: break;
817: if(!iniSetShortInt(lp,section,"POP3Port",mail->pop3_port,&style))
818: break;
819: if(!iniSetShortInt(lp,section,"RelayPort",mail->relay_port,&style))
820: break;
821: if(!iniSetShortInt(lp,section,"MaxClients",mail->max_clients,&style))
822: break;
823: if(!iniSetShortInt(lp,section,"MaxInactivity",mail->max_inactivity,&style))
824: break;
825: if(!iniSetShortInt(lp,section,"MaxDeliveryAttempts",mail->max_delivery_attempts,&style))
826: break;
827: if(!iniSetShortInt(lp,section,"RescanFrequency",mail->rescan_frequency,&style))
828: break;
829: if(!iniSetShortInt(lp,section,"LinesPerYield",mail->lines_per_yield,&style))
830: break;
831: if(!iniSetShortInt(lp,section,"MaxRecipients",mail->max_recipients,&style))
832: break;
833: if(!iniSetInteger(lp,section,"MaxMsgSize",mail->max_msg_size,&style))
834: break;
835:
836: if(strcmp(mail->host_name,global->host_name)==0
837: || strcmp(bbs->host_name,cfg->sys_inetaddr)==0)
838: iniRemoveKey(lp,section,strHostName);
839: else if(!iniSetString(lp,section,strHostName,mail->host_name,&style))
840: break;
841:
842: if(!iniSetString(lp,section,"RelayServer",mail->relay_server,&style))
843: break;
844: if(!iniSetString(lp,section,"RelayUsername",mail->relay_user,&style))
845: break;
846: if(!iniSetString(lp,section,"RelayPassword",mail->relay_pass,&style))
847: break;
848:
849: if(!iniSetString(lp,section,"DNSServer",mail->dns_server,&style))
850: break;
851:
852: if(!iniSetString(lp,section,"DefaultUser",mail->default_user,&style))
853: break;
854:
855: if(!iniSetString(lp,section,"DNSBlacklistHeader",mail->dnsbl_hdr,&style))
856: break;
857: if(!iniSetString(lp,section,"DNSBlacklistSubject",mail->dnsbl_tag,&style))
858: break;
859:
860: if(!iniSetString(lp,section,"POP3Sound",mail->pop3_sound,&style))
861: break;
862: if(!iniSetString(lp,section,"InboundSound",mail->inbound_sound,&style))
863: break;
864: if(!iniSetString(lp,section,"OutboundSound",mail->outbound_sound,&style))
865: break;
866:
867: /* JavaScript Operating Parameters */
868: if(mail->js_max_bytes==global->js.max_bytes)
869: iniRemoveValue(lp,section,strJavaScriptMaxBytes);
870: else if(!iniSetInteger(lp,section,strJavaScriptMaxBytes ,mail->js_max_bytes,&style))
871: break;
872:
873: if(mail->js_cx_stack==global->js.cx_stack)
874: iniRemoveValue(lp,section,strJavaScriptContextStack);
875: else if(!iniSetInteger(lp,section,strJavaScriptContextStack ,mail->js_cx_stack,&style))
876: break;
877:
878: if(!iniSetBitField(lp,section,strOptions,mail_options,mail->options,&style))
879: break;
880:
881: if(mail->bind_retry_count==global->bind_retry_count)
882: iniRemoveValue(lp,section,strBindRetryCount);
883: else if(!iniSetInteger(lp,section,strBindRetryCount,mail->bind_retry_count,&style))
884: break;
885: if(mail->bind_retry_delay==global->bind_retry_delay)
886: iniRemoveValue(lp,section,strBindRetryCount);
887: else if(!iniSetInteger(lp,section,strBindRetryDelay,mail->bind_retry_delay,&style))
888: break;
889: }
890:
891: /***********************************************************************/
892: if(services!=NULL) {
893:
894: section = "Services";
895:
896: if(!iniSetBool(lp,section,"AutoStart",run_services,&style))
897: break;
898:
899: if(services->interface_addr==global->interface_addr)
900: iniRemoveValue(lp,section,strInterface);
901: else if(!iniSetIpAddress(lp,section,strInterface,services->interface_addr,&style))
902: break;
903:
904: if(services->sem_chk_freq==global->sem_chk_freq)
905: iniRemoveValue(lp,section,strSemFileCheckFrequency);
906: else if(!iniSetShortInt(lp,section,strSemFileCheckFrequency,services->sem_chk_freq,&style))
907: break;
908:
909: if(services->log_mask==global->log_mask)
910: iniRemoveValue(lp,section,strLogMask);
911: else if(!iniSetBitField(lp,section,strLogMask,log_mask_bits,services->log_mask,&style))
912: break;
913:
914: /* Configurable JavaScript default parameters */
915: if(services->js_max_bytes==global->js.max_bytes)
916: iniRemoveValue(lp,section,strJavaScriptMaxBytes);
917: else if(!iniSetInteger(lp,section,strJavaScriptMaxBytes ,services->js_max_bytes,&style))
918: break;
919:
920: if(services->js_cx_stack==global->js.cx_stack)
921: iniRemoveValue(lp,section,strJavaScriptContextStack);
922: else if(!iniSetInteger(lp,section,strJavaScriptContextStack ,services->js_cx_stack,&style))
923: break;
924:
925: if(services->js_branch_limit==global->js.branch_limit)
926: iniRemoveValue(lp,section,strJavaScriptBranchLimit);
927: else if(!iniSetInteger(lp,section,strJavaScriptBranchLimit ,services->js_branch_limit,&style))
928: break;
929:
930: if(services->js_gc_interval==global->js.gc_interval)
931: iniRemoveValue(lp,section,strJavaScriptGcInterval);
932: else if(!iniSetInteger(lp,section,strJavaScriptGcInterval ,services->js_gc_interval,&style))
933: break;
934:
935: if(services->js_yield_interval==global->js.yield_interval)
936: iniRemoveValue(lp,section,strJavaScriptYieldInterval);
937: else if(!iniSetInteger(lp,section,strJavaScriptYieldInterval ,services->js_yield_interval,&style))
938: break;
939:
940: if(strcmp(services->host_name,global->host_name)==0
941: || strcmp(bbs->host_name,cfg->sys_inetaddr)==0)
942: iniRemoveKey(lp,section,strHostName);
943: else if(!iniSetString(lp,section,strHostName,services->host_name,&style))
944: break;
945:
946: if(!iniSetString(lp,section,"AnswerSound",services->answer_sound,&style))
947: break;
948: if(!iniSetString(lp,section,"HangupSound",services->hangup_sound,&style))
949: break;
950:
951: if(!iniSetBitField(lp,section,strOptions,service_options,services->options,&style))
952: break;
953:
954: if(services->bind_retry_count==global->bind_retry_count)
955: iniRemoveValue(lp,section,strBindRetryCount);
956: else if(!iniSetInteger(lp,section,strBindRetryCount,services->bind_retry_count,&style))
957: break;
958: if(services->bind_retry_delay==global->bind_retry_delay)
959: iniRemoveValue(lp,section,strBindRetryCount);
960: else if(!iniSetInteger(lp,section,strBindRetryDelay,services->bind_retry_delay,&style))
961: break;
962: }
963:
964: /***********************************************************************/
965: if(web!=NULL) {
966:
967: section = "Web";
968:
969: if(!iniSetBool(lp,section,"AutoStart",run_web,&style))
970: break;
971:
972: if(web->interface_addr==global->interface_addr)
973: iniRemoveValue(lp,section,strInterface);
974: else if(!iniSetIpAddress(lp,section,strInterface,web->interface_addr,&style))
975: break;
976:
977: if(!iniSetShortInt(lp,section,"Port",web->port,&style))
978: break;
979: if(!iniSetShortInt(lp,section,"MaxClients",web->max_clients,&style))
980: break;
981: if(!iniSetShortInt(lp,section,"MaxInactivity",web->max_inactivity,&style))
982: break;
983:
984: if(web->sem_chk_freq==global->sem_chk_freq)
985: iniRemoveValue(lp,section,strSemFileCheckFrequency);
986: else if(!iniSetShortInt(lp,section,strSemFileCheckFrequency,web->sem_chk_freq,&style))
987: break;
988:
989: if(web->log_mask==global->log_mask)
990: iniRemoveValue(lp,section,strLogMask);
991: else if(!iniSetBitField(lp,section,strLogMask,log_mask_bits,web->log_mask,&style))
992: break;
993:
994: /* JavaScript Operating Parameters */
995: if(web->js_max_bytes==global->js.max_bytes)
996: iniRemoveValue(lp,section,strJavaScriptMaxBytes);
997: else if(!iniSetInteger(lp,section,strJavaScriptMaxBytes ,web->js_max_bytes,&style))
998: break;
999:
1000: if(web->js_cx_stack==global->js.cx_stack)
1001: iniRemoveValue(lp,section,strJavaScriptContextStack);
1002: else if(!iniSetInteger(lp,section,strJavaScriptContextStack ,web->js_cx_stack,&style))
1003: break;
1004:
1005: if(web->js_branch_limit==global->js.branch_limit)
1006: iniRemoveValue(lp,section,strJavaScriptBranchLimit);
1007: else if(!iniSetInteger(lp,section,strJavaScriptBranchLimit ,web->js_branch_limit,&style))
1008: break;
1009:
1010: if(web->js_gc_interval==global->js.gc_interval)
1011: iniRemoveValue(lp,section,strJavaScriptGcInterval);
1012: else if(!iniSetInteger(lp,section,strJavaScriptGcInterval ,web->js_gc_interval,&style))
1013: break;
1014:
1015: if(web->js_yield_interval==global->js.yield_interval)
1016: iniRemoveValue(lp,section,strJavaScriptYieldInterval);
1017: else if(!iniSetInteger(lp,section,strJavaScriptYieldInterval,web->js_yield_interval,&style))
1018: break;
1019:
1020: if(strcmp(web->host_name,global->host_name)==0
1021: || strcmp(bbs->host_name,cfg->sys_inetaddr)==0)
1022: iniRemoveKey(lp,section,strHostName);
1023: else if(!iniSetString(lp,section,strHostName,web->host_name,&style))
1024: break;
1025:
1026: if(!iniSetString(lp,section,"RootDirectory",web->root_dir,&style))
1027: break;
1028: if(!iniSetString(lp,section,"ErrorDirectory",web->error_dir,&style))
1029: break;
1030: if(!iniSetString(lp,section,"CGIDirectory",web->cgi_dir,&style))
1031: break;
1032:
1033: if(!iniSetStringList(lp,section,"IndexFileNames", "," ,web->index_file_name,&style))
1034: break;
1035: if(!iniSetStringList(lp,section,"CGIExtensions", "," ,web->cgi_ext,&style))
1036: break;
1037:
1038: if(!iniSetString(lp,section,"JavaScriptExtension",web->ssjs_ext,&style))
1039: break;
1040:
1041: if(!iniSetShortInt(lp,section,"MaxInactivity",web->max_inactivity,&style))
1042: break;
1043: if(!iniSetShortInt(lp,section,"MaxCgiInactivity",web->max_cgi_inactivity,&style))
1044: break;
1045:
1046: if(!iniSetString(lp,section,"CGITempDirectory",web->cgi_temp_dir,&style))
1047: break;
1048:
1049: if(!iniSetBitField(lp,section,strOptions,web_options,web->options,&style))
1050: break;
1051:
1052: if(web->bind_retry_count==global->bind_retry_count)
1053: iniRemoveValue(lp,section,strBindRetryCount);
1054: else if(!iniSetInteger(lp,section,strBindRetryCount,web->bind_retry_count,&style))
1055: break;
1056: if(web->bind_retry_delay==global->bind_retry_delay)
1057: iniRemoveValue(lp,section,strBindRetryCount);
1058: else if(!iniSetInteger(lp,section,strBindRetryDelay,web->bind_retry_delay,&style))
1059: break;
1060: }
1061:
1062: /***********************************************************************/
1063: result=iniWriteFile(fp,list);
1064:
1065: } while(0); /* finally */
1066:
1067: strListFree(&list);
1068:
1069: return(result);
1070: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.