|
|
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.